Store submission

App Store Connect + Play Console.

8 minmedium

Store submission. Apple takes ~24 hours; Google takes ~2 hours. Both have their own gauntlets. eas submit automates the upload; the human review is still on you.

One command per store

Terminal
$eas build --platform all --profile production # builds both
$eas submit --platform ios # upload to App Store Connect
$eas submit --platform android # upload to Play Console

EAS handles the upload. The store dashboards (App Store Connect / Play Console) handle the metadata + review.

Apple App Store — the bureaucracy

You need:

  • Apple Developer Program — $99/year. Required for any App Store distribution.
  • App Store Connect account set up; a new app record matching your bundle ID.
  • Screenshots — at least 6.5'' iPhone (1290 × 2796) and iPad if your app supports it.
  • App description, keywords, support URL, privacy URL
  • Privacy policy — Apple is strict. You need one even for free apps with no data collection.
  • Data-collection disclosure — every SDK that collects anything (analytics, crash reporting, ads) must be declared.

Apple review — the gotchas

  • Reject reasons — "app crashes on launch", "feature doesn't work as described", "mentions a competitor", "requires login but doesn't describe what users can do without one". Read the rejection email carefully; resubmit.
  • Submit a test account if your app requires login. Otherwise reviewers see only the login screen and reject for "incomplete experience".
  • Use Sign in with Apple if you offer other social login. This is enforced.
TestFlight is your friend. Submit a build to TestFlight first (no review required for internal testing). Get 5 users to install and use it. Fix the bugs. THEN submit to public review. You skip a lot of rejections.

Google Play Store

Less strict, faster, but still has rules:

  • Play Developer account — $25 one-time.
  • Target SDK — Google forces you to target a recent SDK every year. Update the target in app.json when EAS warns.
  • Data-safety disclosure — similar to Apple's privacy disclosure.
  • Internal testing → Closed → Open → Production — the staged rollout track. Use Internal first.

Subscribe to store-rejection emails

Both stores email when they accept, reject, or have a question. Set up the right recipient (your support email, not your dev email); a missed rejection means days of delay.

Versioning across stores

Same code, same version, same build number — push the production build to BOTH stores at once. iOS and Android users see the same update on the same day.

Quick check

Apple rejected your app saying 'reviewers couldn't sign in'. Your login works on every device you've tested. What's the most likely cause?

Try it

For the chapter assignment, you don't need to fully submit to a store — that takes days. Instead, write a submission readiness checklist for your app in notes.md:

  • App icon (1024×1024) ready? ☐
  • Screenshots (at least 6.5'' iPhone) ready? ☐
  • App description (max 4000 chars) written? ☐
  • Privacy policy URL live? ☐
  • Test account credentials prepared for reviewers? ☐
  • Bundle ID matches App Store Connect entry? ☐
  • EAS production build succeeded? ☐

Tick each off. Anything red means you'd be rejected if you submitted today.

What's next

Final lesson — OTA updates. Push JS changes to all users without a store re-submission.

Spot a typo? Have an idea?

Help us improve this lesson. One click opens a GitHub issue with the lesson URL pre-filled — suggest clearer wording, report a bug, or request more depth. The course keeps improving thanks to learners like you.

Suggest an improvement on GitHub