Before you upload: the app-store rejection checklist
2026-10-14
Store rejections feel random. They’re not — the same handful of things bounce submissions over and over, and almost all of them are checkable before you click Upload. Here’s the list, split by platform, with a link to the fix for each.
Android (Google Play)
- 16 KB page size. Apps targeting Android 15+ must have native libs built with 16 KB alignment, or Play rejects the bundle. Full explainer + fix → Fixing the “16 KB page size” rejection. Check any build with store-check.
- Target API level too low. Play raises the minimum target SDK yearly; below it,
the upload is refused. Bump
targetSdkVersion(and rebuild). - Data safety / permissions declarations. Declared permissions must match what the app actually requests; mismatches or over-broad permissions get flagged.
- Icon vs. listing. The store-listing icon must match the installed app icon — a mismatch shows up as a “misleading” flag.
iOS (App Store / TestFlight)
- Build number. Missing or non-numeric
CFBundleVersionblocks the upload. It must be period-separated integers. - Export-compliance key. Without
ITSAppUsesNonExemptEncryption, App Store Connect nags on every build. - Privacy manifest. iOS 17+ apps (and required SDKs) need
PrivacyInfo.xcprivacy. - iPad orientations. If you support iPad, the app must declare all four orientations or Apple rejects it.
- Icon alpha. The App Store icon can’t contain an alpha channel.
- Getting the build uploaded in the first place → Ship an Expo app to TestFlight without EAS. Check any build with ipa-check.
Both
- Metadata vs. reality. Screenshots and the description must match the app; “misleading metadata” is a common bounce.
- Privacy & policy. A working privacy-policy URL, correct age rating, and honest ad/data disclosures.
- Crashes on launch. A build that crashes immediately never survives review — which is why release-only crashes (minification, missing native code) matter so much. Keep a CI gate so a broken build never ships → Add CI to an Expo app.
Make it a pre-flight, not a surprise
Both tools are dependency-free and CI-friendly — run them on every release build:
npx github:nwebersoftware/store-check ./app-release.aab
npx github:nwebersoftware/ipa-check ./YourApp.ipa
Sixty seconds of checks beats a two-day review bounce.
Get new posts
One email when a new post ships. No spam.