How to Stop SwiftUI Preview Config Drift Before It Reaches Production
SwiftUI previews are like rehearsal rooms. If rehearsal settings and stage settings diverge, launch day fails. Teams hit this when preview mocks don’t match runtime dependencies.
1) Freeze preview dependencies in one container
struct PreviewContainer {
let api: APIClient
let flags: FeatureFlags
static let stable = PreviewContainer(
api: .mock(seed: 42),
flags: .init(enablePaywall: false)
)
}
2) Keep environment wiring identical to app entrypoint
#Preview {
HomeView()
.environment(\.apiClient, PreviewContainer.stable.api)
.environment(\.featureFlags, PreviewContainer.stable.flags)
}
3) Add a preview smoke test in CI
xcodebuild test -scheme AppPreviews -destination 'platform=iOS Simulator,name=iPhone 15'
Failure pattern
- Preview uses local stubs while runtime uses real async loaders.
- Feature flags differ between preview and app targets.
- No CI signal when preview graph breaks.
What to verify
- Preview and runtime show consistent layout states.
- Feature-gated screens render in both modes.
- Preview smoke tests fail fast on missing dependencies.