在我的SwiftUI应用程序中,我将一些示例模型对象放入Xcode的“ Preview Content”文件夹中。我只能在我的SwiftUI PreviewProvider
中访问它们。我的理解是,此文件夹中的代码/资产仅用于在Canvas中预览。我的预览正常工作。我正在使用Xcode 11.6(11E708)。
但是,当我去存档我的应用程序时,它失败了,因为它找不到这些示例模型对象。我的印象是,PreviewProvider
代码并未内置到Xcode 11的最终二进制文件中。请参阅Xcode 11发行说明中的this question和this screenshot。
(奇怪的是,我能够使用Release配置进行编译。只是存档失败了。)
作为一种解决方法,我可以将#if DEBUG
/ #endif
包装纸放在PreviewProvider
周围,但是上面的屏幕截图表明这不是必需的。
我是否误解了“预览内容”文件夹的工作原理?
答案 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
。