Swiftpack.co - BarredEwe/Prefire as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by BarredEwe.
BarredEwe/Prefire 1.0.0
🔥 A library based on SwiftUI Preview, for easy generation: Playbook view, Snapshot and Accessibility tests
⭐️ 23
🕓 3 weeks ago
iOS
.package(url: "https://github.com/BarredEwe/Prefire.git", from: "1.0.0")

Prefire

A library for easy automatic Playbook (Demo) view and Test generation using SwiftUI Preview

Works with: UI-components, screens and flows

Release Platform Swift5 Swift Package Manager Swift Package Manager

Prefire

Playbook

Do you like SwiftUI Preview and use it? Then you must trying 🔥Prefire!

You can try 🔥Prefire starting from example project.

  • ✅ Easy to use
  • ✅ Fully automatic generation based on Sourcery
  • ✅ Generation Playbook (Demo) view
  • ✅ Generation Snapshot tests based on swift-snapshot-testing
  • ✅ Generation Accesability Snapshot tests
  • ✅ Xcode Plugin supported


Installation

Prefire can be install for all your Xcode Project or only for one Package.

Xcode Project Plugin

You can integrate SwiftLint as a Xcode Build Tool Plug-in if you're working with a project in Xcode.

  1. Add Prefire as a package dependency to your project without linking any of the products.
  1. Select the target you want to add linting to and open the Build Phases inspector. Open Run Build Tool Plug-ins and select the + button. Select PrefirePlaybookPlugin or PrefireTestsPlugin from the list and add it to the project.

Swift Package Plugin

You can integrate Prefire as a Swift Package Manager Plug-in if you're working with a Swift Package with a Package.swift manifest.

  1. Add Prefire as a package dependency to your Package.swift file.
dependencies: [
    .package(url: "https://github.com/BarredEwe/Prefire", from: "1.0.0")
]
  1. Add Prefire to a target using the plugins parameter.
.target(
    plugins: [
        // For Playbook (Demo) view
        .plugin(name: "PrefirePlaybookPlugin", package: "Prefire")
        // For Snapshot Tests
        .plugin(name: "PrefireTestsPlugin", package: "Prefire")
    ]
),

Usage

For generating tests and playbook, just mark your preview using protocol - PrefireProvider:

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

Playbook (Demo) View

For using Playbook just use PlaybookView

  • If you want to see a list of all the Views, then use isComponent: true
  • If you want to sort by UserStory, then use isComponent: false
import Prefire 

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

Snapshot tests

Just run generated tests 🚀

For detailed instruction you can see swift-snapshot-testing


API

New commands for previews:

  • Function for connecting preview together in one Flow:

    .previewUserStory(.auth)
    
    static var previews: some View {
        PrefireView()
            .previewUserStory(.auth)
    }
    
    static var previews: some View {
        AuthView()
            .previewUserStory(.auth)
    }
    

    For example Authorization flow: LoginView, OTPView and PincodeView


  • If a preview contains more than one View, you can mark State for these views.

    .previewState(.loading)
    
    static var previews: some View {
        TestView("Default")
    
        TestView("Loading")
            .previewState(.loading)
    }
    


Config

You can additionaly configure Prefire. Just add .prefire.yml file to root folder. Example:

test_configuration:
  - target: PrefireExample 
  - test_file_path: PrefireExampleTests/PreviewTests.generated.swift
  - simulator_device: "iPhone15,2"
  - required_os: 16
  • target - Your project Target for Snapshot tests. Default: FirstTarget
  • test_file_path - Filepath to generated file. Default: DeriveData
  • simulator_device - Device for Snapshot testing. Default: iPhone 14 Pro
  • required_os - iOS version for Snapshot testing. Default: iOS 16

Requirements

  • Swift 5.6+
  • Xcode 14.0+
  • iOS 14+

Previews Troubleshooting

  • Don't forget remove #IF DEBUG for yours SwiftUI Previews. Xcode automatically removed Preview code, when you build release version.
  • NavigationView in Preview is not supported

GitHub

link
Stars: 23
Last commit: 3 hours ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

1.0.1
3 hours ago

Fixed a small bug with the configuration

What's Changed

Full Changelog: https://github.com/BarredEwe/Prefire/compare/1.0.0...1.0.1

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics