Releases

A release is the build you put in the store. Every patch is built against one release, so OverPush needs to build the release itself.

Building a release

$ overpush release android

Builds an app bundle (.aab) covering every phone Flutter runs on. --artifact apk builds an APK instead, for distribution outside the Play Store. Works from Mac, Windows or Linux.

$ overpush release ios

Builds the IPA for App Store Connect. --artifact app builds an app for your own devices instead, to preview. Needs a Mac with Xcode and a supported Flutter version (3.41.4, 3.47.5, 3.47.6, 3.47.7, 3.47.8 or 3.47.9).

Useful options

OptionWhat it does
--artifactaab (default, for the Play Store) or apk (for other stores, or installing directly).
-y, --yesDon't ask for confirmation.
OptionWhat it does
--artifactipa (default, for App Store Connect) or app (for your own iPhone).
--export-methodapp-store, ad-hoc, development or enterprise.
--export-options-plistAn ExportOptions.plist for the export step.
--no-codesignSkip signing, for CI.
-y, --yesDon't ask for confirmation.

Shipping the release to the store

The release is signed with your app's own release key, the one Flutter reads from android/key.properties. When the build finishes, the CLI prints where the file is:

App bundle (default)build/app/outputs/bundle/release/app-release.aab
APK (--artifact apk)build/app/outputs/flutter-apk/app-release.apk

Upload the .aab in Play Console:

  1. Open your app in Play Console.
  2. Go to Test and release and pick a track: Internal testing is a good first stop, Production for everyone.
  3. Click Create new release and upload app-release.aab.
  4. Add release notes, click Next, then save and roll it out. On Production, Play sends it for review first.

Nothing else to run: overpush release android already saved the release to your account, so any computer or CI runner logged in to it can patch it.

Raise versionCode for every upload. Play Console rejects a bundle whose version code it has seen before.

Want to try the app on another phone first, without the Play Store? Build an APK and send it over: see Testing on another phone with an APK.

Pick one of these:

CommandWhat it does
overpush releases archive (easiest)Saves the newest release's files to your account, then opens Xcode's Organizer.
overpush releases archive 1.4.0+31The same, for a release you name by its version.
overpush distribute iosOnly opens Xcode's Organizer.
overpush upload iosUploads the IPA to App Store Connect / TestFlight without Xcode.

The CLI suggests releases archive after a release because it does both jobs at once. overpush release ios has usually saved the files already (it prints "Uploading release files"), so distribute ios is enough then.

In the Organizer: select the archive the CLI names, click Distribute App, then choose App Store Connect and Upload.

upload takes an App Store Connect API key (--api-key, --api-issuer, or the APP_STORE_CONNECT_KEY_ID and APP_STORE_CONNECT_ISSUER_ID environment variables), or an Apple ID with an app-specific password.

If you upload a build some other way, record it so the dashboard knows that build is in the store:

$ overpush releases mark-uploaded

Release identity

Each release gets an id made of its version and a fingerprint of the build, for example 1.4.0+31-3e505df926. The CLI prints it when the release is built, and the console lists every release. Devices only accept patches built for the exact release they're running: a patch for 1.4.0+31 never reaches a phone running 1.4.0+30, nor a different build of 1.4.0+31.

Bump the build number for every store submission anyway, so you and the console can tell store builds apart at a glance.

Keeping releases around

To build a patch, the CLI needs files from the release build. overpush release keeps them on your computer and uploads them to OverPush, so another computer or a CI runner can patch the release later. When they're missing, overpush patch downloads them by itself.

Inspecting releases

The console's Releases tab lists every release of the app with its patches.

The CLI can also show them:

$ overpush releases list
$ overpush releases info

info shows everything about a release, including whether it can still be patched.

Trying a release on a device

$ overpush preview android

Installs the release on a phone connected over USB and opens it, the way the Play Store would. See Android for the full flow.

$ overpush release ios --artifact app
$ overpush preview ios

Installs the release on a connected iPhone and opens it. It needs a release built with --artifact app. See iOS for the full flow.