Ümameats

App Store prod deployment

ProductApp Store · PlayDefaults 2026-09-10

App Store prod deployment

Apple Guideline 2.1 (Information Needed) judged against real customer + driver features. Statuses persist in DynamoDB (same table as Marketing OS). Stop gates mean do not submit yet.

Checking session…

No video

Physical recordings never made for customer or driver

25 open

Grid cells still to do / partial / blocked across both apps

4589+

Customer ASC binary; driver 2746+

3 N/A

Skip: driver payments, subscriptions, regulated docs

Guideline 2.1 — applies vs our features

Apple’s seven asks plus recording sub-items. Click status pills when logged in to update progress.

1. Physical-device screen recording (launch → core flow, latest OS)

Customer
AppliesTo do

Required for every submission with this rejection.

Do: Control Center record on TestFlight 89+. Save UMAMEATS-customer-2.1-YYYYMMDD.mp4 off git. Attach in Resolution Center.

Driver
AppliesTo do

Required for every submission with this rejection.

Do: Control Center record on TestFlight 46+. Save UMAMEATS-driver-2.1-YYYYMMDD.mp4 off git. Attach in Resolution Center.

1a. Recording must include: registration, login, account deletion

Customer
AppliesTo do

App has Sign Up, Sign In, Delete Account (Account → Delete Account, two-step).

Do: Throwaway signup → full delete. Then demo login. On demo: open Delete UI and cancel — never delete appreview@.

Driver
AppliesTo do

App has Sign In + Delete Account. Signup exists but throwaway delete is optional for driver 2.1.

Do: Must show demo login. Show Delete Account UI and cancel (do not delete driverreview@). Optional: throwaway signup/delete.

1b. Recording must include: paid content / purchase / subscription flows

Customer
AppliesTo do

Stripe PaymentSheet + Apple Pay (real CAD). No IAP. No auto-renewable subscriptions.

Do: Show Cart → Checkout → PaymentSheet. Prefer path A: small real charge. Path B: stop at sheet (weaker).

Driver
Does not applyN/A

No in-app payment, no IAP, no subscriptions. Earnings/payout are out-of-app.

Do: Skip purchase flows. State “No IAP / no payments in this binary” in Notes.

1c. Recording must include: UGC + reporting / blocking

Customer
PartialBlocked

UGC: order chat + place reviews. Report exists in source (chat → legal@; Uma Report; Google → Maps). No user-block UI. Report may be missing from attached TF 89.

Do: If attached binary has Report: show flag in chat/reviews. If not: do not claim Report; ship new build first or say chat is 1:1 only.

Driver
PartialBlocked

UGC: in-trip chat with customer. Report in source → legal@. No block UI. May be missing from attached TF 46.

Do: Same rule: only show Report if in attached binary. Otherwise do not claim it.

1d. Recording must include: sensitive permission prompts (location, contacts, camera, ATT)

Customer
PartialTo do

Location When In Use (yes). Camera/Photos for profile photo (yes). Contacts: no. ATT: no.

Do: Allow location when prompted (or note already granted). Show camera if editing profile. Skip ATT/Contacts — must not appear.

Driver
PartialTo do

Location When In Use + Always (active delivery). Camera for ID + POD. Contacts: no. ATT: no.

Do: Show location prompts (While Using → Always). Show POD camera. Skip ATT/Contacts — must not appear.

2. Device models + OS versions tested

Customer
AppliesTo do

Apple requires a real list — do not invent.

Do: Fill DEVICES line in Notes after recording on that phone.

Driver
AppliesTo do

Apple requires a real list — do not invent.

Do: Fill DEVICES line in Notes after recording on that phone.

3. Functions, target audience, problem/value

Customer
AppliesPartial

Diners in Toronto — browse, customize, pay, track.

Do: Covered by opening paragraph in git notes.txt (push to ASC).

Driver
AppliesPartial

Couriers for UMAMEATS — go online, accept, navigate, POD, earnings.

Do: Covered by opening paragraph in git notes.txt (push to ASC).

4. Setup instructions + login credentials / sample files

Customer
AppliesPartial

Account-based app. Demo: appreview@ + password in ASC App Review Information.

Do: Notes WHAT TO TRY + ASC User/Password. No sample files. Do not put password in Notes.

Driver
AppliesPartial

Account-based app. Demo: driverreview@ + password in ASC. (storeview@ is web-only — never as iOS login.)

Do: Notes WHAT TO TRY + ASC User/Password. Seed READY offer before review.

