[object Object]

← back to Nineoh Guide

chore(mobile): TK-12 App Store/TestFlight prep — prefill eas.json submit (appleId+teamId), add production runbook

c0e6ddb8c1ed1f5bb4bcc6059c3abe2f0a97f54b · 2026-07-27 16:19:28 -0700 · Steve

Config-only + docs. Production build/submit gated → approval memo in yolo-queue.
RN 0.76.5 kept (known-good); 0.76.9 alignment recommended as a validated pre-build step.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Files touched

Diff

commit c0e6ddb8c1ed1f5bb4bcc6059c3abe2f0a97f54b
Author: Steve <steve@designerwallcoverings.com>
Date:   Mon Jul 27 16:19:28 2026 -0700

    chore(mobile): TK-12 App Store/TestFlight prep — prefill eas.json submit (appleId+teamId), add production runbook
    
    Config-only + docs. Production build/submit gated → approval memo in yolo-queue.
    RN 0.76.5 kept (known-good); 0.76.9 alignment recommended as a validated pre-build step.
    
    Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---
 apps/mobile/EAS-BUILD-NOTES.md | 55 ++++++++++++++++++++++++++++++++++++++++++
 apps/mobile/eas.json           |  4 +--
 2 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/apps/mobile/EAS-BUILD-NOTES.md b/apps/mobile/EAS-BUILD-NOTES.md
index a3ed6d5..1b91250 100644
--- a/apps/mobile/EAS-BUILD-NOTES.md
+++ b/apps/mobile/EAS-BUILD-NOTES.md
@@ -50,3 +50,58 @@ NOT enough — it has to be *selected into the profile* when the build runs.
 - Interactive EAS commands need a real TTY — they fail under the Claude `!` prefix and
   under the Bash tool ("stdin is not readable"). Run them in a plain terminal tab.
 - Registered devices: Mac `00006032-000C692614DA401C`, iPhone `00008150-001039662E3B401C`.
+
+## App Store / TestFlight (production) path — TK-12
+
+Ad-hoc (above) and store are DIFFERENT credential worlds. Store needs a **Distribution
+Certificate** + an **App Store provisioning profile** (not the ad-hoc profile), and an
+**App Store Connect app record** (`ascAppId`). `eas.json` `production` profile is ready
+(`distribution: store`, `autoIncrement: true`); `submit.production.ios` is pre-filled with
+`appleId: steveabramsdesigns@gmail.com` + `appleTeamId: 3VAV3KMNZK`; only `ascAppId` is
+still `SET-AT-SUBMIT` (it doesn't exist until the ASC app record is made).
+
+### The one-time unlock: App Store Connect API key (recommended — makes build+submit headless)
+Interactive Apple credential setup fails under the Bash/`!` tool (no TTY). An **ASC API key**
+removes every prompt for BOTH build and submit:
+1. App Store Connect → **Users and Access → Integrations → App Store Connect API** →
+   generate a **Team key** (role: App Manager or Admin). Download the `.p8` **once**
+   (non-recoverable), note the **Key ID** + **Issuer ID**.
+2. Route it via the `secrets` skill; reference in `eas.json` (or `credentials.json`) so
+   `eas build`/`eas submit --non-interactive` run with zero prompts.
+   ⚠️ Interactive alt (no key): run `npx eas-cli build -p ios --profile production` in a
+   REAL terminal, Apple login + 2FA once. This **consumes 1 of only 2** Individual-account
+   Distribution-cert slots — Steve's call.
+
+### Pre-build hygiene (recommended, do before the FIRST production build)
+`expo-doctor` flags `react-native 0.76.5 → 0.76.9` (Expo SDK 52's expected patch). The
+preview cloud builds all succeeded on **0.76.5**, so it is NOT a hard blocker — but align
+it on the first production build and confirm the build passes before trusting it:
+```
+cd ~/Projects/nineoh-guide/apps/mobile
+npx expo install react-native@0.76.9      # then the production build below VALIDATES it
+```
+(Left at 0.76.5 in git deliberately — an unvalidated bump shouldn't ride a config-only prep commit.)
+
+### Build (production, store-signed .ipa — one EAS build slot)
+```
+cd ~/Projects/nineoh-guide/apps/mobile
+npx eas-cli build -p ios --profile production          # add --non-interactive once ASC key is set
+npx eas-cli build:view <id>                            # poll until finished
+```
+
+### Submit → TestFlight  ⛔ GATED (App Store submit — Steve-approved only)
+```
+npx eas-cli submit -p ios --profile production --latest
+```
+Uploads to App Store Connect → TestFlight after Apple processing (~5–30 min).
+⚠️ **`ascAppId` is still the non-numeric sentinel `SET-AT-SUBMIT`.** Before running submit,
+EITHER **delete the `ascAppId` line** from `eas.json` (then `eas submit` auto-detects the app
+by bundle id, or creates the ASC app record on first run) **OR** paste the real numeric id.
+Do NOT run `eas submit` with the sentinel string in place — behavior is EAS-CLI-version-
+dependent and errors confusingly. After the first submit, capture the numeric `ascAppId` it
+prints back into `eas.json` for subsequent runs.
+
+### ⚠️ App Review risk to surface
+"Unofficial 90210 Guide" references a trademarked TV property. Guideline 4.1 (Copycats) /
+5.2 (Intellectual Property) — unofficial third-party-IP guide apps are a known rejection
+risk. Worth a disclaimer + original-content framing before submit.
diff --git a/apps/mobile/eas.json b/apps/mobile/eas.json
index 5047700..5ac2c7b 100644
--- a/apps/mobile/eas.json
+++ b/apps/mobile/eas.json
@@ -25,9 +25,9 @@
   "submit": {
     "production": {
       "ios": {
-        "appleId": "SET-AT-SUBMIT",
+        "appleId": "steveabramsdesigns@gmail.com",
         "ascAppId": "SET-AT-SUBMIT",
-        "appleTeamId": "SET-AT-SUBMIT"
+        "appleTeamId": "3VAV3KMNZK"
       }
     }
   }

← 97a30ae chore: lint pass, cast-route null-coalesce fix, seed DB guar  ·  back to Nineoh Guide  ·  TK-12: turnkey finish-tk12.sh — one command post-ASC-key dri 3b23bfc →