storebound/skills/store-preflight/SKILL.md

4.8 KiB

name description
store-preflight Run and read the storebound readiness checks before submitting a mobile app or 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, and the app profile: accounts need accounts.deletionUrl (+ inApp), a sign-in for review needs the demo account in .storebound/, subscriptions need app.termsUrl. 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.
  5. With in-app products or subscriptions: storebound catalog diff (read-only): both stores against the config, prices per region, offers. Exit 1 on missing or mismatched items.

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
subscription MISSING_METADATA / no review screenshot / no group localization subscription incomplete apple subscriptions (store-subscriptions)
Play subscription base plan DRAFT not active play subscriptions
accounts.deletionUrl not set / unreachable Play needs a delete-account page account-deletion skill
sign-in required but no demo account App Review cannot get in (2.1) review-access skill, apple review-details
no Terms of Use URL / description without a Terms link subscriptions need the EULA link (3.1.2) store-subscriptions skill
Play <lang>: phoneScreenshots 1/2 graphics missing shots render, play images
app-ads.txt lacks lines / 404 ad networks cannot verify you ads-mediation-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, App access with the demo account), in-app account deletion working, first subscriptions added to the version, agreements / tax / banking, countries for production on Play. (TestFlight groups and testers: storebound apple testflight status.) Tell the owner which are still open.