运行 SPM 包中的 SwiftUI 预览
Run SwiftUI preview from SPM Package
我正在开发 Swift 包管理器包,其中需要包含 SwiftUI 视图。
每个 SwiftUI 视图都应该有预览。
但是,当我尝试 运行 预览任何视图时,出现以下错误:
我找到了一种方法,如果我将包方案更改为主要目标方案,它就会起作用。但是使用这种方式我必须一直在方案之间切换,每次我想 运行 预览包时都需要构建主要目标。
是否可以 运行 SwiftUI 以某种方式直接从 SPM 包预览而不构建主要目标?
Xcode 12
有了 Xcode 12,SwiftUI 预览就可以在独立包 'as-should' 中运行
Xcode 11+
Is it possible to run SwiftUI preview somehow directly from SPM
Package without building the main target?
不,至少到现在为止(Xcode 11.4beta3)。 Preview 是 Simulator 的变体,它需要 UI 可执行文件来为您的视图预览设置全功能 运行-time 上下文。
解决方案(来自实践):设置 SwiftUI 可执行目标,并行包含包中的所有文件(或包本身,取决于)并执行所有 SwiftUI 开发,但包本身在持续集成过程中构建(包括单元测试)。
在 Xcode 12 中已更改。在 Swift 个包中启用了预览 。事实上,添加了许多更改和新功能,改善了 SwiftUI 库扩展的用户和开发人员体验。您可以观看 this WWDC20 session 以了解更多信息。
要使其在 Xcode 12 的第一个测试版中运行,您必须创建一个库 Swift 包。确保您的程序可以构建 - 并且 SwiftUI 已导入。此外,请记住添加包清单中支持的平台 - SwiftUI 和您的包代码支持的平台。在方案 select 或 select 中,您要预览的库和您的库支持的设备。之后启用 canvas 预览应该是可见的。目前有一些粗糙的角落,但我希望错误和可用性会在以后的版本中得到改善。
您需要在 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
]
)
现在,请确保您使用相同的目标进行预览。你当然可以添加更多。
我正在开发 Swift 包管理器包,其中需要包含 SwiftUI 视图。
每个 SwiftUI 视图都应该有预览。
但是,当我尝试 运行 预览任何视图时,出现以下错误:
我找到了一种方法,如果我将包方案更改为主要目标方案,它就会起作用。但是使用这种方式我必须一直在方案之间切换,每次我想 运行 预览包时都需要构建主要目标。
是否可以 运行 SwiftUI 以某种方式直接从 SPM 包预览而不构建主要目标?
Xcode 12
有了 Xcode 12,SwiftUI 预览就可以在独立包 'as-should' 中运行
Xcode 11+
Is it possible to run SwiftUI preview somehow directly from SPM Package without building the main target?
不,至少到现在为止(Xcode 11.4beta3)。 Preview 是 Simulator 的变体,它需要 UI 可执行文件来为您的视图预览设置全功能 运行-time 上下文。
解决方案(来自实践):设置 SwiftUI 可执行目标,并行包含包中的所有文件(或包本身,取决于)并执行所有 SwiftUI 开发,但包本身在持续集成过程中构建(包括单元测试)。
在 Xcode 12 中已更改。在 Swift 个包中启用了预览 。事实上,添加了许多更改和新功能,改善了 SwiftUI 库扩展的用户和开发人员体验。您可以观看 this WWDC20 session 以了解更多信息。
要使其在 Xcode 12 的第一个测试版中运行,您必须创建一个库 Swift 包。确保您的程序可以构建 - 并且 SwiftUI 已导入。此外,请记住添加包清单中支持的平台 - SwiftUI 和您的包代码支持的平台。在方案 select 或 select 中,您要预览的库和您的库支持的设备。之后启用 canvas 预览应该是可见的。目前有一些粗糙的角落,但我希望错误和可用性会在以后的版本中得到改善。
您需要在 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
]
)
现在,请确保您使用相同的目标进行预览。你当然可以添加更多。