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

打印 上一主题 下一主题

主题 740|帖子 740|积分 2220


前言

看到Xcode有新版本,没忍住点了升级,然后标题来了。
2023/06/24更新:关于Xcode 14.3版本打出来的包在iOS 13版本报错的标题,颠末iOS 13.7版本真机实测,这个标题在Xcode 14.3.1版本已经修复,发起升级。Xcode 14.3.1的发布阐明也提及了这个标题的修复。
2023/04/23更新:关于Xcode 14.3版本目前涉及到的三个标题,一是本篇文章的运行报错;二是打包报错,参考这篇文章iOS标题记录 - Xcode 14.3版本打包项目报错;三是打出来的包在iOS 13.1~13.7会报错(因为我手头没条件临时未验证),参考苹果开辟者论坛的帖子。
目前而言,推荐临时用回Xcode 14.2版本,等待第三个标题修复后再升级,Xcode历史版本官方下载地址(需要登录)。 固然,到时间升级后可能还会碰到运行/打包项目报错,不过这都是小标题。假如想知道这些小标题为什么会发生,请继续阅读本篇文章。
开辟环境



  • macOS: 13.3
  • Xcode: 14.3
标题描述

Xcode 14.2版本运行项目一切正常,升级到14.3版本后运行报错。
运行到模仿器的报错信息:
  1. ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphonesimulator.a
  2. clang: error: linker command failed with exit code 1 (use -v to see invocation)
复制代码
运行到真机的报错信息:
  1. ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
  2. 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文件中加上:
  1. post_install do |installer|
  2.   installer.pods_project.targets.each do |target|
  3.     target.build_configurations.each do |config|
  4.       config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '11.0'
  5.     end
  6.   end
  7. end
复制代码
这段代码的作用是先获取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版本:
  1. post_install do |installer|
  2.   installer.pods_project.targets.each do |target|
  3.     target.build_configurations.each do |config|
  4.       config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
  5.     end
  6.   end
  7. end
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表