Xcode在更新可可荚后复制架构错误的符号



这是我的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,然后重新添加。

为我工作:

  1. 读取错误报告以识别可能包含重复文件的repo。
  2. 将有问题的repo拖到回收站。
  3. 重新克隆你的仓库。
  4. 用正确的远程跟踪设置你的repo。git remote add <url.git>git remote set-url <url.git>

这对我来说绝对有效。在我的例子中,由于一些难以捉摸的原因,当我为本地依赖项运行git pull upstream develop时,git将从多个提交中拉入/生成重复的文件。

在执行上述步骤之后,问题消失了,git pull upstream develop不再一次从多个提交中提取。也许我的repo有一个奇怪的git缓存。

相关内容

  • 没有找到相关文章

最新更新