0


iOS问题记录 - Xcode 14.3版本运行项目报错

文章目录


前言

看到Xcode有新版本,没忍住点了升级,然后问题来了。

2023/04/23更新:关于Xcode 14.3版本目前涉及到的三个问题,一是本篇文章的运行报错;二是打包报错,参考这篇文章iOS问题记录 - Xcode 14.3版本打包项目报错;三是打出来的包在iOS 13.1~13.7会报错(因为我手头没条件暂时未验证),参考苹果开发者论坛的帖子。

目前而言,推荐暂时用回Xcode 14.2版本,等待第三个问题修复后再升级,Xcode历史版本官方下载地址(需要登录)。当然,到时候升级后可能还会遇到运行/打包项目报错,不过这都是小问题。如果想知道这些小问题为什么会发生,请继续阅读本篇文章。

顺便吐槽一下,苹果发布新的Xcode版本难道不测试老的iOS版本吗?Xcode 14版本刚出来的时候,也有类似的问题,感兴趣的可以看看这篇文章iOS问题记录 - Xcode 14安装低版本iOS模拟器。

开发环境

  • macOS: 13.3
  • Xcode: 14.3

问题描述

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

目录:

screenshot1

既然是因为找不到库导致的问题,那我复制

arc

目录到Xcode 14.3版本中是否可行呢?实测可行,不管是模拟器还是真机,运行一切正常。不过,既然Xcode决定移除这个

arc

目录,说明这个可能真的已经过时,难道以后都不需要再链接这些库用于支持

ARC

找到Xcode 14.3的发布说明,翻了翻并没有看到有关这方面的说明。看来只能去苹果开发者论坛找找看,搜索报错信息找到相关的问题,一位苹果员工给出了回复:

screenshot2

这个回复简单概括起来就是说,因为系统已经内置有

ARC

相关的库,所以没必要再额外链接,至少Xcode 14支持的最低部署目标iOS 11及以上版本的系统肯定是没问题的。如果应用部署目标不低于iOS 11还出现问题,那么应该是第三方库的部署目标有问题。

现在Xcode 14.3移除

arc

目录的原因已经很清楚,是因为支持的最低部署版本的系统都已经内置了

ARC

相关的库。如果应用最低部署目标版本本身不低于iOS 11,解决这个问题很简单,只需要将第三方库部署目标的iOS版本设置成和应用最低部署目标的iOS版本一致。

在我的项目中,应用最低部署目标是iOS 11.0版本:

screenshot3

Podfile

文件中加上:

post_install do|installer|
  installer.pods_project.targets.eachdo|target|
    target.build_configurations.eachdo|config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']='11.0'endendend

这段代码的作用是先获取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.eachdo|target|
    target.build_configurations.eachdo|config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']='9.0'endendend

🤔️咦,难道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

相关的库,也就不会出现找不到库的报错。**

解决方案

  • 如果应用最低部署目标大等于iOS 9版本

Podfile

文件中加上:

post_install do|installer|
  installer.pods_project.targets.eachdo|target|
    target.build_configurations.eachdo|config|
      config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']='11.0'endendend
11.0

版本不是固定的,首先肯定要大于

9.0

版本,其次也不能高于应用最低部署目标版本,然后太低也可能会低于一些第三方库的部署目标版本,所以尽可能和应用最低部署目标版本保持一致即可。

**2023/04/09更新:修改

Podfile

文件后需要重新执行

pod install

命令使改动生效。**

  • 如果应用最低部署目标小于iOS 9版本

这种老项目应该很少了吧,如果真的是属于这种情况,又不想升最低部署目标版本,建议从以下方法任选一种:

  1. 下载arc目录解压后复制到指定目录路径:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib
  2. Xcode使用14.3以下版本,Xcode历史版本官方下载(需要登录)

2023/04/08更新:如果用Xcode 14.3版本打包项目出现报错,可以参考这篇文章iOS问题记录 - Xcode 14.3版本打包项目报错。

最后

如果这篇文章对你有所帮助,请不要吝啬你的点赞👍加星🌟,谢谢~

标签: xcode ios

本文转载自: https://blog.csdn.net/crasowas/article/details/129901398
版权归原作者 crasowas 所有, 如有侵权,请联系我们删除。

“iOS问题记录 - Xcode 14.3版本运行项目报错”的评论:

还没有评论