Bazel rules for generating SPM Package.swift files to enable SwiftUI Previews in Xcode for Bazel-built iOS projects.
bazel_dep(name = "rules_swift_previews", version = "0.0.0")load("@rules_swift//swift:swift.bzl", "swift_library")
load("@rules_swift_previews//:defs.bzl", "SWIFT_PREVIEW_EXCLUDES", "swift_previews_package")
swift_library(
name = "MyViews",
srcs = glob(["*.swift"], exclude = SWIFT_PREVIEW_EXCLUDES),
deps = [...],
)
swift_previews_package(
name = "previews",
lib = ":MyViews",
)# Generate Package.swift and dependency files
bazel run //path/to/views:previews
# Open in Xcode for previews
open path/to/views/If you use rules_swift_resources for type-safe resource access, resource modules (swift_resources_library) are automatically detected and included in the generated Package.swift. No additional configuration needed.
Views/
├── Package.swift # Generated
├── YourView.swift # Your source files (untouched)
├── BUILD.bazel
└── .deps/ # Generated
├── ModuleA/
├── ModuleB/
└── ResourceModule/
├── Resources/
└── ResourceModule.swift
| Attribute | Type | Default | Description |
|---|---|---|---|
name |
string | required | Target name (typically "previews") |
lib |
label | required | The swift_library target |
ios_version |
string | "18" | iOS deployment target |
macos_version |
string | "" | macOS deployment target (empty to omit) |
tvos_version |
string | "" | tvOS deployment target (empty to omit) |
watchos_version |
string | "" | watchOS deployment target (empty to omit) |
visionos_version |
string | "" | visionOS deployment target (empty to omit) |
Glob patterns to exclude from swift_library sources:
Package.swift- Generated file*+Previews.swift- Preview-only files
The examples/ directory contains working examples demonstrating different use cases.
Each example is a standalone Bazel workspace:
cd examples/basic
# Generate the preview package
bazel run //Views:previews
# Open in Xcode for SwiftUI Previews
open Views/Package.swiftIn Xcode, open the Swift file and the preview canvas will render your SwiftUI views.
| Example | Description |
|---|---|
basic |
Minimal single-module example |
multi_level_deps |
Transitive dependencies: Views -> Theme -> DesignSystem |
swift_resources_deps |
swift_resources_library integration with bundled resources |