从SPM包运行SwiftUI预览

时间:2020-01-14 10:37:24

标签: ios swift swiftui swift-package-manager

我正在开发一个Swift Package Manager软件包,其中需要包含SwiftUI视图。

每个SwiftUI视图都应该有一个预览。

但是,当我尝试运行任何视图的预览时,出现以下错误: enter image description here

我找到了一种方法,如果我将打包方案更改为主要目标方案,它就会起作用。但是使用这种方法,我必须一直在方案之间切换,并且每次我要运行程序包预览时都需要构建主要目标。

是否可以直接从SPM包中以某种方式运行SwiftUI预览而无需构建主要目标?

3 个答案:

答案 0 :(得分:4)

Xcode 12

使用Xcode 12,SwiftUI预览版可以在独立程序包中按需运行

demo

Xcode 11 +

是否可以直接从SPM以某种方式运行SwiftUI预览 打包而没有建立主要目标?

否,至少到现在为止(Xcode 11.4beta3)。预览是模拟器的一种变体,它需要UI可执行文件才能为您的视图预览设置全功能的运行时上下文。

解决方案(来自实践):设置SwiftUI可执行目标,该目标并行包含程序包(或程序包本身,取决于)中的所有文件,并对其进行所有SwiftUI开发,但程序包本身在持续集成过程(包括单元测试)中构建。

答案 1 :(得分:1)

您需要在 swiftpackage 声明中添加一个平台目标,例如 iOS,请参见下面的示例(使用 iOS(.v13)):

let package = Package(
    name: "NAME",
    platforms: [.iOS(.v13)],
    products: [
        // Products 
    ],
    dependencies: [
        // Dependencies declare other packages that this package depends on.
        // .package(url: /* package url */, from: "1.0.0"),
    ],
    targets: [
        // Targets
        // Test Targets
    ]
)

现在,请确保使用相同的目标进行预览。您当然可以添加更多。

enter image description here

答案 2 :(得分:0)

在Xcode 12中已更改。在Swift软件包中启用了预览。实际上,添加了许多更改和新功能,以改善SwiftUI库扩展的用户和开发人员体验。您可以观看this WWDC20会议以了解更多信息。

要使其在Xcode 12的第一个Beta中起作用,您必须创建一个库Swift Package。确保您的程序可以构建-并且已导入SwiftUI。另外,请记住添加软件包清单中支持的平台-SwiftUI和软件包代码支持的平台。在方案选择器中,选择要预览的库和库支持的设备。在启用画布之后,预览应该是可见的。当前存在一些困难,但是我希望以后的版本中的错误和可用性会有所改善。