首页 > 解决方案 > 使用 Swift 5.1 编译的模块不能被 Swift 5.1.2 编译器导入

问题描述

我有一个框架(在本例中是 RxSwift),我使用 Xcode 11.0 将其编译到传统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 编译时,我是否需要以某种方式告诉它我想要模块稳定性?

标签: iosswiftxcodeswift5.1

解决方案


好的,如果您观看 WWDC 视频,他们会解释它: https ://developer.apple.com/videos/play/wwdc2019/416/

您需要在框架的构建设置中将Build Settings > Build Options > Build Libraries for Distribution选项设置为Yes,否则 swift 编译器不会生成必要的.swiftinterface文件,这些文件是未来编译器能够加载旧库的关键。

这最终在您的 project.pbxproj 文件中为:

BUILD_LIBRARY_FOR_DISTRIBUTION = YES;

设置此标志后,我使用 Xcode 11.0 (swift 5.1) 编译的框架能够被 Xcode 11.2 (swift 5.1.2) 使用,并且一切似乎都正常工作。

希望这个问题/答案能为所有没有看过所有 WWDC 视频的人提供有用的参考

如果错误仍然存​​在,请转到产品>清理构建文件夹并再次构建


推荐阅读