shipcheck
APP STORE GUIDELINE 2.1

Guideline 2.1: the demo account rejection

If your app has a login and the reviewer can't get past it, App Review rejects the whole submission without ever seeing what you built.

2.1 App Completeness — App Store Review Guidelines

2.1 App Completeness

Why this is the single most common React Native/Expo rejection

It has nothing to do with your code. It's a metadata field left blank. App Review runs on a schedule you don't control, and the credentials you type into App Store Connect's Review Notes have to work at that moment -- a demo account whose backend seed data expired, whose password rotated, or whose account got deleted in a cleanup script fails the same way a missing account does: the reviewer hits a login wall and rejects on sight, because 2.1 says explicitly that the back-end service has to be on.

The two ways to satisfy this, and when each applies

A working demo account is the default path -- App Store Connect's Review Notes field is where the username and password go, and Apple checks it before opening the app. The guideline also allows a built-in demo mode in place of an account, but only "with prior approval by Apple" -- that's not a fallback you can decide to use unilaterally in Review Notes; it requires actually requesting it, and the demo mode still has to exhibit the app's full functionality, not a stripped-down preview.

The fix

Before every submission, not just the first one

Verify the demo account can log in right now, today -- not that it worked when you created it. Seed data expires, test accounts get swept by cleanup jobs, and passwords get rotated by security policy; any of those turns a previously-approved app into a 2.1 rejection on the next update with zero code changes.

Put it where Apple actually looks

The credentials belong in App Store Connect's Review Notes for that specific build, not just in your own `shipcheck.metadata.md` or internal docs. ShipCheck checks that you've recorded a demo account so nothing ships without one, but only App Store Connect's own Review Notes field is what the reviewer sees.

ShipCheck catches this before you submit

A Claude Code plugin for React Native and Expo. Reads your project and store listing, checks them against the live App Store Review Guidelines and Google Play policies -- the same corpus quoted on this page -- and tells you the clause, the reviewer's likely wording, and the fix.

/plugin marketplace add BakerVentures/shipcheck

Free scan on every app. See pricing →