SwiftUI - 在低于或等于 iOS 10 的部署目标上“使用未声明的类型 xxx”

Kun*_*rma 6 ios swift swiftui

在归档/构建使用 SwiftUI 平台 <= iOS 10 的应用程序时,编译器会抛出错误“使用未声明的类型”。

即使封闭类型被标记为 @available(iOS 13.0, *) 并且还使用 #if canImport(SwiftUI),也会发生这种情况。

SwiftUI 框架也是弱链接。

如果您在 iOS 11+ 设备上运行(调试),或者为最低支持版本 <= iOS 11 的目标存档,则一切正常。

在此处输入图片说明

Kun*_*rma 10

发生此故障是因为使用早于 iOS 11 的部署目标构建的构建也将针对 armv7 架构构建,并且 iOS SDK 中没有用于 SwiftUI 的 armv7 swiftmodule,因为首次引入的操作系统版本 (iOS 13) 不支持armv7 了。

我通过将 SwiftUI 代码/文件包装在#if arch(arm64).

例子 -

#if arch(arm64)
@available(iOS 13.0, *)
struct MyCustomView: View {
    var myStrings: [String]
    var body: some View {
        List {
            ForEach(myStrings) { str in
                Text(str)
            }
        }
    }
}
#endif
Run Code Online (Sandbox Code Playgroud)

如果您的部署目标 <= iOS 10,这确实会禁用预览。但如果仅在存档时使用,这确实有效。

如果有人知道更好的解决方案。请分享。

添加此答案,以便我的情况下的某人至少可以使其与 SwiftUI 一起使用。

干杯!

  • 最好使用#if (arch(arm64) || arch(x86_64))`,这样你也可以为模拟器进行编译。 (2认同)