1--- 2title: Migrate from CodePush 3description: A guide to help migrate from CodePush to EAS Update. 4--- 5 6import { Collapsible } from '~/ui/components/Collapsible'; 7import { Terminal } from '~/ui/components/Snippet'; 8import { Step } from '~/ui/components/Step'; 9 10This guide explains how to transition a React Native project that uses CodePush to use EAS Update which offers [many advantages](/eas-update/introduction/#pitch). It assumes that you're using the default React Native project structure. For assistance with migrating brownfield native apps to EAS Update, [reach out to us directly](https://expo.dev/contact). 11 12## Prerequisites 13 14<Collapsible summary="An Expo user account"> 15 16EAS Update is available to anyone with an Expo account, regardless of whether you pay for EAS or use our free tier. You can sign up at [https://expo.dev/signup](https://expo.dev/signup). 17 18[Learn more about different plans and benefits](https://expo.dev/pricing). 19 20</Collapsible> 21 22<Step label="1"> 23## Uninstall CodePush 24 25To avoid conflicts and unexpected behavior, it's recommended to uninstall CodePush if you're using EAS Update. This is because your app could periodically fetch updates from both services, leading to issues, especially if you're using different configurations for each service. 26 27Remove the CodePush SDK from your project by uninstalling the `react-native-code-push` package: 28 29<Terminal cmd={['$ npm uninstall react-native-code-push']} /> 30 31You'll also need to remove CodePush references from JS and native code. Follow this [guide](https://github.com/Microsoft/react-native-code-push/issues/1101#issuecomment-350204507) for more detailed instructions. 32 33</Step> 34 35<Step label="2"> 36## Ensure proper `app.json` 37 38Ensure that your project has an `app.json` file with an `expo` object. If you don't have anything specific to configure in your `app.json` file yet, you can simply create a minimal `app.json` file with an empty `expo` object like this: 39 40```json app.json 41{ 42 "expo": { 43 //... any other existing keys you have 44 } 45} 46``` 47 48</Step> 49 50<Step label="3"> 51## Install the `expo` package 52 53Install the `expo` package by running the command: 54 55<Terminal cmd={['npx install-expo-modules@latest']} /> 56 57If the command fails, refer to the ["Installing Expo modules" guide](/bare/installing-expo-modules/#manual-installation). 58 59</Step> 60 61<Step label="4"> 62## Turn off resource bundle signing (Xcode 14+ only) 63 64In Xcode 14 and higher, resource bundles are signed by default, which requires setting the development team for each resource bundle target. 65To resolve this issue, downgrade to an older Xcode version using the `image` field in **eas.json**, or turn off signing resource bundles in your Podfile. See the ["disable bundle resource signing" example](https://expo.fyi/r/disable-bundle-resource-signing). 66 67</Step> 68 69<Step label="5"> 70## Install the latest EAS CLI 71 72EAS CLI is the command-line app that you will use to interact with EAS services from your terminal. To install it, run the command: 73 74<Terminal cmd={['$ npm install -g eas-cli']} /> 75 76You can also use the above command to check if a new version of EAS CLI is available. We encourage you to always stay up to date with the latest version. 77 78> We recommend using `npm` instead of `yarn` for global package installations. You may alternatively use `npx eas-cli@latest`, just remember to use that instead of `eas` whenever it's called for in the documentation. 79 80</Step> 81 82<Step label="6"> 83## Log in to your Expo account 84 85If you are already signed in to an Expo account using Expo CLI, you can skip the steps described in this section. If you are not, run the following command to log in: 86 87<Terminal cmd={['$ eas login']} /> 88 89You can check whether you are logged in by running `eas whoami`. 90 91</Step> 92 93<Step label="7"> 94## Configure project, deploy builds and publish updates 95 96We have finished all the steps tailored for a CodePush-enabled bare React Native project. To proceed with the configuration of your project, please begin with Step 4 in [the main guide](/eas-update/getting-started/#create-a-build-for-the-project) and follow it through to completion. 97 98> You may need to edit some of the code `eas update:configure` generates depending on how you build and run your project. See [Updating bare app](/eas-update/updating-your-app/) for more details about the native changes. 99 100</Step> 101 102<Step label="8"> 103## Verifying the migration and resubmitting your app 104 105After completing the migration and setting up your project with EAS Update, you should test your app to ensure that over-the-air updates are working correctly. To do this: 106 1071. Install the currently published version of your app on a device or simulator. 1082. Deploy a new update to your app using EAS Update. 1093. Launch the app and ensure that it loads the latest update from EAS. Once the update is built and uploaded to EAS and the command completes, force close and reopen your app up to two times to download and view the update. 110 111Keep in mind that since you have changed the update provider from CodePush to EAS Update, you will need to rebuild your app and submit the new build to the respective app stores (Apple App Store and Google Play Store) to ensure the update mechanism works as expected for your end-users. 112 113Please follow the respective store guidelines for submitting a new build of your application: 114 115- [Submitting to Apple App Store](/submit/ios) 116- [Submitting to Google Play Store](/submit/android) 117 118After successfully submitting your app, users will be able to download and use the latest build with EAS Update integration. If your app is not updating as expected, [validate your configuration](/eas-update/debug). 119 120</Step> 121