xcode 更新后架构错误的重复符号 cocoa pods
xcode duplicate symbols for architecture error after updating cocoa pods
这是我的 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
) 时,这 3 个 pods 得到更新:
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
,我仍然得到相同的结果错误...
我使用 'Manually Rename All of the Symbols' 方法。我遇到了重复符号 _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'
已编辑:
从您的项目中删除以下窗格项
1.Pods Folder
2.Podfile.lock
3.ProjectName.xcworkspace
然后再次安装pods
This hook allows you to make any last changes to the generated Xcode
project before it is written to disk or any other tasks you might
want to perform.
参考-
1. https://developerinsider.co/cocoapods-remove-duplicate-symbols-errors/
2. http://guides.cocoapods.org/syntax/podfile.html#post_install
即使删除我的 pods 并重新安装它们,我也总是遇到同样的问题。
通过与另一个项目的比较,我终于找到了解决方案。
问题出在项目的 Build Settings 中的参数 "Other Linker Flags" (OTHER_LDFLAGS) 中。 pods 不仅通过名称引用,而且通过添加前缀 "Pods-myProject"
"-l\"Pods-myProject-AMSlideMenu\"",
"-l\"Pods-myProject-CocoaLumberjack\"",
"-l\"Pods-myProject-DLAlertView\""
所以我只是删除了前缀,一切正常
"-l\"AMSlideMenu\"",
"-l\"CocoaLumberjack\"",
"-l\"DLAlertView\""
我通过简单地删除然后重新添加 pods 修复了一个类似的错误(在混乱的 Cocoapods 升级之后)。备份你的项目,然后 运行:
pod deintegrate
pod install
我认为 Cocoapods 有一个错误,可能会意外复制 pod 源文件。
我的项目构建良好,直到执行一个 pod update
之后出现重复符号错误。
经过一番纠结,我终于注意到一个 Google pod 有两个文件。在我的例子中,它是 GTMOAuth2SignIn.m 和 GTMOAuth2SignIn 2.m。因此,重复符号错误。
请注意 pods 似乎通过通配符引用文件,指示应包括目录中的所有源。这不同于明确引用文件的经典 Xcode 项目。
此外,我怀疑在构建过程中执行 pod 更新可能是导致 Cocoa 出错的原因pods。对相同文件的并发访问可能会导致问题。只是一个理论。
此外,这可以解释为什么与此问题相关的一些 "solutions" 被 remove/delete 引用 pods,然后重新添加。
在我的例子中,我们有一个用 objective C 和 swift 编写的项目,里面有一个自定义框架模块,为了解决符号重复问题,我们必须从 [=12= 中删除所有标志] 在项目和框架模块的构建设置下。
在构建设置之前:
OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-all_load" );
进入构建设置后:
OTHER_LDFLAGS = "$(inherited)";
对我有用的:
- 阅读错误报告以确定据称包含重复文件的存储库。
- 将有问题的仓库拖到垃圾箱。
- 重新克隆您的存储库。
- 使用正确的远程跟踪设置您的存储库。
git remote add <url.git>
,或git remote set-url <url.git>
这对我来说绝对有效。在我的例子中,由于某些难以捉摸的原因,当我 运行 git pull upstream develop
用于本地依赖时,git
将从多个提交中提取 in/generate 重复文件。
执行上述步骤后,问题消失了,git pull upstream develop
不再一次从多个提交中拉取。也许我的存储库有一个奇怪的 git
缓存。
这是我的 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
) 时,这 3 个 pods 得到更新:
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
,我仍然得到相同的结果错误...
我使用 'Manually Rename All of the Symbols' 方法。我遇到了重复符号 _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'
已编辑: 从您的项目中删除以下窗格项
1.Pods Folder
2.Podfile.lock
3.ProjectName.xcworkspace
然后再次安装pods
This hook allows you to make any last changes to the generated Xcode project before it is written to disk or any other tasks you might want to perform.
参考-
1. https://developerinsider.co/cocoapods-remove-duplicate-symbols-errors/
2. http://guides.cocoapods.org/syntax/podfile.html#post_install
即使删除我的 pods 并重新安装它们,我也总是遇到同样的问题。
通过与另一个项目的比较,我终于找到了解决方案。 问题出在项目的 Build Settings 中的参数 "Other Linker Flags" (OTHER_LDFLAGS) 中。 pods 不仅通过名称引用,而且通过添加前缀 "Pods-myProject"
"-l\"Pods-myProject-AMSlideMenu\"",
"-l\"Pods-myProject-CocoaLumberjack\"",
"-l\"Pods-myProject-DLAlertView\""
所以我只是删除了前缀,一切正常
"-l\"AMSlideMenu\"",
"-l\"CocoaLumberjack\"",
"-l\"DLAlertView\""
我通过简单地删除然后重新添加 pods 修复了一个类似的错误(在混乱的 Cocoapods 升级之后)。备份你的项目,然后 运行:
pod deintegrate
pod install
我认为 Cocoapods 有一个错误,可能会意外复制 pod 源文件。
我的项目构建良好,直到执行一个 pod update
之后出现重复符号错误。
经过一番纠结,我终于注意到一个 Google pod 有两个文件。在我的例子中,它是 GTMOAuth2SignIn.m 和 GTMOAuth2SignIn 2.m。因此,重复符号错误。
请注意 pods 似乎通过通配符引用文件,指示应包括目录中的所有源。这不同于明确引用文件的经典 Xcode 项目。
此外,我怀疑在构建过程中执行 pod 更新可能是导致 Cocoa 出错的原因pods。对相同文件的并发访问可能会导致问题。只是一个理论。
此外,这可以解释为什么与此问题相关的一些 "solutions" 被 remove/delete 引用 pods,然后重新添加。
在我的例子中,我们有一个用 objective C 和 swift 编写的项目,里面有一个自定义框架模块,为了解决符号重复问题,我们必须从 [=12= 中删除所有标志] 在项目和框架模块的构建设置下。
在构建设置之前:
OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-all_load" );
进入构建设置后:
OTHER_LDFLAGS = "$(inherited)";
对我有用的:
- 阅读错误报告以确定据称包含重复文件的存储库。
- 将有问题的仓库拖到垃圾箱。
- 重新克隆您的存储库。
- 使用正确的远程跟踪设置您的存储库。
git remote add <url.git>
,或git remote set-url <url.git>
这对我来说绝对有效。在我的例子中,由于某些难以捉摸的原因,当我 运行 git pull upstream develop
用于本地依赖时,git
将从多个提交中提取 in/generate 重复文件。
执行上述步骤后,问题消失了,git pull upstream develop
不再一次从多个提交中拉取。也许我的存储库有一个奇怪的 git
缓存。