How to ship to the app stores

Shipping

How to avoid getting rejected

Almost every rejection I’ve seen or read about falls into one of these. None of them require a rewrite.

  1. It crashed on the reviewer’s device.

    The single most common cause. A crash on launch, on a device or OS version you never tested, ends the review immediately. Test on the oldest OS you claim to support.

  2. The login didn’t work.

    Expired demo credentials, an SMS code the reviewer can’t receive, a region check, an account locked by your own rate limiting. Log in with the How to pass Apple’s review yourself the morning you submit.

  3. A button did nothing.

    Reviewers press everything, including the things you know are stubs. An unimplemented settings row or a dead “coming soon” screen reads as an incomplete app.

  4. A link in the metadata was dead.

    Support URL, marketing URL and How to handle privacy and data deletion URL are all fetched. A 404 on any of them is an easy, embarrassing rejection -- and these rot over years of resubmissions.

  5. The How to rank in the app stores didn’t match the app.

    Screenshots showing features that don’t exist, or a UI two redesigns out of date, is treated as misleading rather than lazy. They must show the app as it currently is.

  6. There was placeholder content in it.

    Lorem ipsum, test data, an obviously fake leaderboard, a debug menu. Anything that reads as unfinished invites a closer look at everything else.

  7. The metadata called it a beta.

    The words beta, trial, demo and test in the name, subtitle or description signal an incomplete product. Keep that language in TestFlight, where it belongs.

  8. It asked for a permission it didn’t need.

    Requesting location for something that plainly doesn’t need location gets challenged. Every permission has to be justified by visible functionality.

  9. It handled user content without moderation.

    If users can post, share or message, Apple’s Guideline 1.2 expects filtering, a report mechanism, the ability to block abusive users, and a way to contact you. Shipping a social feature without those four is a guaranteed rejection.

  10. The rejection was a conversation, and nobody answered it.

    A rejection is a message in Resolution Center, not a verdict. Reply, ask exactly which guideline and which screen, and push back politely when it’s wrong -- reviewers do change their minds.