Home / Ops / Deploy and Infrastructure
Updated Jun 27, 2026 · Affirmology_AppStore_TestFlight_Runbook_v1.md
The exact, end to end path to get BOTH iOS apps onto your phone and shareable to testers via TestFlight, then later to the public App Store. No step left to interpretation.
| App | Folder | Bundle ID | Role | Tester model |
|---|---|---|---|---|
| Affirmology Atlas | affirmology-atlas |
ai.affirmology.atlas |
Internal creator lab (you, Sol, Colin, future elevated creators) | External TestFlight + public link |
| Affirmology | affirmology-app |
ai.affirmology.app |
Public consumer beta (the July launch app) | External TestFlight + public link |
Both build the same way. EAS builds in the CLOUD (Expo's servers), so no Xcode build is needed on your Mac. Your local Xcode was only for the Simulator.
Apple Developer account - already ACTIVE. Nothing to do.
Expo account (free): open https://expo.dev and sign up (or sign in if you have one).
Install the EAS CLI globally (your npx eas-cli cache is broken, a global install avoids it).
In Terminal:
npm install -g eas-cli
eas login
Log in with the Expo account from step 2. Confirm with eas whoami.
App Store Connect API key (ONE key, reused for BOTH apps and all future uploads, so EAS can build and upload without you re-logging into Apple each time):
Affirmology EAS, role App Manager, Generate.asc-api-key.p8:
affirmology-atlas/asc-api-key.p8 and affirmology-app/asc-api-key.p8
(it is gitignored as a secret). Give Claude Code the Key ID + Issuer ID, or fill them into each
app's eas.json under submit.production.ios (ascApiKeyId, ascApiKeyIssuerId).After Phase 0 you never repeat it. Phases 1 and 2 are the same recipe per app.
Run all CODE steps from /Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/affirmology-atlas.
Link the project to EAS. CODE:
eas init
Pick your account, accept the suggested name (affirmology-atlas). This writes an EAS projectId
into app.json.
Build in the cloud. CODE:
eas build --platform ios --profile production
- The FIRST time, EAS asks YOU to authenticate with Apple (a login link in the terminal). Approve
it. EAS then auto-creates the iOS signing (distribution certificate + provisioning profile) AND
creates the App Store Connect app record for ai.affirmology.atlas.
- The build runs on Expo's servers, about 15 to 25 minutes. You can close the terminal; it keeps
building. eas build:list shows status.
Upload to TestFlight. CODE (uses the ASC API key, no Apple login needed):
eas submit --platform ios --profile production --latest
Apple processes the build (about 10 to 30 minutes). It then shows up in App Store Connect → your app → TestFlight.
Turn on external testing + the public link. YOU, in App Store Connect → Atlas → TestFlight:
Atlas Creators.Once approved, in the group turn ON Public Link and copy it.
Install on your phone + share. YOU:
Identical recipe, run from /Users/jeffreyparker/CLAUDE/AFFIRMOLOGY/affirmology-app. The Expo login and
the ASC API key are already done (Phase 0); only the per-app build + ASC group are new.
eas initeas build --platform ios --profile production (Apple creds reuse what Atlas set up; creates
the ai.affirmology.app app record)eas submit --platform ios --profile production --latestAffirmology Beta, add
the build, fill Test Information, Submit for Beta Review, turn on the Public Link.This is the link you give to the wider July beta: anyone with it installs (up to 10,000 testers), no account management.
Per app, when the beta is solid. This needs marketing assets, so it is its own prep task.
Flag: do not start Phase 3 until the screenshots + description + privacy policy are written (a separate deliverable). TestFlight (Phases 1 and 2) needs none of that.
react-native-track-player (native), so they cannot run in Expo Go and must be built
by EAS. That is exactly what this runbook does.expo-speech-recognition (the voice mic). Already prebuilt + compile-verified, so the
EAS build includes it.expo-notifications. Real push needs an APNs key added in App
Store Connect later; it is NOT needed to install or test via TestFlight.eas.json production has autoIncrement, so the iOS build number bumps automatically
on each build. The marketing version is 1.0.0 in each app.json; bump that for a public release.eas build ever asks about the bundle identifier, accept the one already in app.json
(ai.affirmology.atlas / ai.affirmology.app); they are approved.In Terminal:
npm install -g eas-cli
eas login
Then generate the ASC API key (Phase 0.4). Once those exist, a Claude Code session on the Mac can run every CODE step in Phases 1 and 2 back to back, pausing only when Apple needs your approval.