Skip to content
AgileLogics
7 min read

Shipping Apps: Builds, Stores, and CI/CD

Prerequisites: Testing Flutter apps, Security fundamentals

Getting a Flutter app to users involves release builds, signing, store listings, and — ideally — automation.

Release builds

flutter build appbundle          # Android App Bundle for Google Play
flutter build ipa                # iOS archive for the App Store (on a Mac)
flutter build web                # static files for any web host
flutter build windows            # also macos, linux

Set the app's version in pubspec.yaml — version: 1.2.0+7 means version 1.2.0 (shown to users) with build number 7 (must increase with every upload).

Android: Google Play

  1. Create an upload key and configure signing in android/app/build.gradle(.kts). Keep the key safe and backed up; Play App Signing lets Google manage the final app signing key.
  2. Upload the .aab to the Play Console, starting with the internal testing track.
  3. Complete the store listing, content rating, and Data safety form.
  4. Roll out gradually with a staged rollout, watching crash reports in Android vitals.

iOS: App Store

You need a Mac with Xcode and an Apple Developer Program membership.

  1. Open ios/Runner.xcworkspace in Xcode and set the bundle identifier and signing team (automatic signing works for most projects).
  2. flutter build ipa, then upload with Xcode's Organizer or Apple's Transporter app.
  3. Test with TestFlight, then submit for App Review.

Continuous integration

CI runs analysis and tests on every change:

# .github/workflows/ci.yml
name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          channel: stable
      - run: flutter pub get
      - run: dart format --output=none --set-exit-if-changed .
      - run: flutter analyze
      - run: flutter test

For pure Dart packages, use the dart-lang/setup-dart action and dart test instead.

Tools such as Codemagic, fastlane, and Xcode Cloud automate signing and uploading to the stores from CI.

After release

  • Monitor crashes with a service such as Firebase Crashlytics or Sentry, and upload the obfuscation symbols so stack traces stay readable.
  • Ship small updates often, and keep Flutter and your packages up to date (flutter upgrade, flutter pub outdated).

Congratulations

You've reached the end of Level 3. Build one of the Advanced Projects, then read What You Should Know Now — and What's Next for where to go from here.