背景#
升级 Xcode 14 后,项目编译失败修改,共修改了两种编译错误:
- 一种是 bundle code sign error,
Xcode 14 needs selected Development Team for Pod Bundles
- 一种是
Module compiled with Swift 5.6.1 cannot be imported by the Swift 5.7 compiler
其中第一种比较容易解决,第二种稍微麻烦点,解决方案如下:
解决#
Xcode 14 bundle code sign error#
这个的解决方案,直接 Google,第一个 stackoverflow 的链接是Xcode 14 needs selected Development Team for Pod Bundles,这里面给出的解决方法是,在 Podfile 里增加下面代码,然后运行Pod install
,设置 Pod 库的DEVELOPMENT_TEAM
是开发者账号的 team。
笔者有两个项目,其中一个是 Swift 为主,用下面的设置方法试了,可以解决。要注意的是如果项目有多个 target,target 的开发者 team 又不同时需要区分设置,可参考下面注释的代码。
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings["DEVELOPMENT_TEAM"] = "Your Team ID"
# if target.name == 'test'
# config.build_settings["DEVELOPMENT_TEAM"] = "Your Team ID"
# else
# config.build_settings["DEVELOPMENT_TEAM"] = "Your Another Team ID"
# end
end
end
end
end
但是,笔者另外一个 OC 的项目中,按照这个方法设置,却一直不行,也是神奇,所以又找了另一个解决方案,来自 CocoaPods 的 issue,Xcode 14 build failed with manual code sign and app resource bundles ,其中的解决方案有一种是设置CODE_SIGN_IDENTIFY
为空,如下:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['CODE_SIGN_IDENTITY'] = ''
end
end
end
这种避免了区分设置DEVELOPMENT_TEAM
的情况,在两个项目里设置如上代码,都可以编译成功。
Module compiled with Swift 5.6.1 cannot be imported by the Swift 5.7 compiler#
这个错误直接一看是 Swift 版本不兼容,再仔细看错误,应该看到提示的库是三方 SDK 的,对于笔者的项目来说是使用 Carthage 集成的 SDk 的。昂,应该是使用 Carthage 编译的 xcframeworks 导致的,所以就去重新编译 xcframeworks,但是编译的时候,Moya
库一直编译失败,手动去编译Moya
发现编译到真机成功,编译到模拟器就失败,报错Could not find module 'Alamofire' for target 'x86_64-apple-ios-simulator';
,难搞,这个地方找解决方法找了好久,最后还是在Using Carthage with Xcode 12这里看到了解决方法,这个方法可以remove arm64 simulator architecture from compiled framework
。
解决方法如下:
顺便说一下,笔者的电脑并不是Macs running Apple Silicon
,是 intel 芯片的电脑。