SwiftUI - 在 iOS 10 及以下的部署目标上使用未声明的类型 xxx

5

当对使用SwiftUI的应用程序进行归档/构建时,如果平台是iOS 10或更早版本,则编译器会抛出“使用未声明类型”的错误。

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

SwiftUI框架也是弱链接的。

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

enter image description here

1个回答

12

这种失败是因为使用低于 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
这将禁用预览,如果您的部署目标是iOS 10或更低版本。但如果仅在存档时使用,这将有效。 如果有更好的解决方案,请分享。 添加此答案,以便处于我的情况的人可以至少使用SwiftUI使其工作。 干杯!

2
最好使用 #if (arch(arm64) || arch(x86_64)) 这样你就可以为模拟器编译了。 - arsenius
对于预览,您可以尝试添加一个DEBUG绕过,例如 #if DEBUG || arch(arm64) - Manav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接