在 Xcode 模拟器上运行预览 [重复]

Posted

技术标签:

【中文标题】在 Xcode 模拟器上运行预览 [重复]【英文标题】:Run previews on Xcode simulator [duplicate] 【发布时间】:2019-07-24 17:56:45 【问题描述】:

我正在使用 Xcode 11 测试 swiftUI,但我无法让我的 Content_Previews 正常工作。我的代码类似于introductory talk given by Apple。

由于我没有 MacOS Catalina,我正在使用模拟器和真实设备进行测试。我无法通过我的 testData 看到 DEBUG 预览。

ContentView.swift 看起来像:

import SwiftUI

struct ContentView: View 
    var devices: [Device] = []

    var body: some View 
            NavigationView 
                List(devices)  device in
                    Image(systemName: "gamecontroller")
                    VStack() 
                        Text(device.name)
                        if(device.isConnected)
                            Text("Connected").font(.subheadline).foregroundColor(.secondary)
                        else
                            Text("Not Connected").font(.subheadline).foregroundColor(.secondary)
                        
                    
                
                .navigationBarTitle(Text("Devices"))
            
  


#if DEBUG
struct ContentView_Previews: PreviewProvider 
    static var previews: some View 
        ContentView(devices: testData)
    

#endif

那么,Device 结构如下:

import SwiftUI

struct Device : Identifiable 
    var id = UUID()
    var name: String
    var isConnected: Bool = false



let testData = [
    Device(name: "devA"),
    Device(name: "devB"),
    Device(name: "devC")
]

不知何故,ContentView_Previews 没有被执行,尽管 DEBUG 是打开的。 (我测试了这个放置一个条件文本视图)。知道出了什么问题吗?我的猜测是 PreviewProvider ContentView_Previews 没有被调用并且我缺少一些配置。

【问题讨论】:

您有两种使用预览的选择:(1) Catalina 或 (2) Playgrounds。我不需要预览(我有一台测试 iPad),但我确信在您最喜欢的搜索引擎上快速搜索会产生良好的结果。 ContentView_Previews 在 Xcode Preview 中使用 - 它们不适用于模拟器。 这是一个名为 ios Playgrounds 中 Mojave 上的 SwiftUI 的链接(希望不会太旧):ericasadun.com/2019/06/06/… 【参考方案1】:

Xcode 仅支持 macOS Catalina (10.15) 或更高版本上的 SwiftUI 预览。它可以在 Mojave 上编译符合 PreviewProvider 的类型,但不会渲染它们。

有两种方法可以在 Mojave 上呈现 SwiftUI 视图:在模拟器中(如您所见)或在操场中。

这是一个示例 iOS Playground,可在 macOS Mojave 10.14.6 上的 Xcode 11 beta 4 中运行:

import SwiftUI

struct ContentView: View 
    var body: some View 
        VStack 
            Text(verbatim: "Hello \(ProcessInfo.processInfo.operatingSystemVersionString)")
                .lineLimit(nil)
                .padding()
                .background(Color.pink.opacity(0.2).cornerRadius(12))
                .border(Color.red, width: 2, cornerRadius: 12)
        
    


import PlaygroundSupport

let host = UIHostingController(rootView: ContentView())
host.preferredContentSize = .init(width: 200, height: 200)
PlaygroundPage.current.liveView = host

结果:

【讨论】:

Catalina 这显然是需要的。尽管我无法使用预览,但我至少可以在模拟器上运行测试数据。

以上是关于在 Xcode 模拟器上运行预览 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode iOS 模拟器上获取旧操作系统版本 [重复]

如何在 XCode 中预览故事板的不同视图控制器

Xcode13模拟器和预览(Preview)导致Mac处理器占用率急剧飙升的解决方法

Xcode13模拟器和预览(Preview)导致Mac处理器占用率急剧飙升的解决方法

Xcode13模拟器和预览(Preview)导致Mac处理器占用率急剧飙升的解决方法

XCode - 模拟器/设备不尊重自动布局约束