5. External services / platforms list

Customer
AppliesPartial

api.umameats.com, AWS, Stripe, Apple Pay, APNs, Maps, Sign in with Apple, Google Sign-In, Sentry. No AI in this binary.

Do: Notes SERVICES section (in git). Push to ASC.

Driver
AppliesPartial

api.umameats.com, AWS, APNs, Maps, Sentry. No Stripe in-app. No AI.

Do: Notes SERVICES section (in git). Push to ASC.

6. Regional differences (or confirm consistent)

Customer
AppliesPartial

Same app features in listed territories; delivery catalog is Toronto-only (empty list outside zone).

Do: Notes REGIONS (in git). Confirm Canada in ASC Pricing & Availability.

Driver
AppliesPartial

Same features in listed territories; jobs only in Toronto operating zone.

Do: Notes REGIONS (in git). Confirm Canada in ASC Pricing & Availability.

7. Highly regulated industry / protected third-party material

Customer
Does not applyPartial

Food-delivery marketplace under our restaurant partnerships — not banking/health/gambling. No protected media libraries.

Do: Still answer in Notes REGULATED (short N/A). No extra credentials docs needed.

Driver
Does not applyPartial

Courier side of same marketplace. Not a regulated vertical Apple means here.

Do: Notes REGULATED (short N/A). No extra docs.

Common rejection tips — applies?

From Apple’s “How to Prevent Common Issues” block on the same rejection notice.

2.1 Bugs/crashes — test on physical devices / TestFlight

Customer
AppliesTo do

Review is on physical devices.

Do: Smoke TestFlight 89+ on iPhone before recording; fix crashes first.

Driver
AppliesTo do

Plus wipe-check: Go Online / Accept must not dump to Sign In.

Do: Smoke TestFlight 46+ with wipe checks before recording.

2.1 Accessing the app — demo credentials for each account type

Customer
AppliesDone

One iOS account type (diner). Demo on ASC.

Do: Keep appreview@ working; re-seed orders. Do not delete.

Driver
AppliesDone

One iOS account type (courier). Restaurant is web-only — do not list storeview@ here.

Do: Keep driverreview@ working; re-seed READY offer. Do not delete.

2.3.3 Screenshots — real app UI, not splash/login/title art

Customer
AppliesTo do

ASC has 0 screenshot sets — hard submit blocker.

Do: Capture Home/menu/cart/orders/account from TF 89+. Upload APP_IPHONE_67.

Driver
AppliesTo do

ASC has 4 shots — treat as mockups until replaced.

Do: Replace with Online/nav/active/account from TF 46+.

3.1.2 Subscription information (auto-renewable)

Customer
Does not applyN/A

No auto-renewable subscriptions. Checkout is Stripe/Apple Pay per order.

Do: Nothing to add for 3.1.2. Still say No IAP in Notes.

Driver
Does not applyN/A

No subscriptions / IAP in this binary.

Do: Nothing to add for 3.1.2.

5.1.1 Purpose strings (usage descriptions)

Customer
AppliesDecide

Location + Camera/Photos used. Mic + Face ID are unused Expo leftovers. Camera copy historically mismatched QR vs profile photo.

Do: Notes call out leftovers. Prefer strip in new native build. Do not OTA-fix plist.

Driver
AppliesDecide

Location Always + Camera for ID/POD are real. Mic + Face ID leftovers.

Do: Notes explain Always = active delivery only. Prefer strip leftovers in new build.

App tracks

UMAMEATS (Customer)

Decide
Bundle
com.umameats.customer
ASC state
1.0.0 DEVELOPER_REJECTED
Attached now
build 45
Use this binary
TestFlight 89+
Physical recording
Never recorded — must do
Screenshots
0 sets (blocker)
Notes on ASC
Git has 7-point notes; push/paste to ASC + fill DEVICES
Demo email
appreview@umameats.com

UMAMEATS Driver

Blocked
Bundle
com.umameats.driver
ASC state
1.0.0 REJECTED / UNRESOLVED_ISSUES
Attached now
build 27
Use this binary
TestFlight 46+
Physical recording
Never recorded — must do
Screenshots
4 shots (likely mockups — replace)
Notes on ASC
Git has 7-point notes; push/paste to ASC + fill DEVICES
Demo email
driverreview@umameats.com

Review contact on both apps: Jawad Arif · jawadarifpro@gmail.com · +1 647 855 7450. Privacy: umameats.com/privacy. Demo zone: 250 Front St W, Toronto, ON M5V 3G5.

