Play Developer Reporting API v1beta1 (crashRateMetricSet / anrRateMetricSet DAILY queries in America/Los_Angeles, user-perceived 28-day rates, worst device models, errorIssues:search) and App Store Connect perfPowerMetrics, diagnostic signatures and TestFlight crash submissions. Thresholds 1.09 % crash / 0.47 % ANR / 8 % per device (developer.android.com/topic/performance/vitals): over = blocker, from 80 % = warn, in validate too (--no-health). Weekly Markdown report with week-over-week change in .storebound/health/. MCP: health (read-only), health_report.
48 lines
3.8 KiB
Markdown
48 lines
3.8 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` |
|
|
| user-perceived crash / ANR rate over 1.09 % / 0.47 % (live apps) | Play's bad behavior threshold is crossed | `store-health` skill: `storebound health`, fix the top issues, ship a higher versionCode |
|
|
| Apple metric rated poor / heavy diagnostic signature | hangs, launches, disk writes | `store-health` skill (Xcode Organizer for the stack) |
|
|
|
|
Vitals need the Play Developer Reporting API enabled for the service account; without it `validate` only notes
|
|
"vitals not readable". `--no-health` skips these checks.
|
|
|
|
## 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.
|