xcode12 私有库报错,pod spec 文件处理2021-11-29

解决方法:spec 文件移除指定cpu ,否则校验报错,好像是xcode

 spec.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
 spec.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

1.错误

xcode12更新之后,如果私有库引入了第三方库,pod repo push时会出现以下错误:

ld: building for iOS Simulator, but linking in dylib built for iOS, file ' XXX ' for architecture arm64
clang: error: linker command failed with exit code 1

2.原因

这是因为新xcode为了适配即将发布arm架构芯片mac,会在编译的时尝试生成模拟器版本的arm64架构的可执行文件。然而引入的第三方SDK还没来得及更新,老版本的第三方SDK并不包含模拟器版本的arm64架构可执行文件,所以在链接的时候就会失败,上面的错误提示也能看出端倪。简单来说就以下两个原因:

1.新xcode要生成模拟器版本的arm64架构可执行文件
2.引入的第三方sdk并没有更新,不存在模拟器版本的arm64架构可执行文件

3.解决方案:

解决方法分一下几种情况:

1.使用第三方SDK生成动态动态库:

这种情况出现在swift项目中,为了解决第三方静态库在组件化中出现传递依赖等问题,把第三方SDK的静态库编译成一个动态库,制作方案可以参考组件化-动态库实战,这里就不做详细介绍了。这种情况需要在项目的target -> BuildSettings->EXCLUDED_ARCHS添加剔除模拟器arm64架构配置:

image
2.普通私有库pod repo push时报错:

这种情况需要在podesc文件添加一下代码:
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

参考资料

3. 如果项目使用了cocoapods需要在项目的Podfile里面添加代码段,然后执行pod install
post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

你可能感兴趣的:(xcode12 私有库报错,pod spec 文件处理2021-11-29)