本文正在参加「金石计划 . 瓜分6万现金大奖」
背景
作为一名合格的iOS开发者,每次当有mac系统、Xcode、iOS版本升级的时候,我都会第一时间进行更新,可以安心摸鱼(并不是,第一时间进行适配)。
同时,作为一个严谨的iOS开发者,我一般也会保留两个版本的Xcode,怕新版本的Xcode编译有问题,还可以用旧版本的Xcode救场。
然而,macOS Ventura给我开了一个天大的玩笑,我一升级完,Xcode13.4.1就不让使用了。
虽然,之前Apple也干过类似这种事情,就是通过macOS的系统版本强制要求开发者升级Xcode,但是这次macOS Ventura的第一个版本13.0就直接把Xcode13干趴了,就有点一刀切的味道了!!!
于是,业务上遇到了问题。
Xcode版本差异,导致编译器版本差异,无法编译通过
具体业务场景是这样的,我们有个项目是一个以Swift语言为主体的SDK,我们需要将打包好的.framework
分发给其他客户使用。
我们 | 客户 |
---|---|
使用Xcode14打包SDK | 使用Xcode13集成SDK并使用 |
吃瘪就开始了:
Failed to build module 'SomeSDK'; this SDK is not supported by the compiler (the SDK is built with 'Apple Swift version 5.7.1 (swiftlang-5.7.1.135.3 clang-1400.0.29.51)', while this compiler is 'Apple Swift version 5.6.1 (swiftlang-5.6.0.323.66 clang-1316.0.20.12)'). Please select a toolchain which matches the SDK.
大概意思就是说,这个SDK是用新版Xcode14的编译器编译的,放在旧版Xcode13的环境下,运行不起来。
如果去Stack Overflow或者苹果开发者论坛去搜索,你会发现很多相关的问题和回答,也给了一些解决方案,但是就我自己实践经历来看,都失败了。
我总结了一下尝试过的方法:
-
Build Libraries for Distribution” into ”Yes”,有人说设置了这个配置项,就可以解决Swift版本的兼容问题,反正我在Xcode14里面更改了这配置,结果在Xcode13进行编译还是失败了。
-
尝试去Swift网站下载匹配的工具链,在Xcode14中更改Swift的版本进行编译,无法编译过,因为项目中不仅有Swift,也含有Cocoa,单纯的更改Swift版本,包含Cocoa的地方没法编译过。
总之,我捣腾了2天,也没找到一个可行的方案,眼看就要降级macOS系统了。。。
然后一个操作,竟然让我启动的这个禁止使用的Xcode13。
解决方法
大伙别眨眼,就一个操作,就可以让这个禁止的Xcode13运行起来:
点击对应路径上,那个黑乎乎的Xcode。
然后的终端会调起来,噼里啪啦打了一堆信息了,接着Xcode13就启动了:
启动一个项目试试:
我尝试编译了项目,完美运行,将自己业务项目的SDK通过这个Xcode13编译出包,也能正常工作。
就这样,macOS Ventura无法使用Xcode13的问题就这么被解决了。
使用xcframe向上兼容
2022年11月14日更新
写完这篇之后,我又查了相关资料,发现设置Build Libraries for Distribution” into ”Yes”
这配置项是要配合生成xcframework使用。
我针对真机包打了一个xcframework:
xcodebuild -create-xcframework -framework /Users/season/Library/Developer/Xcode/DerivedData/RxStudy-hbzrswbluvfcbthautwsekcebjht/Build/Products/Debug-iphoneos/SomeSDK.framework -output SomeSDK.xcframework
xcframework successfully written out to: /Users/season/SomeSDK.xcframework
这个xcframework包我进行了一些简单的测试:
用Xcode13 做了一个xcframework,可以在Xcode14上跑。 但是用Xcode14做了一个xcframework,在Xcode13上跑不起来。
也就是说xcframework只能做向上兼容(低配高,而不能高配低)。
【中英字幕】【WWDC 2019】Binary Frameworks in Swift
后记吐槽
就像前文所说的,我对于这次苹果这个这波升级macOS就葬送前代Xcode的做法非常不满意!至少需要告之一下开发者呀!
虽然每一代Xcode或多或少有点问题,但是Xcode14的一些bug真的是难以忍受,特别是Xcode14的模拟器,在我的M1的MacBook上面,经常编译项目启动,就黑了,甚至在模拟器上都没法删除App。
另外,如果各位大佬,有这种Xcode14打包,降级给Xcode13使用,更好的解决方式,请务必教教我,谢谢了!
本文正在参加「金石计划 . 瓜分6万现金大奖」