Upload a build you made yourself
Updated October 22, 2026
Built your app already, in Xcode, Android Studio, Expo or Flutter? Send the file to the stores with StoreReady as it is. Nothing is built again.
- Google Play: an Android App Bundle,
.aab. Signed or not: an unsigned one is signed with your app's upload key. - App Store: an iPhone app,
.ipa, exported for the App Store.
Up to 300 MB each. Every upload counts as one build, one for each file.
From your app's page
- On your app's Builds tab press Upload a build.
- Drop the
.aab, the.ipa, or both. We read each file right there and show what it is, like Android · com.yourcompany.app · 1.2.3 (45), and whether it is signed. - Pick where it goes: a Google Play track, TestFlight testers.
- Press Send to the store.
We check the file with its store first, then upload it. The build page follows it like any build: Google Play's track, or App Store Connect and TestFlight.
From the start
No project to connect? In setup's first step pick I already have a built app and drop your files. We set the app up from them: its App ID, version and name. Then connect the stores as usual.
From your terminal or AI tool
npx -y @storeready/cli upload app-release.aab
In Claude Code, Codex or Cursor, the upload_build tool does the same.
How to make the files
An .aab for Google Play
- Android Studio: Build → Generate Signed App Bundle or APK → Android App Bundle, pick your key, then release.
- Expo with EAS: open the build on expo.dev and press Download, or run
eas build --platform android. - Flutter:
flutter build appbundle. The file isbuild/app/outputs/bundle/release/app-release.aab. - React Native: in the
androidfolder run./gradlew bundleRelease.
An .ipa for the App Store
- Xcode: Product → Archive, then Distribute App → App Store Connect → Export. The
.ipais in the folder it saves. - Expo with EAS: open the build on expo.dev and press Download, or run
eas build --platform ios. - Flutter:
flutter build ipa. The file is inbuild/ios/ipa.
What we check
- The App ID. The file's package or bundle ID should be your app's in StoreReady. A file for another one asks you first.
- The version. Google Play needs a version code above every one it has. App Store Connect needs a build number it has not seen for that version. If the store has it already, we say so before anything counts: build the file again with a higher number.
- The signature. An
.ipahas to be signed for the App Store, with an Apple Distribution certificate. Ad Hoc and Development ones are refused, with how to export it again. - The upload key. A signed
.aabgoes to Google Play as it is. If Google wants the upload key StoreReady holds for your app instead, we sign it with that and send it again. If Google wants another key, see Upload key and app signing.
Good to know
- No .apk. Google Play takes app bundles only. Export an
.aabinstead. - The very first Android version of a new app still goes to Google Play by hand, once. The build page shows how.
- Building with StoreReady instead keeps every version from your project: connect it in Settings → Project.
Was this article helpful?