A Step-by-Step Guide to Publishing Your App on Google Play and Apple App Store

Everything you need to know to get your app approved and live on both major app stores, from signing configs to store listing requirements.

Before You Submit

App store rejections are almost always avoidable. Both Apple and Google publish detailed review guidelines, and most first-time rejections come from missing privacy disclosures, broken links, or incomplete metadata rather than actual functionality problems.

Publishing to Google Play

1. Generate a Signed Build

flutter build appbundle --release

This produces an .aab file, which is now required for new apps instead of a raw APK.

2. Configure Your Keystore

storePassword=yourStorePassword
keyPassword=yourKeyPassword
keyAlias=upload
storeFile=../upload-keystore.jks

3. Complete the Play Console Checklist

  • Data safety form (what data you collect and why)
  • Content rating questionnaire
  • App category and target audience
  • Privacy policy URL

Publishing to the Apple App Store

1. Archive and Upload

From Xcode, archive your build and upload it directly to App Store Connect, or use the command line:

xcodebuild -exportArchive \
  -archivePath build/App.xcarchive \
  -exportPath build/ \
  -exportOptionsPlist ExportOptions.plist

2. App Privacy Details

Apple requires a detailed breakdown of every data type your app collects and whether it’s linked to the user’s identity. Fill this out carefully — inconsistent answers between your code and your declaration are a common cause of rejection.

3. TestFlight Before Public Release

Always run at least one TestFlight beta cycle with internal and external testers before submitting for full review. This surfaces crashes and edge cases you won’t catch in local testing.

Common Rejection Reasons

  • Broken or placeholder content still visible in the build
  • Login-gated apps without a demo account for reviewers
  • Missing support URL or contact information
  • Permissions requested without a clear in-app justification

Post-Launch Checklist

After going live, monitor crash reports closely for the first 48 hours, set up staged rollouts on Google Play to limit blast radius, and keep a rollback build ready in case a critical bug slips through.