1--- 2title: Build your project for app stores 3description: Learn how to create a production build for your app that is ready to be submitted to app stores from the command line using EAS Build. 4sidebar_title: Build project for app stores 5--- 6 7import { Collapsible } from '~/ui/components/Collapsible'; 8import { Terminal } from '~/ui/components/Snippet'; 9import { Tabs, Tab } from '~/ui/components/Tabs'; 10import { BoxLink } from '~/ui/components/BoxLink'; 11import { BuildIcon, EasSubmitIcon, EasMetadataIcon, BookOpen02Icon } from '@expo/styleguide-icons'; 12 13Whether you have built a native app binary using [EAS](/build/setup/) or [locally](/guides/local-app-development/), the next step in your app development journey is to submit your app to the stores. To do so, you need to create a **production build**. 14 15## Production builds 16 17Production builds are submitted to app stores for release to the general public or as part of a store-facilitated testing process such as TestFlight. 18 19These builds must be installed through their respective app stores. They cannot be installed directly on your Android Emulator or device, or iOS Simulator or device. The only exception to this is if you explicitly set `"buildType": "apk"` for Android on your build profile. However, it is recommended to use **aab** when submitting to stores, and this is the default configuration. 20 21### `eas.json` configuration 22 23A minimal configuration for building a production build in **eas.json** that is already created when you create your first build: 24 25{/* prettier-ignore */} 26```json eas.json 27{ 28 "build": { 29 /* @hide ... */ /* @end */ 30 "production": {} 31 /* @hide ... */ /* @end */ 32 } 33} 34``` 35 36### Create a production build 37 38To create a production build, run the following command for a platform: 39 40<Tabs tabs={['Android', 'iOS']}> 41 <Tab> 42 <Terminal cmd={['$ eas build --platform android']} /> 43 </Tab> 44 <Tab> 45 <Terminal cmd={['$ eas build --platform ios']} /> 46 </Tab> 47</Tabs> 48 49> You can attach a message to the build by passing `--message` to the build command, for example, `eas build --platform ios --message "Some message"`. The message will appear on the website. It comes in handy when you want to leave a note with the purpose of the build for your team. 50 51Alternatively, you can use `--platform all` option to build for Android and iOS at the same time: 52 53<Terminal cmd={['$ eas build --platform all']} /> 54 55## Developer account 56 57You will need to have a developer account for the app store you want to submit your app. 58 59<Collapsible summary="Google Play Developer membership is required to distribute to the Google Play Store."> 60 61You can build and sign your app using EAS Build, but you can't upload it to the Google Play Store unless you have a membership, a one-time $25 USD fee. 62 63</Collapsible> 64 65<Collapsible summary="Apple Developer Program membership is required to build for the Apple App Store."> 66 67If you are going to use EAS Build to create release builds for the Apple App Store, you need access to an account with a $99 USD [Apple Developer Program](https://developer.apple.com/programs) membership. 68 69</Collapsible> 70 71## App signing credentials 72 73Before the build process can start for app stores, you will need to have a store developer account and generate or provide app signing credentials. 74 75Whether you have experience with generating app signing credentials or not, EAS CLI does the heavy lifting. You can opt-in for EAS CLI to handle the app signing credentials process. 76 77### Android app signing credentials 78 79- If you have not yet generated a keystore for your app, you can let EAS CLI take care of that for you by selecting `Generate new keystore`, and then you are done. The keystore is stored securely on EAS servers. 80- If you want to manually generate your keystore, please see the [manual Android credentials guide](/app-signing/local-credentials#android-credentials) for more information. 81 82### iOS app signing credentials 83 84- If you have not generated a provisioning profile and/or distribution certificate yet, you can let EAS CLI take care of that for you by signing into your Apple Developer Program account and following the prompts. 85- If you want to rather manually generate your credentials, refer to the [manual iOS credentials guide](/app-signing/local-credentials#ios-credentials) for more information. 86 87## Wait for the build to complete 88 89By default, the `eas build` command will wait for your build to complete, but you can interrupt it if you prefer not to wait. Monitor the progress and read the logs by following the link to the build details page that EAS CLI prompts once the build process gets started. You can also find this page by visiting [your build dashboard](https://expo.dev/builds) or running the following command: 90 91<Terminal cmd={['$ eas build:list']} /> 92 93If you are a member of an organization and your build is on its behalf, you will find the build details on [the build dashboard for that account](https://expo.dev/accounts/[account]/builds). 94 95## Next steps 96 97<BoxLink 98 title="App Store submissions" 99 description="Learn how to submit your app to app stores using EAS Submit." 100 Icon={EasSubmitIcon} 101 href="/deploy/submit-to-app-stores/" 102/> 103 104<BoxLink 105 title="App stores best practices" 106 description="Learn about the best practices for submitting your app to app stores." 107 Icon={BookOpen02Icon} 108 href="/distribution/app-stores/" 109/> 110