rules_swift_previewsAPI docs @0.1.0

@rules_swift_previews//:defs.bzl

Non-bzlmod entry point for rules_swift_previews.

This file provides a fallback for users not using bzlmod (WORKSPACE-based projects).
Note: This basic version does NOT support automatic resource module detection.
For resource support, migrate to bzlmod and set enable_resources = True.

Functions & Macros

swift_previews_package

Generate an SPM Package.swift for Xcode SwiftUI previews.

Parameters
*name

Target name (typically "previews")

*lib

The swift_library target to generate previews for

ios_version

iOS deployment target (default: "18")

Default: "18"
macos_version

macOS deployment target (empty to omit)

Default: ""
tvos_version

tvOS deployment target (empty to omit)

Default: ""
watchos_version

watchOS deployment target (empty to omit)

Default: ""
visionos_version

visionOS deployment target (empty to omit)

Default: ""
visibility

Bazel visibility

Default: None

Providers

SourceFilesInfo

Provider that contains source files collected from swift_library targets.

Fields
sources

depset of source files

module_sources

dict mapping module names to their source files

resource_modules

dict mapping resource module names to their resource files

module_deps

dict mapping module names to their dependency module names

@rules_swift_previews//:extensions.bzl

Module extension for rules_swift_previews.

Module Extensions

swift_previews
Tag Classes
use_swift_resources

Enable rules_swift_resources integration for generating Swift resource accessors.

@rules_swift_previews//internal:core.bzl

Core implementation for rules_swift_previews.

Uses convention-based resource detection (checks rule kind) rather than
importing SwiftResourceInfo.

Functions & Macros

swift_previews_package_impl

Implementation of the preview package generator rule.

Exported for use by generated repository rules.

Parameters
*ctx

The rule context.

create_swift_previews_rule

Factory to create swift_previews_package rule variants.

Parameters
extra_attrs

Additional attributes to add to the rule (e.g., _sr for SwiftResources)

Default: {}
create_swift_previews_macro

Factory to create swift_previews_package macro wrapper.

Parameters
*rule_fn

The rule function to wrap

swift_previews_package

Generate an SPM Package.swift for Xcode SwiftUI previews.

Parameters
*name

Target name (typically "previews")

*lib

The swift_library target to generate previews for

ios_version

iOS deployment target (default: "18")

Default: "18"
macos_version

macOS deployment target (empty to omit)

Default: ""
tvos_version

tvOS deployment target (empty to omit)

Default: ""
watchos_version

watchOS deployment target (empty to omit)

Default: ""
visionos_version

visionOS deployment target (empty to omit)

Default: ""
visibility

Bazel visibility

Default: None

Rules

swift_previews_package_rule

Generates an SPM Package.swift for Xcode SwiftUI previews.

AttributeTypeDescription
*namename

A unique name for this target.

*liblabel

The swift_library target to generate previews for

*package_dirstring

Path to the package directory

ios_versionstring
Default: "18"
macos_versionstring
Default: ""
tvos_versionstring
Default: ""
watchos_versionstring
Default: ""
visionos_versionstring
Default: ""

Aspects

source_collector_aspect

Collects source files and resources from swift_library targets.

@rules_swift_previews//internal:package_generator.bzl

Package.swift generation logic for rules_swift_previews.

Functions & Macros

generate_package_swift

Generate the Package.swift content.

Parameters
*name

The main module name (from the swift_library target)

*dep_modules

List of dependency module names

*resource_modules

List of resource module names

module_deps

Dict mapping module names to their dependency module names

Default: None
ios_version

iOS deployment target version

Default: "18"
macos_version

macOS deployment target version (empty to omit)

Default: ""
tvos_version

tvOS deployment target version (empty to omit)

Default: ""
watchos_version

watchOS deployment target version (empty to omit)

Default: ""
visionos_version

visionOS deployment target version (empty to omit)

Default: ""

@rules_swift_previews//internal:providers.bzl

Shared providers for rules_swift_previews.

Providers

SourceFilesInfo

Provider that contains source files collected from swift_library targets.

Fields
sources

depset of source files

module_sources

dict mapping module names to their source files

resource_modules

dict mapping resource module names to their resource files

module_deps

dict mapping module names to their dependency module names

@rules_swift_previews//internal:repo_rule.bzl

Repository rule that generates the swift_previews repository.

Generates a thin wrapper that optionally adds the sr binary for
Swift resource accessor generation.

Repository Rules

swift_previews_repository

Generates the swift_previews repository.

AttributeTypeDescription
*namename

A unique name for this repository.

repo_mappingdictionary: String → String

In WORKSPACE context only: a dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.

For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target, it should actually resolve that dependency within globally-declared @bar (@bar//some:target).

This attribute is not supported in MODULE.bazel context (when invoking a repository rule inside a module extension's implementation function).

swift_resourcesstring

Label for the sr binary. Enables Swift resource accessor generation.

Default: ""

@rules_swift_previews//internal:script_generator.bzl

Shell script generation utilities for rules_swift_previews.

This module provides both pure string-based functions (for testability) and
wrapper functions that work with Bazel File objects.

Functions & Macros

generate_copy_sources_script_from_paths

Generate script lines to copy dependency sources to .deps/.

Pure function that takes string paths instead of File objects.

Parameters
*dep_dirs

dict mapping module_name -> list of source short_paths (strings)

generate_copy_resources_script_from_paths

Generate script lines to copy resource files to .deps/<module>/Resources/.

Pure function that takes string paths instead of File objects.

Parameters
*resource_modules

dict mapping module_name -> list of resource short_paths (strings)

generate_sr_script_from_paths

Generate script lines to run SwiftResources sr generate for each resource module.

Pure function that takes classified file info instead of File objects.

Parameters
*resource_modules

dict mapping module_name -> dict with keys:

  • "fonts": list of font basenames (strings)
  • "images": list of image basenames (strings)
  • "files": list of other file basenames (strings)
*sr_short_path

short_path to the sr binary

generate_copy_sources_script

Generate script lines to copy dependency sources to .deps/.

Parameters
*dep_dirs

dict mapping module_name -> list of source File objects

generate_copy_resources_script

Generate script lines to copy resource files to .deps/<module>/Resources/.

Parameters
*resource_modules

dict mapping module_name -> list of resource File objects

generate_sr_script

Generate script lines to run SwiftResources sr generate for each resource module.

Parameters
*resource_modules

dict mapping module_name -> list of resource File objects

*sr_short_path

short_path to the sr binary

generate_base_script

Generate the base shell script setup lines.

Parameters
*package_dir

Path to the package directory

generate_package_write_script

Generate script lines to write Package.swift.

Parameters
*package_swift_content

The Package.swift file content