库版本之间的 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 兼容性的主要内容,如果未能解决你的问题,请参考以下文章