Course contents
Project

Capstone: ship your app to TestFlight and Google Play internal testing

Take the app you built in this course from a clean repo to installable builds on testers' phones, on both platforms, with Codex doing the work and you holding the checklist.

This is where the course comes together. You have an Expo SDK 58 app with navigation, Supabase auth, push, purchases and native features. Now you'll put it in the hands of real testers on both platforms. Pick the track for the platform you can reach first; the other platform comes at the end of each track. Expect waiting: builds queue, Apple processes uploads, and Google's closed test, if your account needs one, takes two weeks.

Costs as of November 2026: Apple's Developer Program is 99 USD a year, Google Play registration is a one-time US$25, and Expo's Free plan includes 15 iOS and 15 Android builds a month.

Brief Codex for the release

Start a fresh Codex session in Ask for approval mode with the Expo plugin installed, and give it the whole release as one goal with checkpoints. The $eas-app-stores skill covers eas.json, signing, versions and submissions, and the Expo MCP tools let Codex read build logs and TestFlight feedback instead of asking you to paste them.

A starting prompt
Use $eas-app-stores. Goal: get Tipjar onto TestFlight internal testing and Google Play internal testing.
Stop and ask me before every eas build and eas submit, and before anything that costs money.
1. Run npx tsc --noEmit, npm test and npx expo-doctor; fix what fails.
2. Check app.json: name, version, ios.bundleIdentifier, android.package, permission strings.
3. Check eas.json production profiles and submit profiles.
4. Then follow my track's steps. After each build, read its logs with the Expo MCP tools and summarize.
Definition of done0 / 9
Pick your track · finish either one
Steps · 0 / 6 done
  1. Freeze and check the release commit

    Have Codex run the checks and fix failures, then commit and tag the release.

    bash
    npx tsc --noEmit && npm test && npx expo-doctor
    VerifyAll three pass, and git status is clean on a tagged commit.
  2. Lock the app's identity

    Set ios.bundleIdentifier (for example com.yourname.tipjar) and version in app.json. Let EAS manage build numbers so every upload is unique.

    json
    {
      "expo": {
        "version": "1.0.0",
        "ios": { "bundleIdentifier": "com.yourname.tipjar" }
      }
    }
    Verifynpx expo config --type public shows the bundle identifier you intend to keep forever.
  3. Build and submit to TestFlight

    One command creates credentials, builds on Expo Build and submits for internal testing. Approve it when Codex asks.

    bash
    npx testflight
    VerifyApp Store Connect › TestFlight shows the build as ready to test after processing.
  4. Install and run your test plan

    Add yourself and a teammate to an internal group, install from the TestFlight app, and walk the plan: sign up, send a tip, receive a push, buy Pro in the sandbox, restore, go offline, delete the account.

    bash
    eas submit --platform ios --groups "Internal" --what-to-test "Sign up, send a tip, buy Pro, restore, go offline, delete account"
    VerifyEvery item in the test plan passes on a physical iPhone, or has an issue filed.
  5. Triage feedback with Codex

    Ask Codex to pull TestFlight crashes and screenshot feedback with the Expo MCP tools, group them, and propose fixes. Ship JavaScript-only fixes with an update and native fixes with a new build.

    prompt
    Use the Expo MCP tools to list TestFlight crashes and feedback from the last 48 hours, group duplicates, and propose a fix for each group.
    VerifyEach piece of feedback is either fixed or tracked as an issue.
  6. Add Android internal testing

    Create the app in Play Console, upload a Google Service Account key to Expo, then build and submit. The first submission goes to the internal testing track.

    bash
    eas credentials --platform android
    eas build --platform android --profile production
    eas submit --platform android
    VerifyA tester installs Tipjar from the Google Play internal testing opt-in link.
· Tick off the 6 step(s) above.
Vocabulary in this lesson

Plain-English definitions from the AI Coding Dictionary.