Xcode 兼容性的 Swift 框架问题

Posted

技术标签:

【中文标题】Xcode 兼容性的 Swift 框架问题【英文标题】:Swift framework problems with Xcode compatibility 【发布时间】:2018-04-19 13:11:31 【问题描述】:

我有一个框架,我将其分发给客户,但不让他们访问源代码,这取决于我用来构建它的 Xcode 版本,他们在导入文件时会收到类似 module compiled with Swift 4.1 cannot be imported in Swift 3.2.3 的错误。 我在项目中找不到任何允许我构建框架的向后兼容版本的设置。具体来说问题是在 9.2 和 9.3 之间,但同时这似乎是一个常见问题,我如何构建框架以使其适用于所有以前的 Xcode 版本?

【问题讨论】:

目前 Swift 4 还没有 ABI 兼容性。您必须为整个项目使用相同的 Swift 版本。所以,使用 Swift 3 而不是 4 项目中使用的Swift版本。为必要的版本构建它 你好。这就是为什么很多框架会根据你想要使用的 Swift 版本提供不同的版本(例如 SnapKit github.com/SnapKit/SnapKit)。 但这实际上是问题所在,我根本没有使用 swift 4,我猜它只是自动从 3.3 编译到 4.1。所以我和客户都在使用 swift 3 ,但他们还是得到了这个错误,除了用不同的 xcode 版本构建框架之外没有解决方案? 在目标的构建设置下寻找“Swift Language Version”。随着 Swift 语言在主要版本之间的演变,挑战将是为不同的用户提供不同的二进制框架,同时保持单一的代码库。 【参考方案1】:

在具有 ABI 稳定性的 Swift 5 发布之前,您的库必须使用与父应用程序相同的 Swift 版本进行编译。这意味着基于 Swift / Xcode 版本的多个副本。

一旦 Swift 5 发布,您就可以编译一个副本以用于任何使用 Swift 5 或更高版本编译的应用程序。

【讨论】:

以上是关于Xcode 兼容性的 Swift 框架问题的主要内容,如果未能解决你的问题,请参考以下文章

XCode 9.4.1 上的 Swift + Objective C 框架的问题

Xcode 7 和基于 swift 的框架

Xcode - 从嵌套框架访问 swift 类

将 Swift 框架嵌入到另一个框架 Xcode

swift 4.2 的 Xcode 10 视觉识别问题

Swift Xcode 9.4 框架