仅当 iOS 13 可用时如何导入特定框架?

sca*_*aly 8 xcode frameworks swift ios13

我们的应用程序支持 iOS 12 及更高版本,但是我们在应用程序中有两个新的本地框架“Jello”和“Wizdom”,但它们仅支持 iOS 13 及更高版本(因此它们可以使用 Combine 和 SwiftUI)。

该应用程序与 Jello、Wizdom、Combine 和 SwiftUI 的链接很弱。该应用程序的主要 BaseUI 模块是实际导入 Jello 的部分。BaseUI 支持 iOS 12 及更高版本,因此它与 Jello 等的链接也很弱。

但是,我们遇到了一个问题,即 BaseUI 由于以下错误而无法编译:Compiling for iOS 12.0, but module 'Jello' has a minimum deployment target of iOS 13.0.

如何在 iOS 13 可用的情况下使导入成为条件(即,如果 iOS 13 不可用,则不要导入它)?

(到目前为止,我发现的唯一解决方法是在 Jello 周围创建一个 Objective C 包装器并通过该包装器访问它,但这很笨拙且笨拙。我也尝试用它包装整个文件,#if canImport(SwiftUI) ... #endif但这也不起作用,因为它似乎这只是一个编译时检查。)

La *_*vre 0

您是否尝试过按照这篇文章中的说明有条件地导入框架:Conditionally import a Framework (such as Speech) based on iOS Version in Swift??\n这里有完整的解释\n但是,主要信息是您可以在框架中定义为可选的 \xe2\x80\x9cTargets\xe2\x80\x9d 部分 -> “构建阶段” -> “链接二进制文件框架的“使用库”->“状态”在 iOS 12 上不可用。

\n

您还必须使用 @available 标签来包装使用此库的代码。

\n

  • 是的,这是我们尝试的第一件事。这不起作用。 (4认同)
  • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下也是有用的:[在链接周围添加上下文](//meta.stackexchange.com/a/8259),这样您的其他用户就会知道它是什么,并且为什么它在那里,然后引用您链接到的页面中最相关的部分,以防目标页面不可用。[仅是链接的答案可能会被删除。](//stackoverflow.com/help/deleted-answers) (3认同)