Как удалить повторяющиеся файлы, созданные с помощью какао-стручков в iOS

Я использую стручки какао для интеграции нескольких сторонних файлов в свой проект.

Мне нужно интегрировать модуль ниже в свой проект

xcodeproj 'MyApp'
workspace 'MyApp'

source 'https://github.com/CocoaPods/Specs.git'

target :"MyApp", :exclusive => true do

  platform :ios, '7.0'

  pod 'AFNetworking', '2.0.2'

  pod 'TwilioSDK', '~>1.2.2'

  pod 'SocketRocket', '0.3.1-beta2'

  pod 'AppRTC'

end

Когда я запускаю pod install. Я получаю дубликаты, как показано ниже.

SRWebSocket.h как дубликаты

Когда я создаю свое приложение, я получаю сообщение об ошибке

ld: warning: directory not found for option '-L/Users/anand/Documents/
  Project/myApp_Backups/myApp_June/myApp_WEBRTC/Pods/build/Debug-
  iphoneos'
duplicate symbol _MD5_Update in:
    /Users/anand/Documents/Project/myApp_Backups/myApp_June/
  myApp_WEBRTC/Pods/AppRTC/Lib/libWebRTC.a(nss_static.md5.o)
    /Users/anand/Documents/Project/myApp_Backups/myApp_June/
  myApp_WEBRTC/Pods/TwilioSDK/Libraries/libcrypto.a(md5_dgst.o)
duplicate symbol _SHA1_Update in:

duplicate symbol _OBJC_IVAR_$_SRIOConsumer._readToCurrentFrame in:
    /Users/anand/Library/Developer/Xcode/DerivedData/myApp-
  gxdbyoohznnpigavdqmaeilzlavd/Build/Products/Debug-iphoneos/libPods-
  myApp-SocketRocket.a(SRWebSocket.o)
    /Users/anand/Documents/Project/myApp_Backups/myApp_June/
  myApp_WEBRTC/Pods/AppRTC/Lib/libWebRTC.a(socketrocket.SRWebSocket.o)

ld: 71 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я подумал о следующих решениях:

1) Удалите файл SRWebSocket.h - но он может получить ошибки, как и в Pods.

2) Удалите pod 'SocketRocket', '0.3.1-beta2' из файла pod и запустите pod install - но я использовал как SRWebSocket.h, так и SRWebSocket.m в своем проекте перед установкой AppRTC в мой проект ..!

Подскажите, пожалуйста, как я могу решить эту проблему.

Заранее спасибо..!


person Vidhyanand    schedule 25.06.2015    source источник
comment
Откройте свой файл модуля и удалите все модули (возьмите копию этих команд файла модуля) и обновите файл модуля с терминала и проверьте свой проект, теперь снова попробуйте вставить ранее выполненные команды, пропустить его и сохранить, а затем попытаться установить файл модуля.   -  person Sri..    schedule 26.06.2015
comment
После добавления файлов из модулей удалите старые файлы и их ссылки.   -  person ganesh manoj    schedule 26.06.2015
comment
Оба дубликата находятся в папке проекта pods. Могу ли я удалить в нем хоть один повторяющийся файл? Нет старых файлов для удаления ..!   -  person Vidhyanand    schedule 26.06.2015
comment
Свяжитесь с сопровождающим модуля AppRTC и сообщите ему, что ему нужно пометить файл SRWebRocket.h как частный заголовок, чтобы он не отображался в вашем проекте. Или используйте SocketRocket как фактическую зависимость и не включайте ее вручную.   -  person Jon Shier    schedule 29.06.2015


Ответы (7)


Я исправил указанную выше проблему, как показано ниже

В моем проекте Xcode - Параметры сборки - Другие флаги компоновщика - я удалил -all_load, после чего некоторые повторяющиеся ошибки исчезли.

Тем не менее после вышеуказанного решения я получаю предупреждения о дублировании Socket Rocket.

Я исправил это, перейдя в Pods Project - Selected Socket Rocket pods target - удалил файл SRWebSocket.m из компиляции. Работает нормально, дубликаты удалены.

Спасибо за все ответы ..

person Vidhyanand    schedule 06.07.2015

Вам необходимо удалить объектный код socketrocket из libWebRTC.a

запустите lipo -info libWebRTC.a, чтобы узнать, какие архитектуры есть в библиотеке (текущая версия - i386, armv7 и arm64)

Тогда беги

lipo libWebRTC.a -thin i386 -output libWebRTC-i386.a

