| 1 | # TestFlight checklist |
| 2 | |
| 3 | ## Product sanity |
| 4 | |
| 5 | - [ ] Discover screen feels complete on first launch |
| 6 | - [ ] Search returns sensible results for core dishes |
| 7 | - [ ] Saved items persist across app relaunch |
| 8 | - [ ] Ask flow works without turning into a generic chat experience |
| 9 | - [ ] Watch app launches and browses correctly |
| 10 | |
| 11 | ## Technical checks |
| 12 | |
| 13 | - [ ] iPhone target builds on simulator |
| 14 | - [ ] iPhone target runs on a real device |
| 15 | - [ ] macOS target builds on the release Xcode version |
| 16 | - [ ] tvOS target builds on the release Xcode version |
| 17 | - [ ] visionOS target builds on the release Xcode version |
| 18 | - [ ] Watch target builds on simulator |
| 19 | - [ ] Watch target runs with the paired iPhone app |
| 20 | - [ ] Private guide setup succeeds on a real device |
| 21 | - [ ] Memory behavior is acceptable after enabling the private guide |
| 22 | |
| 23 | ## Content checks |
| 24 | |
| 25 | - [ ] `python3 Scripts/validate_content.py` passes |
| 26 | - [ ] Featured entries have good summaries and taste notes |
| 27 | - [ ] Related entries do not point to missing items |
| 28 | - [ ] Watch content looks sensible when loaded from bundled JSON |
| 29 | |
| 30 | ## App Store / review checks |
| 31 | |
| 32 | - [ ] App name, subtitle, and description are up to date |
| 33 | - [ ] Review notes mention the watch companion app and optional private guide |
| 34 | - [ ] Privacy wording matches actual app behavior |
| 35 | - [ ] No placeholder images or fake loading states remain |
| 36 | |
| 37 | ## Cleanliness |
| 38 | |
| 39 | - [ ] No signing secrets or local credentials are in Git diff |
| 40 | - [ ] No local machine junk files are staged |
| 41 | - [ ] Bundle identifiers and App Group values are intentional for the release build |
| 42 | - [ ] macOS release signing uses the sandboxed entitlements file |
| 43 | - [ ] tvOS release signing uses the shared app identifier and App Group entitlement |
| 44 | - [ ] visionOS release signing uses the shared app identifier and App Group entitlement |