CommunityProductivity & Collaborationgithub.com

erberkk/review-readiness

Use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

What is review-readiness?

review-readiness is a Claude Code agent skill that use before submitting an app version or a first subscription for App Store or Google Play review, or after receiving a rejection. Runs a go/no-go checklist and writes a report - demo account that signs in with a password (no email one-time code), filled with data and premium unlocked; review notes; in-app purchases visible and purchasable (guideline 2.1(b)); iPad compatibility mode for iPhone-only apps; no placeholders or "coming soon"; metadata matching the app; live privacy URLs; crash-free cold start - and gives a playbook for replying in Resolution Center and deciding when to appeal.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/erberkk/mobile-app-launch-skills/tree/HEAD/skills/review-readiness

Installed? Explore more Productivity & Collaboration skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Review readiness

Purpose

Submit once and pass. Most rejections are not about the app's idea; they are a reviewer who could not sign in, could not buy, saw a placeholder, or found a contradiction between metadata and app.

Prerequisites

  • The exact build to submit is on TestFlight / a Play testing track.
  • subscriptions-and-payments Checkpoint passed (a real purchase unlocked premium on both platforms).
  • privacy-and-declarations completed; listing-and-aso validator clean; screenshots uploaded.

Think like a zero-knowledge reviewer

Assume the reviewer installs a clean build on a device you did not test (an iPhone-only app can be reviewed on an iPad in compatibility mode), with a fresh store account, and has limited time. They read your notes, try the sign-in, look for the purchase, and compare screenshots with the app. A single rejection can combine several layers: account state, backend behaviour and metadata.

Procedure

1. Demo account

  • Credentials go into App Store Connect › App Review Information ("Sign-in required") and Play › App content › App access. Never in the repo.
  • The account signs in with email + password. If your normal sign-in is an email one-time code or magic link, the reviewer cannot receive it. Add a password path for the review address only (server-side allow-list) or a fixed test code that only works for that address.
  • Filled with data: profile complete, a few days of history, every main screen populated. An empty account hides features and invites "we could not locate feature X".
  • Premium unlocked via a server-side manual entitlement (no expiry during review), so reviewers see paid features without buying.
  • Separately, make sure a new user can reach the paywall and buy with the reviewer's sandbox account (they will test the purchase too).
  • Do not change, delete or re-seed this account while a review is open.

2. Purchases (2.1(b) and 3.1.x)

  • First-version subscriptions are attached to the version in App Store Connect ("In-App Purchases and Subscriptions" section) and have a review screenshot and notes. In the newer App Store Connect UI there may be no such section on the version page: open the subscription group and each subscription and use Add for Review → Draft Submission; the version itself is added from its own page. The draft must list the version, the group and every subscription before you press Submit for Review.
  • Each subscription needs at least one display name + description localization and a review screenshot; without them "Add for Review" fails ("You must add at least one subscription localization / a Review Information screenshot").
  • The review screenshot must show the real paywall with real prices and the right store wording. If you render it from a widget/UI test, force the iOS platform (otherwise it says "Google Play") and feed realistic store prices; a "prices unavailable" state is not acceptable.
  • The App Store version string must equal the builds' marketing version (CFBundleShortVersionString). A version named 1.0 will not offer builds uploaded as 1.0.0; the Build section just says "Upload your builds" with no Add Build button. Rename the version to match.
  • On TestFlight with a fresh sandbox Apple Account (not linked to any of your app accounts): products load, purchase works, restore works.
  • Paywall error state shows retry, never a disabled "Coming soon".
  • If an IAP cannot be reached in the app (e.g. only for a region), explain why in the review notes.
  • Restore Purchases, Terms and Privacy links, manage-subscription link present.

3. Devices and builds

  • Cold start with no network, slow network, and airplane mode toggled: no crash, no infinite spinner.
  • iPad: even an iPhone-only app runs on iPad in compatibility mode and may be reviewed there. Run the full flow on an iPad simulator: sign-in (including Sign in with Apple), paywall scrolling, purchase sheet, keyboard over forms, permission prompts, rotation. If HealthKit or another API is unavailable there, show a polite message, not a crash.
  • Smallest supported phone and largest text size: no clipped buttons on the paywall or consent screens.
  • Release build, not debug: no debug banner, no test menus, analytics/crash reporting on in production configuration.
  • Walk the full account lifecycle on a physical device with the exact build you submit: install, sign up, main features, sandbox purchase, account deletion, and what the app shows after deletion.

4. Content and metadata

  • Search the app's strings and listings for: TODO, lorem, coming soon, beta, test, [PRICE], placeholder images. None may render.
  • iOS build and metadata contain no Android / Google Play wording; Play contains no Apple-only wording (2.3.10). Includes in-app strings such as "Cancel in App Store or Google Play" — pick the platform's text at runtime.
  • Every screenshot matches the current UI; every number in the description matches the app.
  • Privacy policy, terms, support and account-deletion URLs load without login, mention the app, and match the privacy forms.
  • Age rating consistent with Terms.

5. Backend

  • Backend is up and on a plan that will not hit limits during review (free tiers pausing or throttling = rejection).
  • No deploys of breaking changes during review. Backward-compatible API for the build in review.
  • Alerts are on (post-launch-ops) so you notice an outage during review.

6. Review notes

