Part 7 · 1 chapters · ~8 min
Store Releases and Staged Rollouts
Signing and build flavours, TestFlight and Play testing tracks, store review and policies, staged rollouts and halting them, crash-free rate and ANR monitoring (Crashlytics, Sentry), remote config and feature flags as kill switches, minimum supported versions and forced updates, over-the-air updates (Shorebird, EAS Update) and their store rules, and CI/CD with Fastlane or Codemagic.
9
Shipping safely to devices you do not control
code
# build and upload (CI) flutter build ipa --release --obfuscate --split-debug-info=build/symbols # keep symbols to de-obfuscate crashes flutter build appbundle --release --obfuscate --split-debug-info=build/symbols fastlane ios beta # upload to TestFlight fastlane android deploy track:production rollout:0.01 # 1% staged rollout on Google Play // app start: refuse versions below the minimum the server supports final cfg = await remoteConfig.fetch(); if (Version.parse(appVersion) < Version.parse(cfg.minSupportedVersion)) showForceUpdate(); if (!cfg.flags['new_transfer_flow']!) useLegacyFlow(); // kill switch without a release
Release gates: advance the rollout only if crash-free users stay above the threshold, ANR rate stays low (Google Play flags rates above 0.47% of daily users as bad behaviour), and payment success rate holds. Upload debug symbols for every build, or crash reports from obfuscated builds are unreadable.
A STAGED MOBILE RELEASE
you cannot roll back an installed app: stage everything
swipe the figure sideways, or tap expand for full screen
1/4
pre-release
Internal and beta tracks (TestFlight, Play internal and closed testing) catch device-specific crashes before strangers see them.
internal, then betareal devices early