local-archive-export-uploadlisted
Install: claude install-skill wei18/apple-dev-skills
# Local Archive, Export, Upload
The manual escape hatch for getting a build to TestFlight when Xcode Cloud's
**Main CI** workflow (→ `xcode-cloud-single-track-ci`) can't run — quota
exhausted, an outage, or CI not wired up yet. Same three Apple CLIs Xcode
Cloud uses under the hood — `xcodebuild archive`, `-exportArchive`, upload —
driven by hand instead of Apple's managed runner.
## When to invoke
- Xcode Cloud can't run but a build must reach internal TestFlight today.
- Writing or debugging a local archive/export/upload script or one-off command.
- Diagnosing an `ExportOptions.plist` / signing / build-number failure.
- Asked "how do I ship a build without Xcode Cloud" or "what does
`-exportOptionsPlist` need".
## Scope
Owns: the local three-step pipeline (archive → export → upload) and its
signing/export-key semantics. Does NOT own:
- ASC operations once the build exists (TestFlight groups, what's-new,
submission) → `asc-api-automation`.
- What has to be true for the build to *pass* review →
`app-store-review-rejections`.
- `.p8` / API-key storage → `build-time-secret-injection` +
`apple-public-repo-security`.
- Restoring Xcode Cloud once quota returns — this is a **temporary
substitute**, not a parallel permanent CI track.
## Pipeline
| Step | Command | Notes |
|---|---|---|
| 1. Archive | `xcodebuild archive -scheme <Scheme> -destination 'generic/platform=iOS' -archivePath build/App.xcarchive` | `-destination` picks the platform; a `generic/platform=...`