SwiftUI:在哪里放置应用程序初始化代码,以便它不会在预览中运行?

Jac*_*uka 5 swiftui

我正在尝试找到放置不应在预览模式下运行的应用程序初始化代码的位置。我看到几个答案表明以这种方式分割应用程序行为(启动与预览)是不正确的,但我不同意:许多应用程序需要进行额外的设置(例如连接到数据库、启动后台任务、调用 API 等),这不是不适合预览(静态测试数据最有意义)。

在预览模式下,Xcode 实际上运行应用程序并调用 AppDelegate.applicationDidFinishLaunching,因此将触发任何启动后初始化代码。

运行应用程序设置代码以使其不在预览中运行的推荐方法是什么?

Cha*_* A. 11

Xcode 在运行 SwiftUI 预览应用程序时似乎设置了一个环境变量。关键是"XCODE_RUNNING_FOR_PREVIEWS",它的值为"1"

鉴于此,我发现applicationDidFinishLaunching在初始化之前放置一个保护语句来检查我的实现中的环境值,我不希望预览修复我的预览(我的初始化使它们完全失败)。

我还将它包装在调试检查中,以确保它不会意外地破坏生产构建。

func applicationDidFinishLaunching(_ aNotification: Notification) {
    // Initialization needed for previews

    #if DEBUG
    guard ProcessInfo.processInfo.environment["XCODE_RUNNING_FOR_PREVIEWS"] != "1" else {
        return
    }
    #endif

    // Further initialization not needed for previews
}
Run Code Online (Sandbox Code Playgroud)