Skip to content
- Never hand-edit
.pbxproj or .xcodeproj/ contents beyond MARKETING_VERSION.
Use scripts/bump-marketing-version.sh for that exception; for file membership,
check XcodeGen first, then synchronized groups, otherwise ask for Xcode changes.
The ios-project-development skill carries the procedure.
- Never modify
.xcworkspace; changing dependencies, deployment targets or
.entitlements requires explicit user permission.
- Build data stays in the worktree: pass
-d "$(git rev-parse --show-toplevel)/DerivedData" to FlowDeck build/run/test/clean,
or the same path via -derivedDataPath to raw Xcode queries and builds.
Never share DerivedData across worktrees. Create .metadata_never_index before
any build-output directory is populated; preserve the DerivedData* naming.
- Interactive build/run/test and simulator mutations use FlowDeck; CI’s raw Xcode
commands are deliberate. Read
ios-build-verification before selecting tests:
partial selection can silently drop parameterized cases. Verify actual results and
counts, not merely exit status. Tests over 300 seconds are hung; stop and investigate.
- FlowDeck streams stdout only.
scripts/sim-os-log.sh is the sanctioned exception
for read-only os_log from the run’s own simulator; mutation stays with flowdeck.
Disclose the command and why stdout was insufficient in the PR body.
Details: ios-build-verification.
- App-runtime public keys live in gitignored
Secrets.xcconfig; examples alone
must never feed a release. Declare release secret names and formats in the
manifest. CI/server credentials (including RevenueCat sk_…) never enter the app.
- Only the app’s Info.plist may carry those keys (
scripts/verify-bundle-secrets.sh).
- Use
ios-secrets-setup for wiring and scripts/write-release-config.sh for
release config. Release only a SHA with successful completed CI; tags must
point to a commit reachable from the default branch. Read ios-release-guide.
- Release archives use the configured archive volume, never the checkout;
missing storage must fail, not fall back. ASC processing delays are not proof
an upload failed; do not blindly retry a non-idempotent upload.
ios-project-development: file membership, architecture, Swift Testing,
SwiftData, DocC and subscription-skill routing.
ios-ci-configuration: product matrices, extra/watch test targets,
runner placement, editor hooks and local/CI parity.
ios-build-verification: FlowDeck commands, selector traps, runtimes,
simulator logs and worktree troubleshooting.
ios-release-guide: App Store requirements, archive location, upload recovery.
ios-secrets-setup: runtime vs server secrets and release provenance.
ios-ui-verification: accessibility-tree interaction, contrast, SwiftUI API
pitfalls, concurrency and battery/performance guidance.