Swift 动态库是不是向后兼容旧的 swift 版本项目

Posted

技术标签:

【中文标题】Swift 动态库是不是向后兼容旧的 swift 版本项目【英文标题】:Are Swift dynamic libraries backward compatible with older swift version projectsSwift 动态库是否向后兼容旧的 swift 版本项目 【发布时间】:2017-04-06 08:21:07 【问题描述】:

我开始从头开始开发 SDK。我不确定我应该用 Swift 还是 Objective-C 来编写它。我觉得 Swift 在很多方面都比 Objective-C 好,但我的主要问题是 - swift 动态库是否支持旧版本的 Swift。假设我在 Swift 3.0 中编写动态库,我可以在使用 Swift 2.2 的项目中使用该动态库吗?我在我正在阅读的一篇文章中发现了这一点

动态库是可以链接到的可执行代码块 一个应用程序。此功能允许当前的 Swift 应用程序链接 随着时间的推移,Swift 语言的更新版本会随着它的发展而变化。

这是否意味着我将能够在使用 Swift 2.2 的项目中运行使用 Swift 3.0 构建的动态库?我还在Apple documentation

中找到了这个

首先,Swift 2.3 和 Swift 3 不是二进制兼容的,所以你的应用 整个代码库需要选择一个版本的 Swift。

我发现这与第一句话完全矛盾。我知道使用桥接头在 Swift 中导入 Objective-C 库非常简单,相反的情况也一样吗?在尝试使 Swift 库与 Objective-C 项目一起工作时,我会遇到任何问题或障碍吗?我找不到任何解决向后兼容性的答案或文章。任何帮助深表感谢。谢谢!

TLDR:使用 Swift 3(或更高版本)构建的动态库在使用旧版本 Swift 的项目或使用 Objective-C 的项目中是否兼容

【问题讨论】:

【参考方案1】:

简单地说,第一个引用的陈述是错误的(当前)。

Swift ABI(应用程序二进制接口)尚未最终确定。 ABI 是关于函数调用外观、变量和引用如何存储在真实机器等方面的一组约定。在最终确定之前,应用程序中的所有 Swift 模块都必须使用相同版本的 Swift 编译。

有关 Swift ABI 的更多信息,请参阅Swift ABI Manifesto.

【讨论】:

@ebby94 Swift ABI 宣言非常详细 github.com/apple/swift/blob/master/docs/… 感谢您的链接!

以上是关于Swift 动态库是不是向后兼容旧的 swift 版本项目的主要内容,如果未能解决你的问题,请参考以下文章

swift 3 中的 DISPATCH_TIME_NOW 和向后兼容性

Swift 3 会破坏与 Carthage 集成的动态框架吗?

Swift 核心数据问题

Xcode 兼容性的 Swift 框架问题

库版本之间的 Swift 兼容性

使 Swift OSS 库与 Objective-C 兼容