Use this checklist before tagging a public SwiftUsdShell release.
Run:
scripts/audit-public-surface.shThis checks that:
SwiftUsdShellstays free of runtime and C++ interop imports- tests exercise the base shell without importing the OpenUSD adapter
- package-local path dependencies are not committed
- the OpenUSD product dependency and C++ interop setting remain isolated to the adapter target
- public docs and source do not mention internal project or product names
- removed renderer/workflow graph concepts do not re-enter the shell
Run:
swift build --target SwiftUsdShell
swift test --filter SwiftUsdShellTestsThese should not require building the OpenUSD adapter. If SwiftPM starts
building the OpenUSD module for this step, stop and inspect the package graph:
the base test target should depend only on SwiftUsdShell.
Run the adapter build separately:
swift build --target SwiftUsdShellOpenUSDThis can be expensive because it builds the SwiftUsd/OpenUSD module. Treat
adapter compile failures as implementation issues in SwiftUsdShellOpenUSD,
not as reasons to move runtime details into SwiftUsdShell.
Before tagging:
- confirm
README.md,Docs/Architecture.md,Docs/AdapterCoverage.md, andDocs/ConsumerGuide.mdmatch the actual package surface - confirm pending adapter gaps are listed in
Docs/AdapterCoverage.md - confirm new DTOs are
Codable,Hashable, andSendableunless explicitly documented otherwise - confirm new APIs are product-neutral USD contracts, not editor workflow policy
Patch releases are appropriate for:
- documentation changes
- non-breaking adapter implementation fixes
- additive convenience initializers that preserve ABI/source compatibility
Minor releases are appropriate for:
- new public DTOs
- new runtime protocol requirements
- new generic edit request cases
- new adapter coverage that exposes additional shell contract fields
Avoid breaking public DTO shapes without a deliberate major-version plan.
When producing the SwiftUsdShell-binaries / SwiftUsd-binaries xcframeworks
via OpenUSDKit's build_swiftusdshell_macos_arm64_binary_slice.sh:
- Always build from a clean scratch (
CLEAN_SCRATCH=1, the default). A reused incremental.buildcan ship a compiled.swiftmodulethat is stale relative to the freshly emitted.swiftinterface. Swift loads the compiled module and ignores the interface, so the published binary advertises API in its text interface that the loaded module does not actually contain. This shipped once as0.3.124-macos-arm64.2(interface hadblockAttribute/usdaLiteral, module did not). - Verify coherence before publishing: the compiled module must expose every symbol the interface advertises. Spot-check by compiling a trivial consumer that references the newest additions against the produced xcframework.
- Distribution follows a single coordinated release train across both binary
repos with exact pins only. See
OpenUSDKit/docs/decisions/0003-binary-distribution-release-train.mdand Reality2713/OpenUSDKit#13. - When an edit atom changes stage lifetime or persistence semantics, publish a
new coordinated train and validate it through at least one downstream app
scheme.
0.3.126-macos-arm64.3is the reference case: cached stage ownership,save, andreloadwere validated by Deconstructed'sInspectorUISwiftPM target and macOS Xcode app scheme.