dyld:当应用使用@available(iOS 13.0,*)在iOS 12上运行时,库未加载SwiftUI

Yic*_*man 6 xcode ios swift swiftui

我决定在我的应用程序中使用SwiftUI实现一些视图。该应用程序向后兼容iOS 12。

一切正常,直到我在iOS 12设备上运行它。该应用程序立即崩溃,并且收到警告,提示我无法加载SwiftUI。

dyld: Library not loaded: /System/Library/Frameworks/SwiftUI.framework/SwiftUI
  Referenced from: /var/containers/Bundle/Application/MyApp.app/MyApp
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我在所有正确的位置使用@available(iOS 13.0,*),没有编译器警告,并且该应用程序可以在iOS 13上完美运行

我如何才能在iOS 12上使用它?

Yic*_*man 14

原来这是一个已知问题,苹果引入了一个新的构建设置标志来处理它

在Swift软件包中包含SwiftUI的应用程序可能无法在iOS 13之前的iOS版本上运行。(53706729)

解决方法:

当向后部署到不包含SwiftUI框架的操作系统时,请将-weak_framework SwiftUI标志添加到Build Settings选项卡中的Other Linker Flags设置中。有关弱链接框架的更多信息,请参见框架和弱链接。使用导入SwiftUI的动态链接Swift包时,此解决方法不适用。

添加 -weak_framework SwiftUIOther Linker Flags修复我的问题


Kac*_*bek 7

您还可以在构建阶段将 SwiftUI.framwerk 标记为可选。详细说明如下。

  1. 在 Xcode 导航器中选择您的项目文件。
  2. 选择您的应用目标(或您使用 SwiftUI 的任何目标)。
  3. 选择“Build Phases”选项卡,然后选择“Link Binary With Libraries”部分。
  4. 单击出现的列表下的 + 按钮。
  5. 在弹出表单的搜索字段中输入“SwiftUI”,选择“SwiftUI.framework”,然后单击“添加”。
  6. 在表格的新行上,单击最后一列中的“必需”弹出按钮。将值更改为“可选”。