Xcode 14.3 运行项目报错
File not found libarclite_iphonesimulator.a or libarclite_iphoneos.a

问题描述

升级到 Xcode14.3 后编译报错:
真机运行

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)

模拟器运行

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)

解决方案

方案一:下载arc文件夹 解压缩或者从旧版本 Xcode 复制并将 arc文件夹 拷贝到

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/

方案二:修改应用的最低部署版本iOS9.0或以上版本,使用 Cocoapods 管理第三方库的还要在 Podfile 中加入以下代码

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'
    end
  end
end

config.build_settings[‘IPHONEOS_DEPLOYMENT_TARGET’] 的版本号不是固定的但必须 >= 9.0,建议跟随应用的最低部署版本
注意:修改 Podfile 文件后需要重新执行 pod install 命令使改动生效

想了解原因的小伙伴请继续往下看

原因分析

从错误信息来看,是在链接库的时候找不到静态库 libarclite_iphonesimulator.alibarclite_iphoneos.a
右键 Xcode – 显示包内容 – ContentsDeveloperToolchainsXcodeDefault.xctoolchain – 右键显示包内容 – usrlib
发现连 arc 目录不存在。

可以确定 Xcode 14.2 是能正常的编译的,猜测是 Xcode 14.3 移除了 arc 目录,于是找了台安装 Xcode 14.2 的电脑看了下,确实存在 arc 目录
https://img.wangquanwei.com/wp-content/uploads/2023/04/3561BBB4E9AB7F73B4784D4F65E57FF8.jpg
Developer Forums 搜索相关信息,一位苹果员工给出了答复:
https://developer.apple.com/forums/thread/725300
https://img.wangquanwei.com/wp-content/uploads/2023/04/22B24B2668C551B9B60930EEB6D114CA.jpg
回复大意是说(机翻):
如果你从 New > Project > iOS > app模板 创建了一个标准的 iOS 应用,然后查看构建记录,没有 libarcliite_iphoneos.a 的引用。这是因为应用程序的部署目标足够现代,它可以依赖于内置在系统中的 ARC。事实上,Xcode 14 总是如此,它支持的最小部署目标是 iOS 11

假设你的应用程序的部署目标不低于 Xcode 支持的,那么问题就变成了:为什么你的项目试图链接 libarcliite_iphoneos.a,它绝对不需要的东西?我没有现成的答案,但这可能与你的第三方构建系统有关。我建议你通过它的支持渠道升级。

因此只需要将应用的最低部署版本改为 iOS11就能解决问题,经测试只要最低部署版本 >= iOS9 即可