Flutter Release Readiness
Prepare a Flutter app for Android and iOS release: versioning, quality gate, signing guidance, store metadata, build commands, and CI/CD checklist.
Workflow
- Run universal pre-release gate (both platforms must pass before continuing).
- Run Android-specific checks.
- Run iOS-specific checks.
- Run quality validation — all three commands must pass.
- Generate
docs/release/release_checklist.mdusingtemplates/release_checklist.md. - Generate CI/CD templates if not present (from
templates/github_workflows/). - Present final blockers list — do not execute release builds until user approves.
NEVER run flutter build release or publish commands without explicit user approval. NEVER commit signing credentials to source control.
Universal Pre-Release Gate
-
pubspec.yamlversion followsMAJOR.MINOR.PATCH+BUILD— build number strictly greater than last submission -
CHANGELOG.mdupdated with this release's changes (Keep a Changelog format) -
dart format --set-exit-if-changed .passes -
flutter analyze --no-fatal-infospasses (zero errors; warnings documented) -
flutter testpasses — all tests green - No hardcoded secrets detected (run
bash scripts/collect_flutter_logs.shor greplib/forAIza,sk-,password =,private_key) -
.env,google-services.json,GoogleService-Info.plistare in.gitignore - Crash reporting / release health dashboard identified (Crashlytics, Sentry, or equivalent)
- Rollout plan documented: staged rollout percentage, rollback threshold, first-24-hour owner
Android Checklist
-
applicationIdset correctly inandroid/app/build.gradle -
targetSdkVersion/targetSdkmeets current Google Play policy. As of 2026-05-14, new apps and updates must target Android 15 / API level 35 or higher unless an exception applies - Launcher icons configured (
flutter_launcher_iconspackage or manual) - Adaptive icons configured for API 26+ (
ic_launcher.xml) - Permissions in
AndroidManifest.xml— remove any unused permissions -
minSdkVersionset appropriately (Flutter minimum is 21) - Proguard/R8 rules present if using code shrinking
- Signing: keystore documented (never committed);
key.propertiesin.gitignore - Release build:
flutter build appbundle --release - Play Store metadata: title (≤30 chars), short description (≤80 chars), full description (≤4000 chars), screenshots, feature graphic
- Privacy policy URL ready
- Play Data Safety answers prepared and match actual app behavior
iOS Checklist
-
PRODUCT_BUNDLE_IDENTIFIERset inios/Runner.xcodeproj - App icons configured in
ios/Runner/Assets.xcassets/AppIcon.appiconset - Launch screen configured in
LaunchScreen.storyboard -
Info.plistpermission strings present for every permission requested (camera, location, microphone, etc.) -
PrivacyInfo.xcprivacypresent when required-reason APIs or third-party SDK requirements apply - App Store privacy details prepared; ATT reviewed if the app tracks users across apps or websites
-
MARKETING_VERSIONandCURRENT_PROJECT_VERSIONmatchpubspec.yaml - CocoaPods up to date:
cd ios && pod install --repo-update - Signing: Xcode managed signing or manual profile documented (never committed)
- Release build:
flutter build ios --release --no-codesign(verify then sign via Xcode) - App Store metadata: app name, description, keywords (≤100 chars), screenshots for required device sizes
- Privacy nutrition labels prepared for App Store Connect
Build Commands
# Android
flutter build appbundle --release # Play Store (preferred)
flutter build apk --release --split-per-abi # APK (direct installs)
# iOS
flutter build ios --release --no-codesign # then archive via Xcode
# Run final checks first
dart format --set-exit-if-changed .
flutter analyze --no-fatal-infos
flutter test
Output Artifacts
docs/release/release_checklist.md— completed checklist for this release.github/workflows/flutter_ci.yml— CI quality gate (if not present).github/workflows/android_build.yml— Android build workflow (if not present).github/workflows/ios_build.yml— iOS build workflow (if not present)
Cross-references
- Agent:
release-engineer - Templates:
templates/release_checklist.md,templates/github_workflows/ - Security:
flutter-securityskill for secrets scan before release