在 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 模拟器上获取旧操作系统版本 [重复]
Xcode13模拟器和预览(Preview)导致Mac处理器占用率急剧飙升的解决方法
Xcode13模拟器和预览(Preview)导致Mac处理器占用率急剧飙升的解决方法