Releasing Flutter apps across Google Play Console and Apple App Store Connect manually involves keystore signing, provisioning profiles, version increments, and changelog management that quickly lead to human error.

A battle-tested CI/CD setup automates linting, unit/integration testing, release signing, and direct store deployment upon every tagged commit.

Secure Credential and Keystore Management

Never check `.jks` keys or `.p8` API keys into source control. We encode keystores and App Store Connect API keys into base64 environment secrets in GitHub Actions, decoding them during the ephemeral runner step.

- name: Build Android AppBundle
  run: flutter build appbundle --release
  env:
    KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
    KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
    KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}

Fastlane Integration for Dual Store Delivery

Fastlane standardizes metadata, screenshot uploads, and track deployments. Google Play internal test tracks and Apple TestFlight builds are pushed simultaneously with semantic versioning bumps.

  • Automated release notes generated from pull request commit messages
  • Parallelized test execution with code coverage threshold enforcement
  • Immediate Slack or Discord deployment webhook notifications

Closing perspective

Investing in continuous deployment early ensures your team can ship bug fixes and new features to users within minutes instead of days.