如果“预览内容”文件夹中有SwiftUI预览的代码,为什么存档失败?

时间:2020-07-24 17:46:06

标签: swift xcode swiftui

在我的SwiftUI应用程序中,我将一些示例模型对象放入Xcode的“ Preview Content”文件夹中。我只能在我的SwiftUI PreviewProvider中访问它们。我的理解是,此文件夹中的代码/资产仅用于在Canvas中预览。我的预览正常工作。我正在使用Xcode 11.6(11E708)。

但是,当我去存档我的应​​用程序时,它失败了,因为它找不到这些示例模型对象。我的印象是,PreviewProvider代码并未内置到Xcode 11的最终二进制文件中。请参阅Xcode 11发行说明中的​​this questionthis screenshot

(奇怪的是,我能够使用Release配置进行编译。只是存档失败了。)

作为一种解决方法,我可以将#if DEBUG / #endif包装纸放在PreviewProvider周围,但是上面的屏幕截图表明这不是必需的。

我是否误解了“预览内容”文件夹的工作原理?

1 个答案:

答案 0 :(得分:2)

我相信这是一个 Xcode 错误,但我已经想到了一个解决方法。

我将所有预览测试数据放在自己的 PreviewProvider 中,以便我可以在其他预览中访问它。存档仍然成功,测试数据将在最终存档中被剥离。不需要 #if DEBUG

示例(特定于我自己的用例):

struct PreviewData: PreviewProvider {
    static var previews: some View {
        Text("This is test data for use in other previews.")
    }

    // Use enums for namespacing if desired
    enum Choices {
        static let deals = Choice(id: UUID().uuidString, text: "I want the best deals.", iconName: "bestDealsIcon")
        static let technology = Choice(id: UUID().uuidString, text: "I love technology!", iconName: "technologyIcon")
    }

然后我可以在其他 PreviewData.Choices.deals 中访问 PreviewProvider