Uploading Apps to the Apple App Store and Google Play
Disclaimer: This feature works properly only on macOS.
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 - chosen by default, uploads the latest build for the given platform found on the Expo servers
--id <id> - uploads a build with the given ID
--path <path> - uploads a build from the local file system
2.1. If you choose to upload your Android app to Google Play
Important: You have to create a Google Service Account and download its JSON private key. After that, you'll have to create an app on the Google Play Console and upload your app manually at least once.
Click the Settings menu entry, followed by API access.
Click the CREATE SERVICE ACCOUNT button. If you see a message saying API access is not enabled for your account, you must first link your Google Play developer account with a Google Developer Project. On this page, either link it to an existing project if you have one, or click CREATE NEW PROJECT to link with a new one.
Follow the Google API Console link in the dialog
Click the CREATE SERVICE ACCOUNT button
Enter the name of this service account in the field titled "Service account name". We recommend a name that will make it easy for you to remember that it is for your Google Play Console account. Also, enter the service account ID and description of your choice.
Click Select a role and choose Service Accounts > ServiceAccount User
Check the Furnish a new private key checkbox
Make sure the "Key type" field is set to JSON
Click SAVE to close the dialog
Make a note of the filename of the JSON file downloaded to your computer. You'll need this to upload your app later. Be sure to keep this JSON file secure, as it provides API access to your Google Play developer account.
Return to the API access page on the Google Play Console and ensure it shows your new service account.
Click on Grant Access for the newly added service account
Choose Release Manager from the newly added service account
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, run expo upload:android. You can set following options when uploading an Android standalone app:
--key <key>(required) - path to the JSON key used to authenticate with the Google Play Store (created in the previous steps)
--track <track> - the track of the application to use, choose from: production, beta, alpha, internal, rollout (default: internal)
2.2. If you choose to upload your iOS app to TestFlight
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.