Some times, only the preview of SwiftUI view crashes. Both the simulator and the real device don't crash. So we need to do extra works or don't run some methods if the target is a preview.
We can't identify preview from debug, so we add a isPreview
variable under debug, and that won't leave the variable in release version.
struct SomeView : View {
#if DEBUG
var isPreview = false
#endif
var body: some View {
Text("Hello World!")
.onAppear {
#if DEBUG
if isPreview {
return
}
#endif
foo()
}
}
private func foo() {
...
}
}
struct SomeView_Previews: PreviewProvider {
static var previews: some View {
Group {
SomeView(isPreview: true)
.previewDevice(PreviewDevice(rawValue: "iPhone SE 2"))
.previewDisplayName("iPhone SE 2")
SomeView(isPreview: true)
.previewDevice(PreviewDevice(rawValue: "iPhone 14 Pro"))
.previewDisplayName("iPhone 14 Pro")
}
}
}