Uploading Apps to the Apple App Store and Google Play
This guide will help you upload your Expo standalone apps to Apple TestFlight and to Google Play.
You'll need a paid developer account for each platform for which you wish to upload and publish an app. You can create an Apple Developer account on Apple's developer site and a Google Play Developer account on the Google Play Console sign-up page.
To upload the previously built standalone app to the appropriate app store, you simply run expo upload:android or expo upload:ios. However, you have a few options for choosing which app binary you want to upload (remember to choose one at the time):
--latest - uploads the latest build for the given platform found on Expo Servers
--url <url> - uploads a build from given URL
--path <path> - uploads a build from the local file system
--id <id> - uploads a build with the given ID
2.1. If you choose to upload your Android app to Google Play
Beware that this feature works properly only on macOS, unless you pass the --use-submission-service flag.
You have to create a Google Service Account and download its JSON private key.
After that, you'll have to create an app on Google Play Console and upload your app manually at least once.
Before using expo upload:android for uploading your standalone app builds, you have to upload your app manually at least once.
See expo.fyi/first-android-submission to learn more.
Using expo-cli to upload the further builds of your app
After these steps, you can make use of expo-cli to upload your further app builds to Google Play.
To upload your Android app to Google Play, simply run expo upload:android. You can set following options when uploading an Android standalone app:
--type <archive-type> - the archive type, by default, it's inferred from the filename extension, choose from: apk, aab
--key <key> - path to the JSON key used to authenticate with the Google Play Store
--track <track> - the track of the application to use, choose from: production, beta, alpha, internal, rollout (default: internal)
--release-status <release-status> - release status (used when uploading new apks/aabs), choose from: completed, draft, halted, inProgress (default: completed)
--android-package <android-package> - the Android package of your app, if you don't pass this parameter it'll be read from app.json
--use-submission-service - Experimental: Use Submission Service for uploading your app. The upload process will happen on Expo servers.
--verbose - always print logs from Submission Service
Uploading your app with Submission Service
Beware: This feature is still experimental! However, using it can not cause any damage to your app. In the worst-case scenario, your app won't get submitted to Google Play Store.
If you would like to upload your app from any other operating system than macOS, you can give the Expo Submission Service a try. It lets you upload your standalone app directly from Expo Servers.
Using the Submission Service is easy - it's just one additional flag: expo upload:android --use-submission-service.
2.2. If you choose to upload your iOS app to TestFlight
Disclaimer: This feature only works on macOS. If you want to upload an iOS app to the Apple App Store you will need to have access to a macOS device.
To upload your iOS app to TestFlight, run expo upload:ios. You can set following options when uploading an iOS standalone app:
--apple-id <apple-id>(required) - your Apple ID login. Alternatively you can set the EXPO_APPLE_ID environment variable.
--apple-id-password <apple-id-password>(required) - your Apple ID password. Alternatively you can set the EXPO_APPLE_ID_PASSWORD environment variable.
--app-name <app-name> - your app display name, will be used to name an app on App Store Connect
--sku <sku> - a unique ID for your app that is not visible on the App Store, will be generated unless provided
--language <language> - primary language (e.g. English, German; run expo upload:ios --help to see the list of available languages) (default: English)
Manually uploading your app
In order to see your app on Testflight, you will first need to submit your .IPA file to Apple using Transporter (previously known as Application Loader), available on the App Store (link). In order to do this:
Make sure you have logged into iTunes connect at least once with your Apple ID and accepted the terms.