macOS Ventura无法使用Xcode13的解决方法

8,204 阅读4分钟

本文正在参加「金石计划 . 瓜分6万现金大奖」

背景

作为一名合格的iOS开发者,每次当有mac系统、Xcode、iOS版本升级的时候,我都会第一时间进行更新,可以安心摸鱼(并不是,第一时间进行适配)。

同时,作为一个严谨的iOS开发者,我一般也会保留两个版本的Xcode,怕新版本的Xcode编译有问题,还可以用旧版本的Xcode救场。

然而,macOS Ventura给我开了一个天大的玩笑,我一升级完,Xcode13.4.1就不让使用了。

image.png

image.png

虽然,之前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的地方没法编译过。 image.png

总之,我捣腾了2天,也没找到一个可行的方案,眼看就要降级macOS系统了。。。

image.png

然后一个操作,竟然让我启动的这个禁止使用的Xcode13。

解决方法

大伙别眨眼,就一个操作,就可以让这个禁止的Xcode13运行起来:

image.png

点击对应路径上,那个黑乎乎的Xcode。

然后的终端会调起来,噼里啪啦打了一堆信息了,接着Xcode13就启动了:

image.png

启动一个项目试试:

image.png

我尝试编译了项目,完美运行,将自己业务项目的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万现金大奖」