When you work on an Expo project, we serve an instance of your project from your local computer. If you close the project or turn off your computer, your development project stops being served.
During this time, you test your project using a pre-built iOS/Android app called Expo client. It asks your computer for a local copy of your project (via localhost, LAN, or a tunnel), downloads it, and runs it. You can take advantage of various development tools such as debugging, streaming device logs, inspecting elements, hot module reloading, and more.
Publishing your project
If you click the Publish button in Expo Dev Tools, we upload a minified copy of your app to our CDN, and give you a shareable url of the form expo.io/@your-username/your-app-slug.
On iOS, you'll need to use Apple TestFlight to share your app with others.
Updating your app
You can continue making changes locally without disrupting your users. Any time you Publish changes to your app, your new version becomes available immediately to anybody with the link.
We frequently release updates to the Expo SDK. Each update includes instructions for how to upgrade your project. If you decide to update to a newer version of our SDK, copies of the older version will continue to work fine. Users will download the newest copy that their client supports.
Deploying to the Apple App Store and Google Play
When you're ready to list your app officially on the Apple App Store and Google Play Store, Expo can generate deployment-ready .ipa and .apk archives which are ready to submit to Apple and Google. We generate them on our servers, so you still don't need any Apple or Google software. See the documentation about Distributing Apps.
Changing native code
You can take your app all the way to the App Store and Play Store while writing only JS using the managed workflow. However, if you run into needs which aren't met by the Expo SDK (see "Why not Expo?" to help anticipate whether you will encounter this), we provide the ability to eject, which gives you the native Xcode and Android Studio representation of your project so you can change anything that you need to.
Note: If you choose to eject, some Expo services are no longer available. For example, expo-cli won't work, we can't generate standalone builds for you anymore, and you won't be able to publish updates using expo publish. Your project becomes a normal React Native project with most of the Expo SDK APIs included.