库版本之间的 Swift 兼容性

Posted

技术标签:

【中文标题】库版本之间的 Swift 兼容性【英文标题】:Swift compatibility between versions for a library 【发布时间】:2015-10-26 18:32:18 【问题描述】:

我正在分发库供其他开发人员使用 (http://empiric.al)。我注意到在 swift 版本之间,即使是 2.0 到 2.1,我会得到 Module file was created by a (newer/older) version of the compiler.

我需要以一种面向未来的方式分发。

我如何确保我编译的框架将来可以被更新版本的 Swift 使用,这样我就不必在 Apple 推出新的测​​试版后立即重新编译?

【问题讨论】:

【参考方案1】:

来自Apple's website:

二进制兼容性和框架

在确保应用的运行时兼容性的同时,Swift 语言 本身会不断进化,二进制接口也会 改变。为安全起见,应用程序的所有组件都应使用 相同版本的 Xcode 和 Swift 编译器,以确保它们 一起努力。

这意味着需要谨慎管理框架。例如, 如果您的项目使用框架与嵌入式共享代码 扩展,您将需要构建框架、应用程序和扩展 一起。依赖二进制框架是危险的 使用 Swift——尤其是来自第三方的。随着 Swift 的变化,那些 框架将与您的应用程序的其余部分不兼容。当。。。的时候 二进制接口在一两年内稳定下来,Swift 运行时将 成为主机操作系统的一部分,此限制将不再存在。

【讨论】:

【参考方案2】:

在 Swift ABI(应用程序二进制接口)稳定之前(我猜还要一两年),分发适用于不同 Xcode 版本的库的唯一方法是分发源代码。 Cocoa pod 和 Carthage 都是简化库分发的好工具,但对于 Swift 代码,它们仍将依赖可用的源代码。

可能有一个 Cocoapod 可以检测运行它的 Xcode 版本,然后下载并提供正确的库构建,但您仍然需要为您想要支持的所有 Xcode 版本构建库并在每次 Apple 发布新的 Xcode 时重新编译,但至少用户不需要手动下载新版本。

【讨论】:

以上是关于库版本之间的 Swift 兼容性的主要内容,如果未能解决你的问题,请参考以下文章

protobuf 版本之间的数据格式兼容性

Swift 与 C++ 互操作性讨论

support v7兼容包有啥用(一 、啥是支持库)

使 Swift OSS 库与 Objective-C 兼容

iOS AAChartKit 图表库的使用

iOS AAChartKit 图表库的使用