xcode更新可可豆荚后出现体系结构错误的重复符号

时间:2015-09-16 10:04:18

标签: ios xcode duplicates cocoapods updates

这是我的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'

Everythig已经很好地工作了很长时间,但是现在,当我更新我的pods(pod update)时,这三个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)

有什么想法吗?

已编辑:在执行下面显示的解决方案后,我的项目仅针对iPad Air进行编译,而我不能再Archive,我仍然会遇到同样的错误... < / p>

6 个答案:

答案 0 :(得分:9)

我使用&#39;手动重命名所有符号&#39;做法。我遇到了重复的符号_OBJC_METACLASS_$_PodsDummy_Pods,因此我在post_install中添加了Podfile以避免重复的符号。

将您的pod文件内容替换为&#39;手动重命名所有符号&#39;

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

答案 1 :(得分:6)

即使删除我的pod并重新安装它们,我也总是遇到同样的问题。

我终于通过与另一个项目进行比较找到了解决方案。 问题出在项目的构建设置中的参数“Other Linker Flags”(OTHER_LDFLAGS)中。 pod的引用不仅仅是它们的名称,而是通过添加前缀“Pods-myProject”

"-l\"Pods-myProject-AMSlideMenu\"",
"-l\"Pods-myProject-CocoaLumberjack\"",
"-l\"Pods-myProject-DLAlertView\""

所以我刚删除了前缀,一切都是正确的

"-l\"AMSlideMenu\"",
"-l\"CocoaLumberjack\"",
"-l\"DLAlertView\""

答案 2 :(得分:4)

我通过简单地删除然后重新添加pod修复了类似的错误(在一次混乱的Cocoapods升级之后)。备份项目,然后运行:

pod deintegrate
pod install

答案 3 :(得分:1)

在我的情况下,我们有一个用目标C编写的项目,并且内部装有自定义框架模块,因此要迅速解决此问题,为了解决符号重复问题,我们必须从Other Linker Flags的项目的“构建设置”下删除所有标志,框架模块。

在内部设置之前:

OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-all_load" );

在“内部设置”中:

OTHER_LDFLAGS = "$(inherited)";

答案 4 :(得分:0)

我认为Cocoapods有一个错误,其中pod源文件可能会被意外复制。

我的项目正在建设之前,直到执行了一个Foo,此时出现了重复的符号错误。

经过多次混淆,我终于发现Google pod最终有两个文件。就我而言,它是GTMOAuth2SignIn.m和GTMOAuth2SignIn 2.m.因此,重复的符号错误。

请注意,pod似乎通过通配符引用文件,指示应包含目录中的所有源。这与显式引用文件的经典Xcode项目不同。

另外,我怀疑在构建过程中执行pod更新可能会使Cocoapods瘫痪。对同一文件的并发访问可能会导致问题。只是一个理论。

此外,这可以解释为什么与此问题相关的一些“解决方案”是删除/删除引用的pod,然后重新添加。

答案 5 :(得分:0)

对我有用的东西

  1. 阅读错误报告,以识别可能包含重复文件的存储库。
  2. 将有问题的存储库拖到垃圾箱。
  3. 重新克隆您的存储库。
  4. 使用正确的远程跟踪设置您的存储库。 git remote add <url.git>git remote set-url <url.git>

这绝对对我有用。对于我来说,出于某种难以理解的原因,当我为本地依赖项运行git pull upstream develop时,git会从多个提交中提取/生成重复文件。

按照上述步骤操作后,问题消失了,git pull upstream develop不再一次退出多个提交。也许我的仓库有一个奇怪的git缓存。