如何删除IOS中通过可可pod生成的重复文件

时间:2015-06-25 13:51:36

标签: ios objective-c cocoapods

我正在使用可可豆荚将多个第三方文件整合到我的项目中。

我必须将pod下面集成到我的项目中

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安装时。我得到重复,如下所示..

SRWebSocket.h as duplicates

当我构建我的应用程序时,我收到错误

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安装 - 但我在我的项目中使用了SRWebSocket.h和SRWebSocket.m,然后将AppRTC安装到我的项目中..!

请建议我该如何解决这个问题..

先谢谢..!

7 个答案:

答案 0 :(得分:2)

我已修复上述问题

在我的Xcode项目中 - 构建设置 - 其他链接器标志 - 我删除了-all_load,然后一些重复的错误消失了。

在上述解决方案之后,我仍然收到Socket Rocket重复警告。

我通过转到Pods项目 - 选定的套接字Rocket pods目标来修复此问题 - 从编译中删除了SRWebSocket.m文件。它工作正常,重复删除。

感谢所有答案..

答案 1 :(得分:2)

您需要从libWebRTC.a

中删除socketrocket对象代码

运行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

为刚刚创建的每个新的单一体系结构库执行此操作。在每个新文件夹中,您将找到包含“socketrocket”的.o文件 - 删除这些文件。

然后重新存档每个架构的目标文件

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

完成后,将它们重新组合成一个胖库

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

瞧,现在应该可以了。实际上libWebRTC.a二进制文件需要在没有套接字火箭对象代码的情况下重新构建,并且应该将套接字火箭添加为podspec的依赖项。

答案 2 :(得分:0)

在构建阶段,请检查您是否多次编译同一个文件。

在你的情况下,也许在编译源中有两个相同的m文件,只需删除一个并尝试重建。

答案 3 :(得分:0)

按照以下步骤解决复制符号错误。

  

1)选择您的Xcode项目>导航到“构建阶段”。

     

2)从那里,搜索要复制的文件名。

     

3)如果可能,那么搜索关键字可能会有多个“.m文件”。

     

4)删除除了需要实际编译的文件之外的所有文件。

     

5)同样遵循所有重复错误的过程

     

6)就是这样!你的问题肯定会得到解决。

答案 4 :(得分:0)

为AppRTC repo创建一个问题,以删除标头并设置对SRWebSocket的依赖。 作为临时解决方案 - 将AppRTC链接到具有:path指令的本地路径,并从本地目录中删除此文件。或者您可以在exclude_files config中的SRWebSocket标题上无效链接到本地​​podspec文件。

答案 5 :(得分:0)

  • 备份您的项目
  • 在终端上安装此gem:

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

  • 运行此命令:

    pod deintegrate

  • 删除项目目录中的Podfile.lock文件

  • 再次运行安装:

pod install

  • 再次清理并在Xcode中运行

希望能解决你的问题。

答案 6 :(得分:0)

现在,很容易删除重复的pod文件或项目中未使用的任何pod。

  1. 打开您的pod文件。
  2. 注释所有要删除的pod文件。

    enter image description here

  3. 使用推荐pod install

  4. 您将在终端中删除所有评论窗格

  

一边编写代码,一边喝杯茶或咖啡来度过美好的一天。