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

布景

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

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

可是,macOS Ventura给我开了一个天大的打趣,我一晋级完,Xcode13.4.1就不让运用了。

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

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

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

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

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

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

然后一个操作,居然让我发动的这个禁止运用的Xcode13。

处理办法

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

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

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

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

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

发动一个项目试试:

macOS Ventura无法使用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万现金大奖」