Сделайте это для каждой архитектуры, заменив i386 соответствующим значением. Затем вам нужно извлечь объектные файлы из каждого архива.

mkdir libWebRTC-i386 && cd libWebRTC-i386 && ar -x ../libWebRTC-i386.a

Сделайте это для каждой из только что созданных новых библиотек с единой архитектурой. В каждой из новых папок вы найдете файлы .o, содержащие "socketrocket" - удалите их.

Затем повторно заархивируйте объектные файлы для каждой архитектуры.

libtool -static *.o -o ../libWebRTC-i386.a

Как только вы это сделаете, снова объедините их в жирную библиотеку.

lipo -create libWebRTC-armv7.a libWebRTC-arm64.a libWebRTC-i386.a -output libWebRTC.a

И вуаля, теперь он должен работать. На самом деле двоичный файл libWebRTC.a необходимо перекомпилировать без объектного кода socket rocket, и сокет rocket должен быть добавлен как зависимость к podspec.

person Jonny Williamson    schedule 13.08.2015

ДЕИНТЕГРАЦИЯ Решение

  • Сделайте резервную копию вашего проекта
  • Закройте Xcode
- install this gem on terminal:

https://github.com/kylef/cocoapods-deintegrate

  • запустите командную строку ниже:

    pod deintegrate

  • удалите файл Podfile.lock в каталоге вашего проекта

  • снова запустить установку:

    pod install

  • Откройте Xcode и очистите свой проект и каталог производных данных затем беги снова

Надеюсь, это решение решит вашу проблему.

Лучший

person mgyky    schedule 05.07.2015

На этапах сборки убедитесь, что один и тот же файл не компилируется более одного раза.

В вашем случае, возможно, в источниках компиляции есть два одинаковых файла m, просто удалите один и попробуйте перестроить.

person Allen    schedule 29.06.2015
comment
Здесь libWebRTC.a конфликтует с TwilioSDK и SocketRocket. См. Мой вопрос Я указал информацию о конфликтах. Как решить эту проблему ..! - person Vidhyanand; 29.06.2015

Выполните следующие действия, чтобы устранить ошибку символа дублирования.

1) Выберите свой проект Xcode> перейдите к «Фазам сборки».

2) Оттуда найдите имя файла, для которого вы получаете дубликат.

3) Если возможно, для ключевого слова поиска может быть несколько файлов ".m".

4) Удалите все файлы, кроме одного, который вам действительно нужно скомпилировать.

5) Таким же образом выполните процедуру для всех повторяющихся ошибок.

6) Вот и все! Ваша проблема обязательно будет решена.

person Sohil R. Memon    schedule 29.06.2015
comment
Я не обнаружил дубликатов файлов в источниках компиляции ..! Я думаю, что дубликаты появляются в файлах .a, дублирующий символ _MD5_Update в: myApp_WEBRTC / Pods / AppRTC / Lib / libWebRTC.a (nss_static.md5.o) myApp_WEBRTC / Pods / TwilioSDK / Libraries / libcrypto.g symbolst.md5_d duplicate duplicate _SHA1_Update in: Здесь возникают конфликты libWebRTC.a и /libcrypto.a.! - person Vidhyanand; 29.06.2015
comment
Ага! Удалите любой из файлов и попробуйте скомпилировать - person Sohil R. Memon; 29.06.2015
comment
Спасибо за ответ .. Я удалил дублирующийся файл SRWebSocket.m в Pods Project, проблема с дублированием решена ..! - person Vidhyanand; 06.07.2015

Создайте проблему для репозитория AppRTC, чтобы удалить заголовок и вместо этого установить зависимость от SRWebSocket. Как временное решение - привяжите AppRTC к локальному пути с помощью директивы :path и удалите этот файл из локального каталога. Или вы можете создать ссылку на локальный файл podspec с игнорированием заголовка SRWebSocket в конфигурации exclude_files .

person Sega-Zero    schedule 03.07.2015
comment
ДА .. У меня возникла проблема с AppRTC .. github.com/ISBX/apprtc- ios / issues / 3 - person Vidhyanand; 06.07.2015

Теперь очень легко удалить повторяющиеся файлы модулей или любые модули, которые не используются в вашем проекте.

  1. откройте свой pod-файл.
  2. прокомментируйте все pod-файлы, которые вы хотите удалить.

    введите здесь описание изображения

  3. используйте commend pod install

  4. вы удалите все ваши комментарии в терминале

Наслаждайтесь днем ​​за чашкой чая или кофе, пока пишете код.

person Anup Gupta    schedule 17.05.2019