← ClaudeAtlas

xcode-cloud-single-track-cilisted

Use when setting up or changing CI for an Apple-platform project on Xcode Cloud — choosing Xcode Cloud vs GitHub Actions, splitting PR / Main / Release / scheduled workflows, writing `ci_scripts/ci_post_clone.sh` / `ci_pre_xcodebuild.sh` / `ci_post_xcodebuild.sh`, or wiring `CI_BUILD_NUMBER`, `MARKETING_VERSION`, `agvtool` numbering. Or asked "do I need dual-track CI", "main failed after the PR passed", "Xcode Cloud build number collides". Does NOT cover shipping a build by hand when Xcode Cloud is down → local-archive-export-upload, nor ASC REST calls after upload → asc-api-automation.
wei18/apple-dev-skills · ★ 19 · DevOps & Infrastructure · score 78
Install: claude install-skill wei18/apple-dev-skills
# Xcode Cloud Single-Track CI ## When to invoke - Starting a new Apple-platform project and setting up CI. - Deciding between GitHub Actions and Xcode Cloud. - Writing `ci_scripts/ci_post_clone.sh` / `ci_pre_xcodebuild.sh` / `ci_post_xcodebuild.sh`. - Bumping the Xcode version and handling snapshot baselines. - User asks "how to split PR / Main / Release workflow", "auto-upload to TestFlight or not". ## Default decisions ### Single-track on Xcode Cloud - **GitHub Actions is not enabled yet** — wait for real pain (PR metadata rules, external lint jobs, Selective Testing, etc.) to appear. - The repo is hosted on GitHub, but CI runs on Xcode Cloud. ### 4 workflows | Workflow | Trigger | Action | |---|---|---| | **PR CI** | PR open / push (**enable "Merge with base branch before building"**) | Build + Test (unit / integration with fakes / snapshot) | | **Main CI** | Merge to `main` | Build + Archive + upload to internal TestFlight; **do not re-run tests** (already verified by PR CI in pre-merged state) | | **Release** | git tag `v*` | Build + upload to App Store Connect (manual submission for review) | | **Periodic / Manual** | Scheduled + manual trigger | Project-specific batch jobs (nightly export, metadata updates, etc.) | > **Scheduling granularity caveat**: Xcode Cloud's "On a Schedule" start condition supports **hourly / daily / weekly** granularity only — arbitrary cron expressions are not supported. For monthly-or-longer cadence, schedule weekly and add a script-s