最近在写 macOS 产品,不知道从什么时候开始,在 Xcode 里进行 SwiftUI Previews 时会把 App 也跑起来,导致总是打断我写 SwiftUI 代码。从 Xcode 的视角就是,它执行 SwiftUI Previews 的过程中,把 AppDelegate 给完整地跑了一遍。

我去测试了之前用过 SwiftUI 的两个项目,发现也是这样。但是我新建的干净 Xcode 项目,无论是 AppDelegate 的 Life Cycle 模式还是 SwiftUI 的 Life Cyle,却没有这样的问题。

在我找到真实的原因之前,我用了一招 Workaround 解决了这个问题,那就是利用环境变量XCODE_RUNNING_FOR_PREVIEWS 来判断是不是 Xcode Previews 的环境,如果是,直接 return 掉。如下:

Xcode SwiftUI Previews Env.png

这样以后 App 再也不会运行了,也不会影响其他的调试。