Beta groups from apple.testflight.groups (created when missing, never changed), testers from a CSV in .storebound/ (masked in logs, confirmation before Apple emails invitations, --remove / --invite), What to Test per locale from the App Store listing (whatToTest or whatsNew), Test Information and Beta App Review details, builds by exact number to groups, Beta App Review submission behind --submit-review and a confirmation. Pure planners in cli/lib/testflight.ts, shared CSV / table / JSON:API helpers. MCP: apple_testflight_status, _groups, _what_to_test, _info, _distribute (internal groups only). Skill testflight.
43 lines
3.3 KiB
Markdown
43 lines
3.3 KiB
Markdown
---
|
|
name: store-preflight
|
|
description: Run and read the storebound readiness checks before submitting a mobile game - `storebound check` (offline config, copy limits, files), `storebound check --aso`, `storebound validate` (read-only App Store Connect + Google Play report with ordered blockers) and `storebound privacy-manifest`. Use before every submission, when the user asks "is my app ready to submit", or after changing listings, builds, IAPs or SDKs.
|
|
---
|
|
|
|
# Store preflight
|
|
|
|
CLI: `storebound` (or the MCP tools `check`, `check_aso`, `validate`, `privacy_manifest`). All four are read-only on
|
|
the stores; run them freely.
|
|
|
|
## Order
|
|
1. `storebound check`: config, both listing files (limits are checked locally: title 30, subtitle 30, keywords 100
|
|
bytes, Play short 80, notes 500 ...), screenshot copy, Data safety answers, IAP texts (Apple description 45),
|
|
files the config points at, `.storebound/` gitignored. Fix everything it lists; it exits 1 on problems.
|
|
2. `storebound check --aso`: keyword field use, repeats, stuffing (`aso-basics`). Errors exit 1, warnings are advice.
|
|
3. `storebound privacy-manifest --ios ios/App` (iOS): app manifest, required-reason APIs, SDKs without manifests
|
|
(`privacy-manifest` skill).
|
|
4. `storebound validate` (or `--apple` / `--play`): talks to both APIs read-only and prints findings in fix order.
|
|
Exit 1 while there is a blocker. `--json` for scripts.
|
|
|
|
## Reading `validate`
|
|
Each line: number, level (`BLOCKER`, `warn`, `ok`), store, message, and a `fix:` with the command or skill.
|
|
|
|
| finding | means | fix |
|
|
|---|---|---|
|
|
| no build attached / build PROCESSING | the version has no usable binary | wait for VALID, then `apple listing --version x --build N` (explicit number) |
|
|
| export compliance not answered | the build has no encryption answer | `export-compliance` skill |
|
|
| `<locale>`: missing description / keywords / subtitle | text not pushed for a locale | edit `store/appstore.md`, `apple listing` |
|
|
| no APP_IPHONE_67 screenshots | 6.9" set missing (required) | `apple screenshots`; iPad apps add the 13" type to `apple.screenshotTypes` |
|
|
| review contact missing | App Review information incomplete | `apple review-details` |
|
|
| age rating unanswered | new questions Apple added | `apple appinfo` |
|
|
| no app price schedule / availability | pricing never set | `apple appinfo`; if the API refuses the first availability record, set it once in App Store Connect > Pricing and Availability |
|
|
| IAP MISSING_METADATA / no review screenshot | product incomplete | `apple iap`, `apple iap-review` |
|
|
| privacy policy HTTP 404 / unreachable | URL broken | `privacy-policy` skill |
|
|
| Play `<lang>`: phoneScreenshots 1/2 | graphics missing | `shots render`, `play images` |
|
|
| app-ads.txt lacks lines / 404 | ad networks cannot verify you | `ads-levelplay-checks`; the file lives at the root of the developer website |
|
|
| no release on any track | nothing uploaded | `play release <aab>` |
|
|
| product purchase option DRAFT | not active | `play products` |
|
|
|
|
## What validate cannot see (UI-only, check by hand)
|
|
App Privacy labels published, Play App content declarations (ads, target audience, content rating, advertising ID),
|
|
agreements / tax / banking, countries for production on Play. (TestFlight groups and testers: `storebound apple
|
|
testflight status`.) Tell the owner which are still open.
|