Flutter Publishing to App Stores

Your app is built and tested. The last step is publishing it so real users can download it. This topic covers how to prepare, sign, and publish your Flutter app to both the Google Play Store (Android) and Apple App Store (iOS).

Pre-Launch Checklist

  Before publishing, confirm:
  ────────────────────────────────────────────────
  ✓ App name and icon are finalized
  ✓ Version number and build number are set
  ✓ All debug code and print() statements removed
  ✓ API keys are not hardcoded in source code
  ✓ App tested on a real device (not just emulator)
  ✓ Privacy policy page exists (required by stores)
  ✓ App meets store content guidelines

Setting App Name, Icon, and Version

App Name

  Android: android/app/src/main/AndroidManifest.xml
  Change: android:label="Your App Name"

  iOS: ios/Runner/Info.plist
  Change: CFBundleDisplayName → Your App Name

Version Number in pubspec.yaml

version: 1.2.0+5
         │   │  │
         │   │  └── build number (increases every upload)
         │   └───── patch (bug fixes)
         └───────── major.minor (features)

App Icon with flutter_launcher_icons

  1. Add to pubspec.yaml:
     dev_dependencies:
       flutter_launcher_icons: ^0.14.0

     flutter_icons:
       android: true
       ios: true
       image_path: "assets/icon/app_icon.png"
       min_sdk_android: 21

  2. Run:
     flutter pub run flutter_launcher_icons

Publishing to Google Play Store — Android

Step 1 — Create a Keystore (Sign Your App)

Android requires every app to be digitally signed. The keystore is your digital signature file. Create it once and keep it safe forever.

keytool -genkey -v -keystore my-key.jks \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -alias my-key-alias

Store this .jks file securely — losing it means you can never update your app on the Play Store.

Step 2 — Configure Signing in Android

  Create android/key.properties:
  ─────────────────────────────────
  storePassword=your_store_password
  keyPassword=your_key_password
  keyAlias=my-key-alias
  storeFile=../my-key.jks

  Add key.properties to .gitignore — do NOT commit to git!
  In android/app/build.gradle, add signing config:
  ─────────────────────────────────────────────────
  def keystoreProperties = new Properties()
  keystoreProperties.load(new FileInputStream(rootProject.file('key.properties')))

  android {
    signingConfigs {
      release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
      }
    }
    buildTypes {
      release {
        signingConfig signingConfigs.release
      }
    }
  }

Step 3 — Build the Release APK or AAB

# Build App Bundle (preferred by Play Store)
flutter build appbundle

# Build APK (for direct distribution)
flutter build apk --release

# Output location:
# build/app/outputs/bundle/release/app-release.aab

Step 4 — Upload to Play Console

  1. Go to play.google.com/console and pay the one-time $25 registration fee
  2. Create a new app and fill in the store listing (title, description, screenshots)
  3. Go to Production → Releases → Create Release
  4. Upload the .aab file
  5. Complete the content rating questionnaire
  6. Submit for review (typically 1–3 days)

Play Store Listing Diagram

  ┌────────────────────────────────────────────────┐
  │  App Icon   My Awesome App              ★ 4.8  │
  │             Category: Productivity             │
  │  [────────────────────────────────────────]    │
  │  [  Screenshot 1  ] [ Screenshot 2 ]           │
  │  [────────────────────────────────────────]    │
  │  Description: (up to 4000 characters)          │
  │                                [Install]       │
  └────────────────────────────────────────────────┘

Publishing to Apple App Store — iOS

iOS publishing requires a Mac, Xcode, and an Apple Developer account ($99/year).

Step 1 — Configure in Xcode

  1. Open ios/Runner.xcworkspace in Xcode
  2. Set Bundle Identifier (unique: com.yourname.appname)
  3. Select your Team (Apple Developer account)
  4. Set Deployment Target (iOS 13.0 or higher recommended)

Step 2 — Build the iOS Release

flutter build ios --release

Step 3 — Archive and Upload via Xcode

  1. In Xcode, select Product → Archive
  2. Click "Distribute App" → App Store Connect
  3. Follow the upload wizard

Step 4 — Submit on App Store Connect

  1. Go to appstoreconnect.apple.com
  2. Create a new app record
  3. Fill in app name, description, screenshots, and keywords
  4. Select the uploaded build and submit for review (typically 1–3 days)

Platform Comparison

AspectGoogle PlayApple App Store
Account fee$25 one-time$99 per year
Review time1–3 days1–3 days
Mac requiredNoYes
Build format.aab or .apk.ipa
SigningKeystore (.jks)Apple certificates (Xcode)

Updating a Published App

  To release an update:
  ─────────────────────────────────────────────
  1. Increment build number in pubspec.yaml
     version: 1.2.0+5  →  version: 1.2.1+6
  2. Make your code changes
  3. Build the release again
  4. Upload the new build to the store
  5. Submit for review

App Signing — Keep Your Key Safe

  • Back up the .jks keystore file to a secure location (cloud storage + offline copy).
  • Never commit it to GitHub or any public repository.
  • Store the key passwords in a password manager.
  • Losing the keystore permanently blocks you from updating your app on Play Store.

Leave a Comment

Your email address will not be published. Required fields are marked *