shipcheck

Rejected: the order of operations that gets you approved fastest

Updated September 7, 2026 · published by Baker Ventures LLC · sources cited inline

Read the citation, not the summary. Then decide which of three things this is.

A fix. The app or its configuration must change. Upload a new build.

A clarification. The app is fine and the reviewer could not see that: a demo account that did not work, a feature behind a paywall they could not reach, a permission whose purpose was not obvious. Reply in the Resolution Center. Do not upload a build to answer a question, because that spends a review cycle on something a message would have settled.

An appeal. The guideline was applied to something your app does not do, and you can show it. Appeal with evidence, not with disagreement.

The single most expensive mistake is fixing what you assumed the message meant. Rejection messages carry a guideline number and a short specific observation. The observation is the actual finding. The summary line is a category.

The second most expensive is fixing only the cited item. A reviewer stops at the first blocking problem. Fix that one, resubmit, and you frequently meet the second one on the next pass. Before resubmitting, run every check you have.

Step one: separate the citation from the story

A rejection typically contains a guideline number, a sentence or two of what the reviewer observed, and sometimes a screenshot.

Write down, literally:

Then ask whether the observation is true. Not whether the guideline is fair, and not whether other apps do the same thing. Whether what they described actually happens in your build. Reproduce it on a device, using the build you submitted, with a fresh install and a fresh account.

Half the time the observation is true and slightly different from what you assumed. That difference is the fix.

Step two: which of the three is it

Fix if reproducing it shows a real problem. Change it, then keep going: run the full pre-submission pass before you upload, because the reviewer stopped at the first thing. The first-submission checklist.

Clarify if the app behaves correctly and the reviewer could not get there. Common causes: a demo account that expired or was rate limited, a feature that needs server-side data the account does not have, a flow requiring a physical device capability, a paywall in front of the thing they were asked to evaluate. Reply with exact steps, working credentials, and a short screen recording. Review notes that work.

Appeal if the guideline does not apply to what your app does and you can demonstrate it. An appeal is a factual argument: here is the screen, here is the code path, here is the recording showing the behaviour they described does not occur. Appealing because you think the rule is wrong is a different activity and it does not work.

What to write in the Resolution Center

Short, specific, and structured so a busy person can act on it:

Thanks for the review.

What changed / what we found:
- [one line per item]

To reproduce the feature in question:
1. Sign in with [email protected] / [password]  (verified working today)
2. Tap Practice on the home screen
3. The subscription flow appears at step 3

The permission cited at 5.1.1 is used only for [specific feature], on
[specific screen]. Screen recording attached.

Three things make this work. Working credentials, verified today. Numbered steps to the exact screen. One line per item, so nothing has to be extracted from a paragraph.

What does not work: explaining your roadmap, arguing about other apps, apologising at length, or writing three paragraphs where four lines would do.

The moves that cost you a week

Uploading a build to answer a question. A message would have done it in hours.

Fixing one thing when you can see three. You will meet the other two, one review cycle each.

Changing the app to match your theory of the rejection rather than the observation. Reproduce it first.

Removing the feature instead of fixing it, when the fix was a purpose string or a disclosure. You lose the feature and often still fail on something adjacent.

Expedited review for a slipped launch date. It exists for genuinely urgent situations. Spending it here means not having it when a live bug is hurting users.

Resubmitting the same build with a longer explanation. If the observation was true, an explanation does not change it.

Google Play is a different shape

Play rejections and policy notices are typically more precise about the offending element and more automated in the first pass. The corresponding moves:

Before you resubmit

Run everything, not just the cited item:

# purpose strings with no matching feature
grep -rn 'UsageDescription' ios/*/Info.plist app.json app.config.js 2>/dev/null

# other-platform references in metadata and UI strings
grep -rniE 'android|google play|play store' fastlane/metadata src app 2>/dev/null | head

# account creation without deletion
grep -rniE 'delete (my )?account|deleteAccount' src app 2>/dev/null | head

Then check the four upload-time blockers, which are decided before a human ever sees the build: ITMS-90683, ITMS-91053, ITMS-91054/5/6, ITMS-91061.

A rejection is a cycle, not a verdict. The cost is time, and the way to spend less of it is to make each submission carry every fix you could have found. What a rejection actually costs.

shipcheck runs that whole pass from inside Claude Code, cites the guideline for each finding and names the file and line, so the resubmission carries more than the one thing you were told about. What it checks.

About shipcheck

shipcheck is a pre-submission checker from Baker Ventures LLC that runs inside Claude Code. It reads your React Native or Expo project, finds the things that get apps rejected or blocked at upload, cites the exact App Store Review Guideline or Google Play policy clause, and names the file and line to fix.

It exists because React Native and Expo apps fail for reasons that are invisible in the code you wrote: capability arriving through a dependency, purpose strings added by a config plugin, a privacy manifest missing from an SDK you never chose directly, and a generated ios/ directory that discards your edits on the next prebuild. shipcheck checks what the binary and the config actually declare, not what you intended. The rejection references on this site are free, need no account, and link to the primary Apple or Google document for every claim.

Questions and answers

What should I do first after an App Store rejection?

Read the guideline number and the reviewer's specific words, not the summary line. Most wasted cycles come from fixing what you assumed the message meant rather than what it said, and the two are often different.

Should I reply in the Resolution Center or upload a new build?

Reply first if the app is not actually broken and the reviewer needs information, a demo account or a clearer explanation. Upload a new build if something has to change in the app. Uploading a build to answer a question that a message would have answered costs you a full review cycle.

How long does a resubmission take?

Review times vary and Apple does not guarantee a figure. Plan around the cycle, not the number: the useful discipline is fixing everything you can find in one pass rather than sending one fix at a time and discovering the next problem afterwards.

When should I appeal instead of fixing?

When you believe the guideline was applied to something your app does not do, and you can show it. Appeal with evidence: a screen recording, the specific screen, the line in the code or config. Appealing because you disagree with the rule itself does not go anywhere.

Does getting rejected hurt my app or my developer account?

A rejection is a normal part of shipping and is not a penalty in itself. What causes real problems is repeatedly submitting the same non-compliant build, or metadata and behaviour that suggest an attempt to work around review.

Can I ask for an expedited review after a rejection?

Expedited review exists for genuinely urgent cases such as a critical bug affecting users or a time-sensitive event. Using it because a launch date slipped is how you spend credibility you may want later.

Cite this pageshipcheck. “Rejected: the order of operations that gets you approved fastest.” Baker Ventures LLC, September 7, 2026. https://shipcheck.bakerventuresstudio.com/guides/what-to-do-when-your-app-is-rejected/