【问题标题】:How to import a particular framework only if iOS 13 is available?仅当 iOS 13 可用时如何导入特定框架?
【发布时间】:2020-11-26 17:04:03
【问题描述】:

我们的应用支持 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 包装整个文件,但这也是不起作用,因为这似乎只是一个编译时检查。)

【问题讨论】:

  • 这是我自己一直在苦苦挣扎的一个问题,遗憾的是我找到的唯一解决方案是将本地框架的部署目标设置为与我的应用程序目标相同的版本。但是,这会强制在这些框架中使用@available,即使它们只会在 iOS 上使用,因为它们对 Combine 和 SwiftUI 有很强的依赖。我认为完全迁移到 Swift Package Manager 将是一个解决方案 - 希望 Xcode 12 将成为可能。

标签: swift xcode frameworks ios13


【解决方案1】:

您是否尝试按照本文中的说明有条件地导入框架:Conditionally import a framework (such as Speech) based on iOS Version in Swift?? 有完整的解释here 但是,主要信息是您可以在框架的“目标”部分->“构建阶段”->“将二进制文件与库链接”->在 iOS 12 上不可用的框架的“状态”下定义为可选。

您还必须使用带有@available 标记的库来包装代码。

【讨论】:

  • 欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的内容您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted.
  • 是的,这是我们尝试的第一件事。它不起作用。
猜你喜欢
  • 1970-01-01
  • 2021-09-23
  • 2020-01-25
  • 2023-04-06
  • 2021-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多