我有一个框架(在本例中为RxSwift),已使用Xcode 11.0将其编译为传统RxSwift.framework样式包
RxSwift.framework
这很好地导入了Xcode 11.0和11.1,从没有任何问题
今天,在Apple发布Xcode 11.2时,我进行了升级,并看到以下错误:
使用Swift 5.1编译的模块不能由Swift 5.1.2编译器导入
我曾经习惯过快速编译器不匹配,而且我知道我可以使用Xcode 11.2重新编译RxSwift并继续进行,但是Swift 5.1的头条功能是 模块稳定性 。
我给人的印象是,既然我们已经有了模块稳定性,那么框架就不需要继续与每个新的Xcode版本一起重新编译,但是事实并非如此。
如果有人能解释这里发生的事情,我将不胜感激。Xcode 11.2是否存在错误?还是我最初用Xcode 11.0编译时需要某种方式告诉它我想要模块稳定性吗?
是的,结果证明如果您观看WWDC视频,他们会对其进行解释:https: //developer.apple.com/videos/play/wwdc2019/416/
您需要在框架的构建设置中将“ 分发 的 构建库” 选项设置为“ 是” ,否则swift编译器不会生成必需的.swiftinterface文件,这是将来编译器能够加载旧库的关键。
.swiftinterface
最终在您的project.pbxproj文件中显示为:
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
设置此标志后,我使用Xcode 11.0(swift 5.1)编译的框架可以被Xcode 11.2(swift 5.1.2)使用,并且一切似乎都正常工作。
希望这个问题/答案将为所有未观看所有WWDC视频的人提供有用的参考
如果错误仍然存在,请转至 产品 > 清理构建文件夹, 然后再次 构建 。