Skip to main content
Glama
manage-app-versions.md4.58 kB
--- title: Manage different app versions sidebar_title: Manage app versions description: Learn about developer-facing and user-facing app versions and how EAS Build automatically manages developer-facing versions. hasVideoLink: true --- In this chapter, we'll learn how EAS Build automatically manages the developer-facing app version for Android and iOS. Learning about it will be useful before we dive into production build in the next two chapters. --- ## Understanding developer-facing and user-facing app versions An app version is composed of two values: - Developer-facing value: Represented by [`versionCode`](/versions/latest/config/app/#versioncode) for Android and [`buildNumber`](/versions/latest/config/app/#buildnumber) for iOS. - User-facing value: Represented by [`version`](/versions/latest/config/app/#version) **app.config.js**. Both Google Play Store and Apple App Store rely on developer-facing values to identify each unique build. For example, if we upload an app with the app version `1.0.0 (1)` (which is a combination of user-facing and developer-facing values), we cannot submit another build to the app stores with the same app version. Submitting builds with duplicate app version numbers results in a failed submission. An example demonstration of manually managing developer-facing values is shown below by `android.versionCode` and `ios.buildNumber` in **app.config.js**. **We don't have to add or manage these values manually since EAS Build automates this for us**. ```js app.config.js { ios: { buildNumber: 1 /* @hide ... */ /* @end */ }, android: { versionCode: 1 } /* @hide ... */ /* @end */ } ``` > **Note**: The [user-facing version number](/build-reference/app-versions/#user-facing-version) is not handled by EAS. Instead, we define that in the app store developer portals before submitting our production app for review. ## Automatic app version management with EAS Build By default, EAS Build assists in automating developer-facing values. It utilizes the [remote version source](/build-reference/app-versions/#remote-version-source) to automatically increment developer-facing values whenever a new production release is made. When we initialized the project with `eas init` command, the EAS CLI automatically added the following properties in **eas.json**: - `cli.appVersionSource` which is set to `remote` - [`build.production.autoIncrement`](/eas/json/#autoincrement-1) which is set to `true` You can view them in your project's **eas.json**: {/* prettier-ignore */} ```json eas.json { "cli": { /* @hide ... */ /* @end */ /* @info The appVersionSource is set to remote. */ "appVersionSource": "remote" /* @end */ }, "build": { "production": { /* @info The autoIncrement is set true to automatically increment the versionCode or buildNumber. */ "autoIncrement": true /* @end */ } } /* @hide ... */ /* @end */ } ``` When we create a new production build in the next two chapters, the `versionCode` for Android and `buildNumber` for iOS will increment automatically. If your app is already published in the app stores, the developer-facing app versions are already set. When migrating this app to use EAS Build, follow the steps below to sync those app versions: - In the terminal window, run the `eas build:version:set` command: - Select the platform (Android or iOS) when prompted. - When prompted **Do you want to set app version source to remote now?**, select **yes**. This will set the `cli.appVersionSource` to `remote` in **eas.json**. - When prompted **What version would you like to initialize it with?**, enter the last version number that you have set in the app stores. After these steps, the app versions will be synced to EAS Build remotely. You can set `build.production.autoIncrement` to `true` in **eas.json**. When you create a new production build, the `versionCode` and `buildNumber` will be automatically incremented from now on. ## Summary <ProgressTracker currentChapterIndex={6} name="EAS_TUTORIAL" summary={ <> We successfully explored app versioning differences, addressed the importance of unique app versions to prevent store rejections, and enabled automated version updates in{' '} <strong>eas.json</strong> for production builds. </> } nextChapterDescription="In the next chapter, learn about the process of creating a production build for Android." nextChapterTitle="Create a production build for Android" nextChapterLink="/tutorial/eas/android-production-build/" />

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jaksm/expo-docs-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server