In a real app
The sign that a project stayed on Expo Go too long is a dependency list chosen to “work in Expo Go” rather than on merit: a pure-JavaScript storage library where MMKV is the obvious choice, a web map in a WebView, an analytics SDK wired through its REST API. Moving to a development build takes two commands (npx expo install expo-dev-client then npx expo run:ios) and opens the whole native ecosystem; there is no reason to delay it past the first week.
The other pitfall is version drift. Each Expo Go build matches a given SDK version; a project one version behind no longer opens in it, and on the App Store Expo Go stops at SDK 54. A “project is incompatible with this version of Expo Go” message means the project needs upgrading, or that it is time for a development build.
In an audit, a project with no expo-dev-client, no native folders, and no EAS build profile has never been compiled on its own. That has to be dealt with before any store conversation, because the first compile always surfaces something: bundle identifier, icons, permissions, signing.
Related terms
Development build
A debug build of your own app that includes expo-dev-client: your native modules, plus a launcher to connect to Metro.
Expo
The open-source framework React Native recommends: a native module SDK, a CLI, prebuild, Expo Router, and the EAS cloud services.
EAS Build
Expo’s hosted build service: profiles in eas.json, credentials management, and macOS and Linux runners for iOS and Android.
Prebuild (Continuous Native Generation)
The Expo command that generates the android and ios folders from app.json and config plugins instead of maintaining them by hand.