Swift 包含多个 swift 版本和 swift-tools-version 的软件包

Swift Package with multiple swift versions and swift-tools-version

如何创建支持多个 swift 版本的 swift 软件包?

我的代码可以在 swift 4.0、4.2 和 5.0 上正常编译。如果我在 Package.swift 中更新 swift-tools-version 然后我不能在 4.0 或 4.2 上使用它,但是如果我将 4.2 或 5.0 添加到 swiftLanguageVersions 它不识别版本枚举。

如果swift-tools-version设置为4.0,.v5swiftLanguageVersions

中无法识别

如果 swift-tools-version 更新为 5.0,则该软件包将无法在 4.0 上运行

正确的做法是什么?或者一旦你更新到最新版本的 swift 软件包就停止支持旧版本了?

我的方法是将 swift-tools-version 设置为您支持的 Swift 的最早版本,并简单地忽略 swiftLanguageVersions 属性。到目前为止它对我有用。

您也可以尝试使用条件编译在 Package.swift 文件中使用不同版本的 Package

您可以为每个版本创建单独的 Package@swift-#.swift 文件,或者 starting in Swift 4.2 您可以使用 .version("#") 枚举。

参见:https://forums.swift.org/t/swiftlanguageversions-best-practices-for-libraries/18443