赞
踩
最近客服跟我反馈说,有一个用户打开老项目的iOS App闪退,我回顾了下这项目上次发布改了啥,发现就改了一些文本和链接,这就很奇怪。到后台查了下这个用户的设备信息和应用版本,用的是手机型号是iPhone X,系统版本是iOS 11.2,以及最新版的应用。
很长时间都忙着Flutter开发,这个项目确实没什么大改动的,最近最大的变化就是升级了Xcode 14,用关键词"Xcode 14 闪退"搜索,果然不是只有我遇到了这个问题。Xcode 14打出来的包在低版本系统运行时会崩溃,报错信息是Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
,在苹果开发者论坛搜索报错信息,可以看到会闪退的最高版本是iOS 12.1。
苹果员工回复截图:
那么这篇文章要讨论的问题来了,上述报错的解决方案网上一搜一大堆,但是手头却没有这么低系统版本的真机或模拟器来测试。真机刷低版本系统是不可行的,苹果早就关闭了这么低版本的刷机验证,模拟器目前Xcode 14能下载的最低版本是iOS 12.4,真是巧妇难为无米之炊。不得不说,果子的做法我是举双手赞成的,是个开发者都不想兼容那么多老版本,对吧?但是买了手机后从不升级系统的大有人在,就问你能怎么办?
2022/12/10更新:Xcode 14.1版本已经修复了这个崩溃问题(Library not loaded: /usr/lib/swift/libswiftCoreGraphics.dylib
),自测通过Xcode 14.1打包的应用在iOS 12.0上正常运行不崩溃。如果你正准备处理这个问题则可以通过升级Xcode版本解决,对于已经处理过的可以移除之前的处理方法。具体请看苹果开发者论坛或苹果员工新回复截图。
苹果员工新回复截图:
Xcode 14无法安装低版本iOS模拟器,目前只支持iOS 12.4及以上。
选一个Xcode 14目前能下的模拟器安装,你就会发现下载安装后的模拟器是放在这个路径的/Library/Developer/CoreSimulator/Profiles/Runtimes
,是.simruntime
后缀的文件。那么我们找到低版本的模拟器文件放在这文件夹是不是就能实现安装低版本iOS模拟器了?
现在首先要找到iOS 11或iOS 12甚至更老的iOS 10的模拟器文件,我网上找了找并没有发现好的下载源(当然可能是我偷懒了没细找),这东西就连苹果开发者官方下载(需要登录)都是不提供的。那看来得换种方式下载,我们都知道(假装你也知道)Xcode升级后会逐渐移除老版本的模拟器,那我们装一个老版本的Xcode不就可以通过正常途径下载低版本的模拟器文件。
Xcode版本和iOS版本名称大概差2,所以如果想要下载iOS 11.2模拟器,那大概要装一个Xcode 9.4.1。至于为什么不是9.0,那是因为我试过,9.0版本能下载的最高版本是iOS 10.3.1,9.4.1版本能下载的最高版本是iOS 11.3,还得是实践出真知。Xcode历史版本苹果官方提供下载,速度还是可以的,直接从苹果开发者官方下载(需要登录)搜索下载一个Xcode 9.4.1就好了,不过下载完成的xip文件解压后安装会提示不兼容:
这可麻烦了,总不能去装个低版本的macOS吧。还好我家底殷实(并没有),翻箱倒柜找到了一个六七年前买的mac mini,还好还没二手出掉,装的还是macOS 10.13.6,这不巧了嘛,隔空投送安装包过去安装,完美运行!Xcode 9.4.1能装下面这些版本的iOS模拟器:
先下载安装一个iOS 11.2模拟器,安装完成后找到/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 11.2.simruntime
文件隔空投送到开发用的电脑上,同时放到相同的位置。打开Xcode可以看到iOS 11.2确实出现了,但是创建模拟器的时候却无法选择,这是怎么回事呢?
原来苹果还留了一手,在其他地方限制了版本,具体详情请看这篇文章在Xcode 12執行低版本的iOS模擬器。按这篇文章写的方法,修改Info.plist
文件中的CFBundleIdentifier
属性值(建议复制一份修改后再复制回去),重新打开Xcode后,已经能正常创建iOS 11.2的模拟器啦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。