SwiftUI:如何使用不支持模拟器的框架和PreviewProvider?

SwiftUI:如何使用不支持模拟器的框架和PreviewProvider?,swift,swiftui,arkit,realitykit,Swift,Swiftui,Arkit,Realitykit,我正在开发一个RealityKit应用程序,并使用SwiftUI 当然,在SwiftUIPreviewProviderpreview中,RealityKit视图不起作用。但我的问题是,即使是简单且完全隔离的SwiftUI视图也不会预览,因为PreviewProvider需要编译整个项目 我的SwiftUI视图类没有以任何方式连接到ARView代码。如果我选择“文件”->“新建”并选择一个SwiftUI文件,然后尝试在画布中预览它,就足够了(⌥ + ⌘ + ↵), 没有任何更改。然后它会给我这个错

我正在开发一个RealityKit应用程序,并使用SwiftUI

当然,在SwiftUI
PreviewProvider
preview中,RealityKit视图不起作用。但我的问题是,即使是简单且完全隔离的SwiftUI视图也不会预览,因为
PreviewProvider
需要编译整个项目


我的SwiftUI视图类没有以任何方式连接到ARView代码。如果我选择“文件”->“新建”并选择一个SwiftUI文件,然后尝试在画布中预览它,就足够了(⌥ + ⌘ + ↵), 没有任何更改。然后它会给我这个错误。只是因为在我的
.xcodeproj
中有画布预览不支持的任何代码,就给出了一个错误

我会遇到如下错误:

Value of type 'ARView' has no member 'installGestures'
我目前仅有的两种解决方案是:1)将文件复制到操场上,在那里进行实验,完成后再复制回来。2) 在处理视图之前,请注释掉所有不受支持的RealityKit相关代码


问:当然,这些解决方案中没有一个是最优的。还有更好的解决方案吗?虽然iOS 13中的新模拟器支持金属,但ARView需要一个实际的设备来捕获相机帧并生成传感器融合数据。它有大量的属性和方法,您需要对它们进行模拟,以允许与其他代码进行交互

您能否通过另一个类(如UIView或UIViewController子类)实现的协议抽象SwiftUI之间的ARView交互?如果协议足够简单,您可以创建一个类来模拟交互-响应您的SwiftUI视图,就好像它实际上在与ARView通信一样,而无需实现整个ARView API


您的SwiftUI视图可能不应该直接处理安装和对ARView属性和方法的任意访问。您可以围绕ARView创建包装器,并通过组合发布者和订阅者来呈现应用程序级逻辑和操作。包装UIView并具有相同pub/SUB的模拟版本可以提供简单的视觉提示,如更改颜色,以表示ARView的不同状态等。

我遇到了同样的问题。我的解决方案是使用targetEnvironment(simulator)编译器指令,如下所示:

struct ContentView : View {
    
    var body: some View {
            #if !targetEnvironment(simulator)
            ARViewContainer()
                .edgesIgnoringSafeArea(.all)
                .statusBar(hidden: true)
            #endif
        }
    }
}

#if !targetEnvironment(simulator)
struct ARViewContainer: UIViewRepresentable {
    
    func makeUIView(context: Context) -> ARView {
        let arView = ARView(frame: .zero)

        // ARKit / RealityKit specific code
        ...

        return arView
        
    }
    
    func updateUIView(_ arView: ARView, context: Context) {}
}
#endif

进一步阅读:

在[xcode]swift条件构建上搜索此处。我收到了26次点击,其中包括:现在如果这些结果没有帮助,删除“swift”会将结果扩大到188次。您的答案实际上是将Xcode用于条件构建。但最简单的方法是什么?使用运行iOS 13的设备。我知道,这可能不可行,但至少你会对实时性能和其他你没有想到的问题有一个感觉。这在Beta6中也会发生吗?我在某个地方读到它应该是一个bug。@Fabian是的,它也发生在最新的测试版上。你记得你在哪里读到的吗?推特还是博客?遗憾的是,现在不是了,我希望如果可能的话,他们能修复它。这似乎是一个bug,因为能够预览一个nisolated SwiftUI视图文件似乎是合理的,而不依赖于my
.xcodeproj
中的所有其他无关文件。我的SwiftUI视图类没有以任何方式连接到ARView代码。如果我选择“文件”->“新建”并选择一个SwiftUI文件,然后尝试在画布中预览它,就足够了(⌥ + ⌘ + ↵), 没有任何更改。然后它会给我这个错误。只是因为在我的
.xcodeproj
中有画布预览不支持的任何代码,就给出了一个错误。