Flutter · One codebase, native feel
What does a production Flutter release build require?
Short answer
Use release mode with proper signing, environment-specific flavors, obfuscation and retained symbols, correct versioning, and a CI pipeline that produces reproducible artifacts.
A release build differs from debug in compilation, assertions, signing and native shrinking. Dart is AOT compiled, the observatory is off, and Android runs R8 or ProGuard. Any plugin or reflection-like native dependency that only fails under shrinking will surface here, so release builds must be tested, not assumed.
flutter build appbundle --release --flavor prod --dart-define=API_URL=https://api.example.com
flutter build ipa --release --flavor prod --dart-define=API_URL=https://api.example.com- Keep signing keys and provisioning profiles in a secure CI secret store, never in the repo
- Use flavors or build schemes per environment with explicit API endpoints
- Pass configuration with dart-define rather than editing source before release
- Increment the version name and build number for every store upload
- Archive and upload symbols and mapping files for crash reporting
Reproducibility and verification
Pin the Flutter SDK version in CI and commit the pubspec lockfile. Run the integration suite against the release build you intend to ship. Verify the bundle identifier, permissions, signing identity and entitlements, because a debug build can hide missing production configuration.
Follow-ups you should expect
Interviewers use these to check whether the first answer was understanding or memorisation.
- 1What breaks only in release mode?
- 2How do you manage API endpoints across environments?
- 3Why should release builds be tested rather than only debug builds?
- 4What must CI protect besides the source code?
Say it in the interview
A production build needs release compilation, correct signing, environment flavors, versioning and retained symbols. I keep keys in a secret store and pass configuration through dart-define rather than editing code. I pin the SDK and lock dependencies for reproducibility, and I run the integration suite against the actual release artifact. Release mode is where native shrinking and missing entitlements show up, so it must be tested.
Use this as a model, not a script. Saying it in your own words is what makes it survive follow-up pressure.
Related questions
Reading is step one
Now say it out loud.
Understanding an answer and delivering it under pressure are different skills. Rehearse this topic in a live Flutter mock interview and get scored feedback on depth, clarity and confidence.