File: local-app-production.md | Updated: 11/15/2025
Hide navigation
Search
Ctrl K
Home Guides EAS Reference Learn
Archive Expo Snack Discord and Forums Newsletter
Copy page
Learn how to create a release (production) build for your Expo app locally.
Copy page
To create your app's release build (also known as production build) locally, you need to follow separate steps on your computer and use the tools required to create any native app. This guide provides the necessary steps for Android and iOS.
Creating a release build locally for Android requires signing it with an upload key and generating an Android Application Bundle (.aab). Follow the steps below:
keytool commandnpx expo prebuild to generate it.1
Already created a build with EAS Build? Download your credentials and skip to the next step.
If you've already created a build with EAS Build, follow the steps below to download the credentials, which contains the upload key and its password, key alias, and key password:
eas credentials -p android and select the build profile.Inside your Expo project directory, run the following keytool command to create an upload key:
Terminal
Copy
- sudo keytool -genkey -v -keystore my-upload-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
After running this command, you will be prompted to enter a password for the keystore. This password will protect the upload key. Remember the password you enter here, as you'll need it in the next step.
This command also generates the keystore file named my-upload-key.keystore in your project directory. Move it to the android/app directory.
If you commit the android directory to a version control system like Git, don't commit this keystore file. It contains your upload key and should be kept private.
2
Open android/gradle.properties file and add the following gradle variables at the end of the file. Replace the ***** with the correct keystore and key password that you provided in the previous step.
These variables contain information about your upload key:
android/gradle.properties
Copy
# If you've downloaded the credentials from `eas credentials` command, see comments below for each value. MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore # Path to the "keystore" file MYAPP_UPLOAD_KEY_ALIAS=my-key-alias # Replace with value of the `keystore.keyAlias` field in the credentials.json file MYAPP_UPLOAD_STORE_PASSWORD=***** # Replace with value of the `keystore.password` field in the credentials.json file MYAPP_UPLOAD_KEY_PASSWORD=***** # Replace with value of the `keystore.keyPassword` field in the credentials.json file
If you commit the android directory to a version control system like Git, don't commit the above information. Instead, create a ~/.gradle/gradle.properties file on your computer and add the above variables to this file.
3
Open android/app/build.gradle file and add the following configuration:
4
Navigate inside the android directory and create a release build in .aab format by running Gradle's bundleRelease command:
Terminal
Copy
- cd android
- ./gradlew app:bundleRelease
This command will generate app-release.aab inside the android/app/build/outputs/bundle/release directory.
5
Google Play Store requires manual app submission when submitting the .aab file for the first time.
To create an iOS release build locally for Apple App Store, you need to use Xcode which handles the signing and submission process via App Store Connect.
npx expo prebuild to generate it.1
Inside your Expo project directory, run the following command to open your-project.xcworkspace in Xcode:
Terminal
Copy
- xed ios
After opening the iOS project in Xcode:
2
To configure your app's release scheme:
3
To build your app for release, From the menu bar, open Product > Build. This step will build your app binary for release.
4
Once the build is complete, you can distribute your app to TestFlight or submit it to the App Store using App Store Connect: