Prefire

一个用于轻松生成自动化的 Playbook(演示)视图、使用 预览 生成 测试 的库

适用于:UI 组件、屏幕和流程

Release Platform Swift6 Swift Package Manager Swift Package Manager

Prefire

您喜欢 SwiftUI Preview 并使用它吗?那么您一定要试试 🔥Prefire

您可以从示例项目开始尝试 🔥Prefire

🚀 特性

Playbook

为什么选择 Prefire?



⚡ 快速开始

1. 将 Prefire 添加到您的项目

// Package.swift
dependencies: [
    .package(url: "https://github.com/BarredEwe/Prefire.git", from: "4.0.0")
],
.testTarget(
    plugins: [
        // For Snapshot Tests
        .plugin(name: "PrefireTestsPlugin", package: "Prefire")
    ]
)

2. 编写 #Preview

#Preview {
    Button("Submit")
}

3. 运行测试

只需运行生成的测试即可 🚀 所有测试将在 DerivedData 文件夹中生成。


📦 安装

可以为 Xcode Project 或仅为一个 PackageCLI 工具安装 Prefire

Xcode 项目插件

如果您正在 Xcode 中处理项目,则可以将 Prefire 作为 Xcode 构建工具插件集成。

  1. Prefire 作为包依赖项添加到您的项目,无需链接任何产品。
  1. 选择要添加 linting 的目标,然后打开 Build Phases 检查器。 打开 Run Build Tool Plug-ins 并选择 + 按钮。 从列表中,选择 PrefirePlaybookPluginPrefireTestsPlugin,并将其添加到项目中。

Swift 包插件

如果您正在使用带有 Package.swift 清单的 Swift 包,则可以将 Prefire 作为 Swift Package Manager 插件集成。

  1. Prefire 作为包依赖项添加到您的 Package.swift 文件。
dependencies: [
    .package(url: "https://github.com/BarredEwe/Prefire", from: "4.0.0")
]
  1. 使用 plugins 参数将 Prefire 添加到目标。
.target(
    plugins: [
        // For Playbook (Demo) view
        .plugin(name: "PrefirePlaybookPlugin", package: "Prefire")
    ]
),
.testTarget(
    plugins: [
        // For Snapshot Tests
        .plugin(name: "PrefireTestsPlugin", package: "Prefire")
    ]
)

命令行界面 (CLI)

Prefire 提供了一个命令行界面,用于从您的预览生成快照测试。

安装

从 brew 下载 Prefire

brew tap barredewe/prefire
brew install prefire

基本命令

生成测试

从您的预览提供程序生成快照测试

prefire tests

提示:使用 prefire tests --help 获取完整文档

生成 Playbook

生成一个 playbook 文件,记录您的所有预览

prefire playbook

提示:使用 prefire playbook --help 获取完整文档


🛠 高级用法

要生成 测试playbook,只需使用 PrefireProvider 协议标记您的预览

struct Text_Previews: PreviewProvider, PrefireProvider {
    static var previews: some View { ... }
}

如果您使用 #Preview 宏,🔥Prefire 将自动找到它!

如果您不需要它,请标记视图 - .prefireIgnored()

#Preview {
    Text("")
        .prefireIgnored()
}

如果您想禁用自动获取所有预览,请使用设置 preview_default_enabled: false。 然后,要将预览包含在测试中,您需要调用 .prefireEnabled()

#Preview {
    Text("")
        .prefireEnabled()
}

Playbook (演示) 视图

要使用 Playbook,只需使用 PlaybookView

import Prefire 

struct ContentView: View {
    var body: some View {
        PlaybookView(isComponent: true, previewModels: PreviewModels.models)
    }
}

快照测试

只需运行生成的测试即可 🚀 所有测试将在 DerivedData 文件夹中生成。

插件 PrefireTestsPlugin 将为您处理一切 🛠️

有关详细说明,请查看 swift-snapshot-testing 或检查示例项目。


API

Prefire 为预览提供新命令


⚙ 配置

要进一步自定义 Prefire,您可以在项目的根目录中创建一个 .prefire.yml 文件。 这是一个示例内容

test_configuration:
  - target: PrefireExample 
  - test_file_path: PrefireExampleTests/PreviewTests.generated.swift
  - template_file_path: CustomPreviewTests.stencil
  - simulator_device: "iPhone15,2"
  - required_os: 16
  - preview_default_enabled: true
  - sources:
    - ${PROJECT_DIR}/Sources/
  - snapshot_devices:
  	- iPhone 14
  	- iPad
  - imports:
    - UIKit
    - SwiftUI
  - testable_imports:
    - Prefire

playbook_configuration:
  - preview_default_enabled: true
  - template_file_path: CustomModels.stencil
  - imports:
    - UIKit
    - Foundation
  - testable_imports:
    - SwiftUI

配置键及其描述

发布

在准备发布时,您可能想要从发布版本中排除您的 PreviewProvider 和模拟数据。 这可以通过将它们包装在 #if DEBUG 编译器指令中来实现。 或者,您可以传递一个编译器标志以从发布版本中排除 PreviewModels

要使用 Swift Package Manager 排除 PreviewModels,请在链接 PrefirePlaybookPlugin 的包中传递 PLAYBOOK_DISABLED swift 设置

swiftSettings: [
    .define("PLAYBOOK_DISABLED", .when(configuration: .release)),
]

如果您正在使用 Xcode,则可以在 Xcode 构建设置中传递编译器标志

SWIFT_ACTIVE_COMPILATION_CONDITIONS = PLAYBOOK_DISABLED;

要求

问题排查

Playbook 不支持 Preview 中的 NavigationView

通过 CI 运行 Prefire

Xcode 无法在自定义路径中生成测试。

🤝 贡献

我们欢迎贡献! 请按照以下步骤

  1. Fork 存储库
  2. 创建一个功能分支
  3. 提交一个 Pull Request

📄 许可证

Prefire 在 MIT 许可证下发布。 有关详细信息,请参阅 LICENSE