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
- 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. - Upload the
.aabto the Play Console, starting with the internal testing track. - Complete the store listing, content rating, and Data safety form.
- 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.
- Open
ios/Runner.xcworkspacein Xcode and set the bundle identifier and signing team (automatic signing works for most projects). flutter build ipa, then upload with Xcode's Organizer or Apple's Transporter app.- 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.