← All phases
7

Lesson 7 — App Store Rules

Maps to: SYSTEM.md Phase 7 (compliance-gate) Goal: understand Apple's review checklist well enough to run it on any app — including one you never actually submit.

Why this phase is never skippable

Per 04-workflow-course-overview.md Module 7, this is the one phase every student walks through even if their app is a class project that never touches the real App Store. The habit of checking compliance is the actual skill — not the specific checklist, which changes over time.

The 7 checks (from .claude/agents/review-gate.md)

This system's review-gate agent runs these checks before any real submission. Walk through each one against the Habit Tracker:

  1. Privacy manifest — declared in app.json's expo.ios.privacyManifests, not a hand-edited file. The Habit Tracker doesn't use any tracking APIs, so this is close to empty — but it must still be declared as empty, not omitted.
  2. Permission strings — every native feature that needs permission (camera, location, tracking, etc.) needs a plain-English explanation string in app.json's expo.ios.infoPlist. The Habit Tracker (no camera, no location) needs none of these — but if you added photo attachments to a habit later, this is where that string would go.
  3. App Tracking Transparency (ATT) — only relevant if expo-tracking-transparency is installed. The Habit Tracker doesn't track anything, so this check is trivially satisfied — nothing to declare.
  4. Native module / Expo Go mismatch — confirm you're testing the SAME thing you'd submit. If Lesson 6's optional monetization section installed AdMob/RevenueCat, you can no longer test in plain Expo Go — you need a dev-client build (Lesson 8) for the version that actually matches what you'd ship.
  5. Apple Developer Program active — required before any dev-client build with a native module (Lesson 6's cost-timing rule again — it shows up here as an explicit gate, not just a cost note).
  6. Account deletion reachable — only applies if your app has accounts. The Habit Tracker has none, so this is automatically satisfied. If your own app has a login, this becomes a real requirement: a working "delete my account" path, reachable from within the app.
  7. Content rating sanity check — flag anything (like an embedded video) that could trigger an unexpected age rating. The Habit Tracker has no embedded content, so nothing to flag.

Run the checklist yourself

Ask Claude Code:

Run the review-gate compliance checklist against HabitTracker and report PASS/FAIL on each of the 7 checks.

You should see something close to [compliance audit] PASS — 7/7 checks green for the plain Habit Tracker (no accounts, no tracking, no native modules unless you did Lesson 6's optional section).

Deliverable

Understand the checklist, even if your app isn't submitted for real — the exact deliverable 04-workflow-course-overview.md Module 7 asks for.

Apply to your own idea

Run the same review-gate prompt against your own app. If anything comes back FAIL, that's real, useful information — not a class exercise. Fix what you can (most fixes here are a missing permission string or a missing privacy-manifest declaration, both quick).

Prompts

Maps to: courses/react-native-course/lessons/07-app-store-rules.md (SYSTEM.md Phase 7) Run this: always, even for a demo-only app that won't be submitted for real — the checklist habit is the point.

Prompt 1 — Run the compliance checklist

Run the review-gate compliance checklist against {{APP_NAME}} and report PASS/FAIL on each of the 7 checks.

Optional shortcut

If you're running Claude Code from inside the React Native app builder system repo, /ios-preflight runs this same gate.

Full lesson

courses/react-native-course/lessons/07-app-store-rules.md