Step-by-step phases

0

Phase 0 · ios

Read the grid · what not to do

  1. 1

    Judge Apple’s 7 asks + recording sub-items against features

    Done

    Use the Applies / Status grid on this page. Skip N/A rows (driver payments, subscriptions, regulated docs). Do every Applies=yes row that is still To do.

  2. 2

    Do not Submit / Resolution Center yet

    Stop gate

    Prep only until you decide to send: attach build, screenshots, notes paste. Do not run npm run asc:submit. Do not reply until both recordings exist.

  3. 3

    Play production is a separate track

    AndroidTo do

    Do not treat the 2.1 playbook as a Play launch. Ship Play after explicit OK (and after DUNS / org setup if required).

1

Phase 1 · ios

Decisions before you send

  1. 1

    Customer purchase demo (A or B)

    Decide

    A (stronger): complete a small real CAD charge on the demo account so reviewers see PaymentSheet → success. B (weaker): stop at PaymentSheet and rely on seeded Orders. Live Stripe charges real cards; test cards fail. Applies only to customer (1b).

  2. 2

    UGC Report binary (1c)

    Decide

    Report UI is in source (chat → legal@). Do not claim it in notes unless that control is in the attached TestFlight binary. Prefer: ship a new build with Report, then send. No block UI in either app.

  3. 3

    Canada territory on ASC (supports #6)

    To do

    Pricing and Availability must include Canada. Toronto zone is app logic; storefront country is ASC.

  4. 4

    Mic / Face ID purpose strings (5.1.1)

    Decide

    Unused Expo leftovers in Info.plist. Either tell Apple they are not prompted (notes already say this), or strip in a new native build (OTA cannot fix plist).

2

Phase 2 · ios

Customer iOS prep (no send)

  1. 1

    Re-seed demo orders

    CustomerTo do

    From umameats-customer-mobile: node scripts/seed-review-account.js. Writes two DELIVERED orders for the demo customer. Do not delete appreview@.

  2. 2

    Install TestFlight 89+

    CustomerTo do

    Physical iPhone → TestFlight → UMAMEATS → build 89 or later (not attached build 45). Smoke login; Home must list Toronto restaurants for 250 Front St W.

  3. 3

    Record Guideline 2.1 video (never done)

    CustomerBlocked

    Physical device only. Shot list: cold launch → throwaway signup + delete → demo login → location → Home → menu → cart → PaymentSheet → Orders → Delete UI cancel. Include Report only if in this binary. Save UMAMEATS-customer-2.1-YYYYMMDD.mp4 — keep off git.

  4. 4

    Fill device + iOS tested (#2)

    CustomerTo do

    After recording, write exact model + iOS into Notes DEVICES line and the Resolution Center reply. Do not invent.

  5. 5

    Real-app screenshots (2.3.3) — 0 on ASC

    CustomerBlocked

    Capture Home / menu / customize / orders / account from the running binary (not splash, not marketing mockups). Upload via ASC UI or npm run screenshots:upload.

  6. 6

    Push 7-point App Review notes to ASC (#3–7)

    CustomerTo do

    Git notes.txt already has SERVICES / REGIONS / REGULATED / no-IAP. Fill DEVICES, then ASC_DEMO_PASSWORD=… npm run asc:review-details (or paste). Password stays in App Review Information fields only.

  7. 7

    Attach build 89+ on version 1.0.0

    CustomerTo do

    ASC Build picker — select TestFlight 89+. Save. This does not submit. Do not run asc:submit yet.

  8. 8

    npm run asc:audit

    CustomerTo do

    Read-only blockers list. Green audit ≠ permission to submit.

3

Phase 3 · ios

Driver iOS prep (no send)

  1. 1

    Re-seed demo driver + READY offer

    DriverTo do

    From umameats-driver-mobile: npm run seed:review-driver. Re-run if smoke already accepted the offer. Do not delete driverreview@.

  2. 2

    Install TestFlight 46+ + wipe checks

    DriverTo do

    Go Online and Accept must not dump to Sign In. Force-quit → still logged in. Camera for POD; Location Always for active delivery only.

  3. 3

    Record Guideline 2.1 video (never done)

    DriverBlocked

    Physical device only. Login → Online → READY offer → Accept → navigation → status → POD camera → Earnings optional → Delete UI cancel. No purchase flow (N/A). Save UMAMEATS-driver-2.1-YYYYMMDD.mp4 off git.

  4. 4

    Fill device + iOS tested (#2)

    DriverTo do

    After recording, write exact model + iOS into Notes DEVICES line and Resolution Center reply.

  5. 5

    Replace mockup screenshots (2.3.3)

    DriverTo do

    Four real shots: Online+offer, navigation, active, account. Delete old mockups on ASC. Size 1320×2868 or 1290×2796.

  6. 6

    Push 7-point driver notes to ASC (#3–7)

    DriverTo do

    Git notes.txt has SERVICES / REGIONS / REGULATED / no payments. Fill DEVICES, then asc:review-details (or paste).

  7. 7

    Attach build 46+ on version 1.0.0

    DriverTo do

    Attaching alone does NOT restart an UNRESOLVED_ISSUES review. You still need Resolution Center reply + resubmit when ready.

4

Phase 4 · ios

Send to Apple (only when ready)

  1. 1

    Customer: Resolution Center + Submit

    CustomerStop gate

    Attach the .mp4, paste the short 2.1 reply from APP_STORE_REVIEW_CUSTOMER.md, confirm build 89+, then Submit (ASC or npm run asc:submit -- --build-number 89).

  2. 2

    Driver: Reply AND resubmit

    DriverStop gate

    UNRESOLVED_ISSUES requires both: Resolution Center reply (with .mp4) and a resubmit. Selecting build 46 alone will not resume review.

5

Phase 5 · android

Google Play — first successful production

  1. 1

    One-time Play + signing setup

    AndroidTo do

    Play Console app (com.umameats.customer / driver), Play App Signing, service account → Users and permissions (Release manager), google-services.json + FCM on EAS, Android OAuth SHA-1 (upload + App signing cert).

  2. 2

    First Internal testing AAB

    AndroidTo do

    npm run build:android:internal or ./scripts/play/first-internal-build.sh. Confirm release in Play Console → Internal testing. Smoke with the same demo accounts as iOS.

  3. 3

    Store listing + Data safety + IARC

    AndroidTo do

    Assets under play/listing/en-CA/. Feature graphic 1024×500, phone screenshots 1080×1920. Complete Data safety, content rating, target audience before production review.

  4. 4

    Production draft → review → rollout

    AndroidTo do

    git tag v* → release-android.yml cuts production draft. Promote / Submit - Play Store with as_draft:false when ready. Staged rollout after approval.

  5. 5

    Org / DUNS note

    AndroidDecide

    Play org + Apple org may need DUNS. Until then: EAS preview APK for Android QA, or Play individual ($25) then transfer. Do not block iOS 2.1 on Play.

Hard rules

  • Never delete appreview@ or driverreview@ — shared App Review logins.
  • Never give storeview@ as an iOS login (restaurant dashboard is web-only).
  • Never upload splash / login-only / Python mockup screenshots as the store set.
  • Never claim Report/block in notes unless that UI is in the attached binary (no block UI exists).
  • Never keep customer notes that say “do not complete a purchase” if you want 2.1 to see checkout.
  • Never OTA-fix Info.plist leftovers — needs a native rebuild.
  • Driver UNRESOLVED_ISSUES: attach alone ≠ resume; reply + resubmit required.
  • Physical recordings have never been made for either app — both are still To do.

Safe prep commands

  • npm run asc:audit

    Read-only ASC blockers

  • npm run asc:review-details

    Push notes + demo + contact (no submit)

  • npm run screenshots:upload

    Replace APP_IPHONE_67 set

  • node scripts/seed-review-account.js

    Customer seeded orders

  • npm run seed:review-driver

    Driver + READY offer

Danger — submits review

  • npm run asc:submit

    Attaches a VALID build AND submits for review — only when you mean it

Source playbooks (repo)

Defaults live in code; live progress is Dynamo. Shot lists and Resolution Center copy-paste stay in the UmaMeats mobile docs:

  • Guideline 2.1 masterUmaMeats/mobile/APP_STORE_REVIEW_2.1.md
  • Customer 2.1 checklistUmaMeats/mobile/APP_STORE_REVIEW_CUSTOMER.md
  • Driver 2.1 checklistUmaMeats/mobile/APP_STORE_REVIEW_DRIVER.md
  • iOS / TestFlight runbookUmaMeats/mobile/TESTFLIGHT_COOKBOOK.md
  • Android / Play runbookUmaMeats/mobile/PLAY_STORE_COOKBOOK.md
  • Apple org migrationUmaMeats/mobile/APPLE_ORG_MIGRATION.md
  • Toronto E2E demo seedUmaMeats/docs/E2E_DEMO_TORONTO.md