Skip to main content

Getting through review

What App Review and Play review check, the rejections we actually got, and how reviewers reach a working app without touching production data. Read it before every submission.

How it works​

Reviewers get the same binary as everyone. The only way to point them at a different backend is server-side routing on the app version. We run a separate review backend with an empty database, so reviewers never see real users' data and a review account can be reset freely.

The rejections we got​

Our first iOS app went through eight rounds over about six weeks. Grouped by guideline, as of the Apple App Review Guidelines in force in 2026:

GuidelineWhat triggered itWhat fixed it
1.2 User-generated contentA community feature without enough moderationReport (including child safety), block, mute, filtering, and a 24-hour action promise. See Moderation
2.1(a) CompletenessThe reviewer hit an error screen. iOS calls to one API returned 401 because the server did not know the iOS client typeTest the submitted build end to end on the review backend
2.1(b) Business modelWebsite pricing and paid-subscription terms were live while the app sold nothingTake prices down until purchases exist. See Payments
5.1.1(i) and 5.1.2(i) Data sharing with AIText and voice went to a third-party AI without an in-app explanation and permission. A privacy policy alone is not enoughA just-in-time consent sheet before every AI surface, naming the provider, denied by default, gating the network call. See AI processing
5.1.1 follow-upThe voice and microphone path was not gated, and the disclosure was shorter than the policyGate every AI entry point, including dictation. Disclosure matches the policy
PermissionsVoice sign-up never asked for the microphoneAsk at the moment of use; recover from "denied"
Support URLA 404 support page draws a repeat rejectionTest every URL filed in the store

Play rejected a listing for ranking claims in screenshots, and required child safety standards and an App access demo account. See Google Play.

How to build it​

The demo account​

  • A dedicated account on the review backend, documented in the review notes with exact steps.
  • It must work for sign-up and sign-in. A reviewer may try either.
  • If it needs a one-time code, the review backend accepts a fixed code for that account only. That code is never valid in production.
  • Never remove reviewer access during a review. Pulling it mid-review is a guaranteed rejection.

Release-candidate routing​

  • A remote config value holds the exact version under review per platform, for example release_candidate_version_ios = 1.4.0.
  • The discovery service sends that exact version to the review backend, everything else to production.
  • After approval: hold the release, deploy the backend, switch routing off, check that the version now resolves to production, then release. See Release day.

Rules​

Rule

Never commit a reviewer password or one-time code, and never enable a fixed code in production. Our fixed review code was committed to a repository and live in production, so anyone who read the repository could sign in as that account.

Rule

The release-candidate version must be the exact version string of the submitted build. A leftover test value sends the reviewer to production.

Rule

Before each submission, open every URL filed in either store: privacy, terms, support, deletion. A moved page is a rejection.

Mistakes we made​

  • The review account wiped itself on sign-in, then refused sign-in. Reset-on-sign-up also ran on login, so a reviewer following the notes hit "no account found". Reset only on sign-up.
  • The app refused the review email at sign-up as "already registered". Exempt the review account from that pre-check.
  • The release-candidate value was left at a test version, so a reviewer on the real build would have reached production.
  • The consent toggle was added to the first-run screen instead of before each AI feature. That is the weaker reading of Apple's rule and was rejected. Put the disclosure in front of the feature.
  • The age rating, the terms and the privacy policy disagreed across the two stores. Agree the age once and update every place together.

Checklist​

  • Demo account works for sign-up and sign-in on the review backend.
  • Release-candidate version equals the submitted build's version.
  • No fixed code or reviewer secret in any repository or in production.
  • Every URL filed in the stores loads.
  • UGC has report, block, moderation and a response promise.
  • Any AI feature has a just-in-time disclosure and consent.
  • Nothing in the app or website prices something the app cannot sell.
  • Age rating matches terms, policy and the other store.
  • Review notes explain AI, moderation, and anything behind sign-in.