← ClaudeAtlas

expo-local-shiplisted

DEFAULT ship skill for Threadbase iOS. Use this for ALL release operations unless the user explicitly invokes /ship-expo-cloud. Builds and ships locally on macOS using native CLI toolchains only — no Xcode UI, no Organizer, no App Store Connect website clicks. Covers: TestFlight uploads, App Store submissions, local dev (run:ios / run:android), CocoaPods + Gradle troubleshooting, and signing setup. Triggers: "ship", "TestFlight", "submit to App Store", "run:ios", "run:android", "prebuild", "archive", "expo build", "local build", "simulator", "dev client", "CocoaPods error", "Gradle error", "fresh machine setup".
RonenMars/threadbase-mobile · ★ 0 · Web & Frontend · score 70
Install: claude install-skill RonenMars/threadbase-mobile
# Expo Local Build & Ship (CLI-only) Every step is non-interactive shell. No Xcode windows, no App Store Connect website. Apple talks to us via the ASC REST API and `xcodebuild`'s API-key flags. ## Contents - [Quick start](#quick-start) - [Architecture](#architecture) - [One-time setup](#one-time-setup) - [The ship pipeline](#the-ship-pipeline) - [Local dev iteration](#local-dev-iteration) - [Expo gotchas](#expo-gotchas) - [Anti-patterns](#anti-patterns) - [CI variant](#ci-variant) - [Troubleshooting](#troubleshooting) - [Rules](#rules) ## Quick start ```bash ./scripts/ship.sh # → TestFlight (default) ./scripts/ship.sh --target production --release-notes "Fixes login bug" \ --release-type AFTER_APPROVAL # → App Store ``` That's the whole flow. No simulator, no UI clicks. The script: 1. **Preflight** — runs every prerequisite check, fails loud if anything is off. 2. **Install deps** — npm / yarn / pnpm / bun, auto-detected from lockfile. 3. **Prebuild** — runs `npx expo prebuild` only if `ios/` is missing. 4. **Bootstrap signing** — skipped automatically if `.env.signing` and the `.p8` key are already on disk. On a fresh machine, pulls ASC API key + Team ID from 1Password (requires `eval "$(op signin)"` or `OP_SERVICE_ACCOUNT_TOKEN`), renders `ExportOptions.plist`, writes `.env.signing`. 5. **Git sync check** — `git fetch origin` then refuses to ship if local `main` is behind `origin/main` (someone else may have pushed an `app.jso