Fill in templates/review-notes.md. Keep it factual: where features are, how to sign in, how to test the purchase, how AI and health data are handled, where account deletion is.

Apple may respond with Guideline 2.1 "Information Needed" instead of reviewing. In one observed case it asked for the six items below; answering them up front in the first submission avoids a round trip:

  1. A screen recording from a physical device on the latest OS, starting at app launch and showing the typical flow: registration, login, account deletion, any user-generated content with reporting/blocking, and access to paid content. Record it with the submitted build; attach the file to the reply in the submission's Messages (or link it) and mention it in Notes. Never use the demo review account for the deletion part: create a fresh account in the recording.
  2. The app's purpose and target audience: the problem it solves and its value.
  3. Setup and access instructions for the main features, with demo credentials and menu paths.
  4. Every external service behind core features: auth/database, payments (StoreKit + any wrapper), AI providers, data sources (e.g. map APIs), email, health frameworks.
  5. Regional differences, or a statement that features are the same everywhere.
  6. For regulated areas or third-party protected content: documentation or a statement that none applies (e.g. "general wellness, not a medical device").

7. Go/no-go report

Fill in templates/go-no-go-report.md with evidence for each line (screenshot, build number, command output). Any No on a blocking line means no submission.

8. Submit (APPROVAL)

Ask the account holder for explicit approval with the report attached. On iOS choose manual release so approval does not publish immediately. On Play, production access (new personal accounts) needs the completed 14-day closed test and the production access application first.

After a rejection

See references/rejection-playbook.md: read the exact guideline, reproduce, fix the root cause (often more than one layer), reply in Resolution Center with specifics, resubmit; appeal only when the reviewer misread a fact you can prove.

Decision points needing human approval

Submitting, choosing release method, replying to a rejection (tone and commitments), filing an appeal, granting premium to the review account.

Verification

The go/no-go report is complete with evidence, and someone who did not build the feature walked the review notes on a clean device and succeeded.

Common pitfalls

  • Demo account depends on an email code the reviewer cannot read.
  • Demo account empty, frozen, or deleted by a cleanup job.
  • Products in "Missing Metadata" (no review screenshot), so they never load in review.
  • Removing a version from review ("Developer Rejected") also drops the subscriptions from the draft; re-add the group and each subscription before resubmitting, or the version goes alone.
  • Product-page assets are locked while the version is "Waiting for Review" (e.g. the newer Header asset). Add everything before submitting; otherwise you must remove the version from review, edit, and resubmit (you lose your place in the queue).
  • Apple's own "Add for Review" check passing does not mean optional assets are set: an empty Header asset is allowed, so decide about it before you submit.
  • A reviewer's fresh Apple Account collides with your restore/transfer rules and the purchase "fails".
  • Backend on a plan that pauses after inactivity or rate-limits the reviewer.
  • "Coming soon" anywhere in the build.
  • In-app text mentioning the other store.
  • Review notes that only explain the demo login (no recording, purpose, services or regions).

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

erberkk/privacy-and-declarations

Use when filling in or auditing App Store privacy and compliance answers and Google Play App content declarations - Apple App Privacy labels, Play Data safety (CSV import), Health apps declaration and Health Connect permissions, advertising ID, PrivacyInfo.xcprivacy and required-reason APIs, export compliance (ITSAppUsesNonExemptEncryption), age rating, account deletion (in-app, web URL, re-authentication), consent and disclosure for AI features, and rules for health data. Derives every answer from a code and SDK scan so the forms, the privacy policy and the in-app text say the same thing.

erberkk/social-publishing

Use when setting up scheduled publishing of an app's marketing content to Instagram (Reels, carousels, Stories), Threads, X and TikTok through official APIs - self-hosting Postiz in Docker behind a Cloudflare Tunnel, creating the Meta app with the newer use-case flow (business portfolio, Facebook Page linked to the Instagram professional account, Threads tester invite), X developer pay-per-use credits and spend cap, TikTok and YouTube audit limits, safe OAuth account selection when one browser holds personal and brand accounts, resource limits, and phasing a posting calendar around real launch events.

erberkk/store-screenshots

Use when producing or updating App Store and Google Play screenshots and the Play feature graphic - planning a connected "panorama" story across frames, capturing real in-app screens with the app's own test/screenshot harness at each device's logical size and pixel ratio, covering the full device matrix (iPhone 6.9", the required medium Dynamic Island slot, iPhone Duo outer and inner displays, iPad 13" if the app runs on iPad, Play phone, 7" and 10" tablets, 1024x500 feature graphic), checking for alpha channels and wrong sizes, and uploading in order via the App Store Connect and Google Play APIs.

erberkk/web-presence-and-seo

Use when building, checking or deploying the website that a mobile app needs for its store listings and launch - privacy policy, terms, support and web account-deletion pages that work signed-out; hosting apple-app-site-association and assetlinks.json; invite/referral pages (/i/<code>) that open the app or fall back to the store with the Play install referrer; a landing page with store badges and honest per-country prices filled at the edge; Open Graph images; technical SEO (hreflang, canonical, sitemap, robots.txt, JSON-LD); Search Console, Bing Webmaster and IndexNow; AI crawler policy and llms.txt; and a Cloudflare Worker deploy with a production approval gate. Includes a site checker and an IndexNow ping script.

Related Skills