这是我的podFile
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
pod 'AFNetworking'
pod 'ODSAccordionView', '0.4.4'
pod 'IQKeyboardManager'
pod 'NYXImagesKit', :git => 'https://github.com/Nyx0uf/NYXImagesKit.git'
pod 'PEPhotoCropEditor'
pod 'CocoaAsyncSocket'
pod 'PKRevealController'
pod 'Haneke', '~> 1.0'
pod 'MBProgressHUD', '~> 0.9.1'
pod 'RadioButton'
一切都一直工作很长一段时间,但现在,当我更新我的pod (pod update
)这3个pod得到更新:
-
AFNetworking
-
CocoaAsyncSocket
-
IQKeyboardManager
之后,一切都不工作了。
我得到超过600个duplicate symbols for architecture i386
错误,像这样:
duplicate symbol _OBJC_IVAR_$_AFHTTPRequestOperation._responseSerializer in:
/Users/myuser/Library/Developer/Xcode/DerivedData/MyProject-emjexnnjljambodthokzwpwcddhz/Build/Products/Debug-iphonesimulator/libPods-AFNetworking.a(AFHTTPRequestOperation.o)
/Users/myuser/Library/Developer/Xcode/DerivedData/MyProject-emjexnnjljambodthokzwpwcddhz/Build/Products/Debug-iphonesimulator/libAFNetworking.a(AFHTTPRequestOperation.o)
... (661 times the same error but pointing to different duplicated files)
ld: 661 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
任何想法?
EDITED:在做了下面所示的解决方案后,我的项目只编译iPad Air
,我不能再Archive
了,我仍然得到相同的错误…
我使用"手动重命名所有符号"的方法。我遇到了重复的符号_OBJC_METACLASS_$_PodsDummy_Pods
,所以我在Podfile
中添加了post_install
,以避免重复的符号。
将你的pod文件内容替换为'Manually Rename All of the Symbols'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
post_install do |installer_representation|
installer_representation.project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited), PodsDummy_Pods=SomeOtherNamePodsDummy_Pods'
end
end
end
pod 'AFNetworking'
pod 'ODSAccordionView', '0.4.4'
pod 'IQKeyboardManager'
pod 'NYXImagesKit', :git => 'https://github.com/Nyx0uf/NYXImagesKit.git'
pod 'PEPhotoCropEditor'
pod 'CocoaAsyncSocket'
pod 'PKRevealController'
pod 'Haneke', '~> 1.0'
pod 'MBProgressHUD', '~> 0.9.1'
pod 'RadioButton'
编辑:从项目中删除以下pod项
1。Pods Folder
2。Podfile.lock
3。ProjectName.xcworkspace
然后重新安装pod
这个钩子允许你对生成的Xcode做最后的修改项目,然后将其写入磁盘或任何其他可能的任务想要执行
引用——
1. https://developerinsider.co/cocoapods-remove-duplicate-symbols-errors/
2. http://guides.cocoapods.org/syntax/podfile.html post_install
甚至在删除我的pod并重新安装它们之后,我总是遇到同样的问题。
通过与另一个项目的比较,我终于找到了解决方案。问题是在项目的构建设置中的参数"其他链接器标志"(OTHER_LDFLAGS)中。这些pod不仅通过它们的名字被引用,而且通过添加前缀"pods - myproject"
来引用。"-l"Pods-myProject-AMSlideMenu"",
"-l"Pods-myProject-CocoaLumberjack"",
"-l"Pods-myProject-DLAlertView""
所以我只是删除了前缀,一切都是正确的
"-l"AMSlideMenu"",
"-l"CocoaLumberjack"",
"-l"DLAlertView""
我修复了一个类似的错误(在凌乱的Cocoapods升级之后),只需删除然后重新添加pod。备份您的项目,然后运行:
pod deintegrate
pod install
在我的案例中,我们有一个用objective C和swift编写的项目,里面有一个自定义框架模块,为了解决符号重复问题,我们不得不在项目和框架模块的构建设置下从Other Linker Flags
中删除所有标志。
构建设置:
OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-all_load" );
After inside Build Settings:
OTHER_LDFLAGS = "$(inherited)";
我认为Cocoapods有一个错误,pod源文件可能被意外复制。
我的项目在执行了一个pod update
之后,出现了一个重复的符号错误。
在很多困惑之后,我终于注意到一个Google pod最后有两个文件。在我的例子中,它是GTMOAuth2SignIn。GTMOAuth2SignIn 2.m。因此,出现了重复符号错误。
请注意,pods似乎通过通配符引用文件,表示应该包括目录中的所有源代码。这与经典Xcode项目中文件被显式引用不同。
另外,我怀疑在构建过程中执行pod更新可能是导致Cocoapods出错的原因。对同一文件的并发访问可能会导致问题。只是个理论。
同样,这也可以解释为什么与这个问题相关的一些"解决方案"是删除/删除引用的pod,然后重新添加。
为我工作:
- 读取错误报告以识别可能包含重复文件的repo。
- 将有问题的repo拖到回收站。 重新克隆你的仓库。
- 用正确的远程跟踪设置你的repo。
git remote add <url.git>
或git remote set-url <url.git>
这对我来说绝对有效。在我的例子中,由于一些难以捉摸的原因,当我为本地依赖项运行git pull upstream develop
时,git
将从多个提交中拉入/生成重复的文件。
在执行上述步骤之后,问题消失了,git pull upstream develop
不再一次从多个提交中提取。也许我的repo有一个奇怪的git
缓存。