Xcode升级14.3.1版本报错问题
本文首发于公众号【一个老码农】
有大半年没有碰ios的代码了,前段时间有点小需求需要开发,正好借机把Xcode从14.0.1升级到了14.3.1。然后最担心的问题终于还是发生了,项目编译报错,而且是一系列的报错。今天有空记录一下
报错一
报错信息如下:
File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a
查询资料之后发现,是pods
中的库支持版本过低导致的。需要把pods
库的支持系统版本改为11.0。
我看了下项目中pods
的第三方库支持的iOS
版本有的是8.0
的,有的是9.0
的。而项目中app的支持版本早就改为了11.0
以上。
现在有两种解决方法:
方案一
手动把pods
的targes
里面的第三方库全部改为11.0
,但是比较繁琐,而且执行pod install
时容易再次被覆盖。
方案二
在Podfile
中添加如下脚本,然后执行pod install
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
end
end
end
end
报错二
执行完以上操作后,再次编译,真机编译成功了,但是模拟器编译报错,报错信息如下:
in /path/Pods/WechatOpenSDK/OpenSDK1.8.7.1/libWeChatSDK.a(WechatAuthSDK.o), building for iOS Simulator, but linking in object file built for iOS, file '/path/Pods/WechatOpenSDK/OpenSDK1.8.7.1/libWeChatSDK.a' for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation)
这个问题是因为以前的mac
用的是intel
的处理器,intel
处理器是x86_64
架构。而2020年以后苹果的m
系列芯片电脑则使用的是arm64
架构,所以使用新电脑会导致很多老项目代码编译报错。
解决方案:
- 第一步,找到
Build Settings -> Excluded Architectures
,添加一项Any iOS Simulator SDK
,然后将其值设为arm64
- 第二步,将
pod
中的第三方库也设置为排除模拟器arm64
指令,所以我在Podfile
中的脚本就变成了这样:
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = "arm64"
end
end
end
end
- 执行
pod install
报错三
做完以上操作之后,在archive
打包时我又迎来了第三个报错:
Command PhaseScriptExecution failed with a nonzero exit code
解决方案如下:
方案一
全局搜索 source="$(readlink "${source}")"
替换成 source="$(readlink -f "${source}")"
,但是下次再执行pod install
的时候有可能被覆盖
方案二
还是在Podfile
中填加脚本,然后执行pod install
。脚本如下:
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
shell_script_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
if File::exists?(shell_script_path)
shell_script_input_lines = File.readlines(shell_script_path)
shell_script_output_lines = shell_script_input_lines.map { |line| line.sub("source=\"$(readlink \"${source}\")\"", "source=\"$(readlink -f \"${source}\")\"") }
File.open(shell_script_path, 'w') do |f|
shell_script_output_lines.each do |line|
f.write line
end
end
end
end
end
end
脚本合并
把以上三个脚本合并,我的Podfile
中的脚本最终变成了这样:
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|
# 修改pod的target中的 source="$(readlink "${source}")" 替换成 source="$(readlink -f "${source}")"
shell_script_path = "Pods/Target Support Files/#{target.name}/#{target.name}-frameworks.sh"
if File::exists?(shell_script_path)
shell_script_input_lines = File.readlines(shell_script_path)
shell_script_output_lines = shell_script_input_lines.map { |line| line.sub("source=\"$(readlink \"${source}\")\"", "source=\"$(readlink -f \"${source}\")\"") }
File.open(shell_script_path, 'w') do |f|
shell_script_output_lines.each do |line|
f.write line
end
end
end
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = "arm64"
end
end
end
end
三个脚本合并后,执行pod install
,然后再执行archive
操作,一切恢复正常
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgechaj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01