文章讲述了在升级Xcode至14.3版本后,由于找不到libarclite静态库导致的运行错误。问题源于Xcode14.3移除了ARC库,但iOS11及以上版本系统已内置支持。解决方案是确保应用和第三方库的最低部署目标为iOS9及以上,或者手动复制arc目录到Xcode安装路径。对于仍需支持iOS9及更低版本的应用,可以设置Podfile以匹配最低部署目标或回退到Xcode的旧版本。
摘要由CSDN通过智能技术生成
看到Xcode有新版本,没忍住点了升级,然后问题来了。
Xcode 14.2版本运行项目一切正常,升级到14.3版本后运行报错。
运行到模拟器的报错信息:
ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
运行到真机的报错信息:
ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
clang: error: linker command failed with exit code 1 (use -v to see invocation)
从报错信息看,都是在链接库的时候因为找不到静态库(libarclite_iphonesimulator.a/libarclite_iphoneos.a)而报错。利用访达的前往文件夹功能快速来到报错信息中的目录,发现连arc目录都不存在,更不用说静态库文件。
现在可以确定的是Xcode 14.2版本肯定是正常的,那会不会是14.3版本移除了整个arc目录?找到一台还没升级到Xcode 14.3版本的电脑,在同样的路径下,果然存在arc目录:
既然是因为找不到库导致的问题,那我复制arc目录到Xcode 14.3版本中是否可行呢?实测可行,不管是模拟器还是真机,运行一切正常。不过,既然Xcode决定移除这个arc目录,说明这个可能真的已经过时,难道以后都不需要再链接这些库用于支持ARC?
找到Xcode 14.3的发布说明,翻了翻并没有看到有关这方面的说明。看来只能去苹果开发者论坛找找看,搜索报错信息找到相关的问题,一位苹果员工给出了回复:
这个回复简单概括起来就是说,因为系统已经内置有ARC相关的库,所以没必要再额外链接,至少Xcode 14支持的最低部署目标iOS 11及以上版本的系统肯定是没问题的。如果应用部署目标不低于iOS 11还出现问题,那么应该是第三方库的部署目标有问题。
现在Xcode 14.3移除arc目录的原因已经很清楚,是因为支持的最低部署版本的系统都已经内置了ARC相关的库。如果应用最低部署目标版本本身不低于iOS 11,解决这个问题很简单,只需要将第三方库部署目标的iOS版本设置成和应用最低部署目标的iOS版本一致。
在我的项目中,应用最低部署目标是iOS 11.0版本:
在Podfile文件中加上:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
这段代码的作用是先获取Pods项目(pods_project)中的目标数组(targets),然后遍历目标数组通过目标对象(target)获取构建配置数组(build_configurations),最后遍历构建配置数组修改构建配置对象中的构建设置(build_settings),将iOS 部署目标版本设为11.0。
经过以上操作,实测不再报错。不过,还有疑问没解决,我手上还有老项目的最低部署目标是iOS 9版本,难道老项目只能用Xcode 14.3以下版本或复制一份arc目录到Xcode 14.3?
带着疑问,我用Xcode 14.3运行了老项目,结果一切正常!这差点给我整不会了。找到老项目中的Podfile文件,发现已经有设置第三方库部署目标的iOS版本:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
咦,难道iOS 9.0系统就已经内置了ARC相关的库?
先试试将9.0改为8.0,执行pod install命令后重新运行项目,结果报错。将8.0恢复为9.0,再做一次测试,执行pod install命令后修改手动某个库的部署目标为8.0,重新运行项目,不出意外还是报错,而且就剩刚才改过部署目标的库在报错。实测将8.0改为iOS 8的最后一个版本8.4.1还是报错。
综上,由于Xcode 14.3版本移除了ARC相关的库,从而导致一些默认部署目标是iOS 8版本的第三方库出现报错。只要最低部署目标不低于iOS 9版本,运行项目时就不会去链接ARC相关的库,也就不会出现找不到库的报错。
在Podfile文件中加上:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
11.0版本不是固定的,首先肯定要大于9.0版本,其次也不能高于应用最低部署目标版本,然后太低也可能会低于一些第三方库的部署目标版本,所以尽可能和应用最低部署目标版本保持一致即可。
2023/04/09更新:修改Podfile文件后需要重新执行pod install命令使改动生效。
这种老项目应该很少了吧,如果真的是属于这种情况,又不想升最低部署目标版本,建议从以下方法任选一种:
-
下载arc目录解压后复制到指定目录路径:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib
-
Xcode使用14.3以下版本,Xcode历史版本官方下载(需要登录)
看到Xcode有新版本,没忍住点了升级,然后问题来了。Xcode 14.2版本运行项目一切正常,升级到14.3版本后运行报错。从报错信息看,都是在链接库的时候因为找不到静态库(libarclite_iphonesimulator.a/libarclite_iphoneos.a)而报错。利用访达的前往文件夹功能快速来到报错信息中的目录,发现连arc目录都不存在,更不用说静态库文件。现在可以确定的是Xcode 14.2版本肯定是正常的,那会不会是14.3版本移除了整个arc目录?
private var coordinate: Coordinates
var locationCoordinate: CLLocationCoordinate2D {
CLLocationCoordinate2D(
latitude: coordinates.latitude,
最近产品要做一个Widget小组件,产品的要求必须安排。于是我新创建了一个OC项目,然后创建了一个Widget Extension。直接运行编译,发编译器报以下错误:
ld: Assertion failed: (reconstituted == (accumulator - _options.machHeaderVmAddr())), function setFixup64, file OutputFile.cpp, line 2864.
ld: Assertion failed: (reconst
Xcode 14.3是一个开发工具,用于编写、调试和部署iOS、iPadOS、tvOS、watchOS和macOS应用程序。它包括Swift 5.8和适用于不同操作系统版本的软件开发工具包(SDK)。Xcode 14.3还支持在iOS 11及更高版本、tvOS 11及更高版本和watchOS 4及更高版本上进行设备调试。要使用Xcode 14.3,需要在运行macOS Ventura 13.0或更高版本的Mac上安装。如果您对深入学习Xcode感兴趣,还有很多知识需要继续学习和探索。您可以查阅相关教程和文档来了解更多关于Xcode 14.3的用法和功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Apple Xcode 14.3 (14E222b) 正式版发布下载](https://blog.csdn.net/netgc/article/details/130083854)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [IOS开发入门之Xcode使用教程详细讲解(全)](https://blog.csdn.net/qq_38432165/article/details/87901488)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]