How to update a Flutter app without the App Store or Play Store review
You shipped a Flutter release. A day later, users hit a bug: a crash on one screen, a wrong API URL, a broken checkout. The fix is one line of Dart. The normal path is a new build, an upload, a store review that can take hours or days, and then waiting for users to actually install the update. For a production bug, that's too slow. This post shows how to send that Dart fix straight to the app…
A Flutter app developed by a company encountered a bug after its release. The issue, which included a crash, an incorrect API URL, and a broken checkout, was resolved by modifying just one line of Python code. Traditionally, updating the app would involve building a new version, uploading it, obtaining store reviews that could take hours or days, and waiting for users to install the update.
This method was deemed too slow for addressing production bugs. This article explains how to deliver the Dart fix directly to users' phones, on both iOS and Android, using over-the-air (OTA) updates. What is OTA for Flutter? OTA updates, also known as code push, transmit modified Dart code to the installed app. The app scans for updates upon opening, downloads them in the background, and executes the new code during the subsequent launch.
The original build remains unchanged. What can be altered: any Dart code, including business logic, API calls, widgets, layouts, text, translations, and even new screens and classes. What requires a store release: native code (Swift, Kotlin, Java, Objective-C), new plugins, images, and fonts, as well as permissions. The following steps outline the process using OverPush, an open-source code push service for Flutter that the author has developed.
It offers a free tier, allowing users to test the feature on a real app. To begin, install the CLI and connect the project by executing the following commands:
curl -fsSL https://overpush.in/install.sh | bash
overpush login
overpush init
These commands add a small configuration file and a single dependency line, without altering the main.dart file or introducing native code. Once the initial setup is complete, release the app to the respective app stores as usual with overpush release android and overpush release ios. Subsequent fixes are then compared against the previously shipped version.
After resolving the bug, push the update using overpush patch android --rollout-percent 10 and overpush patch ios --rollout-percent 10. This initial rollout targets 10% of devices. Monitor the installs and failures on the dashboard, then gradually increase the rollout to 100%. If the fix proves faulty, every update is signed with your app's own key, and the app automatically reverts to the store version upon detecting the issue, even if offline.
Users can revert the update for everyone with a single command. While Apple's guidelines permit apps to download code that alters their behavior, provided it does not change the app's primary purpose, Google Play's policy varies depending on the app type. Developers should consult the current policy for their specific app. Both stores require OTA updates to be used for fixes and improvements, excluding any attempts to transform the app in ways not initially reviewed.
For those who utilize Flutter in production, the author is eager to learn what would prevent them from employing code push or what features they would require from it. Share your thoughts in the comments section.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.