文章目录

  • 前言
  • 开发环境
  • 问题描述
  • 问题分析
  • 解决方案
  • 最后

前言

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

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

目前而言,推荐暂时用回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目录:

既然是因为找不到库导致的问题,那我复制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'endend
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版本:

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

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

  1. iOS-bug Xcode 14.3版本运行项目报错File not found: /Applications/Xcode.app/Contents/Developer/...

    File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeD..... 解决方法 1.下载arc目录解压后复 ...

  2. 谷歌浏览器运行项目报错Uncaught SyntaxError: Unexpected token ‘ .‘

    运行项目报错 (项目正常启动,但是在浏览器打开后报该错误)测试了好多方法都没有解决,最后想的更换浏览器测试(测试成功) 解决方法:谷歌浏览器问题(可能是版本问题) 重新下载安装谷歌浏览器 即可

  3. 首次使用eclipes运行项目报错“Java.lang.ClassNotFoundException”

    首次使用eclipes运行项目报错"Java.lang.ClassNotFoundException" 运行项目时提示: 解决方法: 1.点击菜单-Project-Build Au ...

  4. vue3+cli4运行项目报错export ‘default‘ (imported as ‘VueRouter‘) was not found in ‘vue-router‘

    vue3+cli4运行项目报错export 'default' (imported as 'VueRouter') was not found in 'vue-router' 1.解决方案: cli3 ...

  5. vue脚手架运行项目报错“serve with message ‘spawn vue-cli-service ENO’解决办法

    由于我的电脑用户名是中文的,某天下午改成英文后,即使重新配置了环境变量,还是经常报错.后来重新安装了nodejs,有些依赖可能没安 以上为前提 今天想启动下以前的项目,发现vue脚手架用不了了,重新安 ...

  6. 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 编译 Android 版本的 ijkplayer 时 , 执行 init-android.sh 脚本 , 报如下错误 ; root@octopus: ...

  7. 【错误记录】编译 Android 版本的 ijkplayer 报错 ( You must define ANDROID_NDK before starting. | 下载指定版本 NDK )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在编译 ijkplayer 的过程中 , 出现 root@octopus:~/ijkplayer/ijkplayer-android/android ...

  8. Vue中3.0版本严格模式运行项目报错

    vue3.0脚手架搭建项目在运行中报错,如下: 造成报错的原因是,vue3.0脚手架搭建项目的时候使用了严格模式 eslint,然后代码中我们使用了换行这些,就会导致项目运行出错 这个时候我们找到pa ...

  9. Android Studio 运行项目报错:org.objectweb.asm.tree.analysis.AnalyzerException: Execution can fall off

    Android Studio项目,公司主要的一个APP项目,还算庞大,有段时间没过问该项目,有需求要改,又来关注这项目代码,update代码到最新,android studio运行项目,就是run不起 ...

最新文章

  1. Debugging Tools for Windows__from WDK7
  2. 地图索引 R-tree
  3. 3分钟掌握Quartz.net分布式定时任务的姿势
  4. 这6部超经典的物理电影,居然还有人没有看过?
  5. Http请求处理流程
  6. 20位大佬组团“踢馆”,谁超越了图灵?
  7. IT兄弟连 JavaWeb教程 Servlet中定义的变量的作用域类型
  8. 汉化破解:Restorator辅助绕过注册码
  9. 【Android】实现应用简单的用户登录界面
  10. 企业管理中使用凌云仓库管理软件免费版的优势
  11. 网络概念- VXLAN技术详解
  12. 如何从初级程序员变成高级程序员?
  13. 点击给导航条加背景颜色
  14. 2021年焊工(初级)试题及解析及焊工(初级)实操考试视频
  15. COSOSWAP的这份NFT防盗指南,请给周杰伦转发
  16. dva的用法_dva入门讲解
  17. react报错Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
  18. 自有APP上如何运行小游戏?
  19. kdb+q一个入库和删除的小demo
  20. vue使用vue-video-player实现web视频直播展示m3u8格式

热门文章

  1. apache beam 入门之beam-sql
  2. 普陀区鼓励企业科创政策包(普陀科创十条)
  3. 利用phpstudy搭建thinkphp
  4. 到底什么是“云原生”?
  5. Playwright 保存图片
  6. mysql与oracle根据生日时间计算生日
  7. 【架构师入门——什么是组件化】
  8. .nii格式文件解析
  9. SpringSecurity 简单使用
  10. electron实现桌面应用