Skip to main content
Back to module
Mobile Development Basics · Your First Real App

Ship to your phone

Reading50mLesson 3 of 3 in this module

Give your app an identity and install a real build on your phone.

Why it matters

Running in Expo Go is perfect for learning, but Expo Go is not your app: it is Expo's app hosting your JavaScript. To give your app to a friend, test features that Expo Go does not include, or eventually publish, you need a build: a real installable binary with your name, icon and native code.

The three ways to run your code

OptionWhat it isWhen to use it
Expo GoExpo's app loading your JavaScriptLearning, quick prototypes, apps that only use libraries bundled in Expo Go
Development buildYour own app with developer tools built inOnce you add native libraries Expo Go does not include
Preview / production buildYour app as users will get itTesting with others, then the stores

A development build is like your own private Expo Go: it contains exactly the native code your project needs and still connects to npx expo start for fast refresh. A preview build has no developer tools and behaves like the store version.

What goes into an app identity

Before building, set these in app.json (or app.config.js):

{
  "expo": {
    "name": "Study Timer",
    "slug": "study-timer",
    "version": "1.0.0",
    "icon": "./assets/icon.png",
    "ios": { "bundleIdentifier": "com.yourname.studytimer" },
    "android": { "package": "com.yourname.studytimer" }
  }
}

The bundleIdentifier (iOS) and package (Android) are your app's permanent unique ids in reverse-domain form. Choose them carefully: once an app is published they cannot change.

Worked example: an Android build you can install

EAS Build (Expo Application Services) builds your app on Expo's servers, so you do not need Android Studio or a Mac. It has a free plan with a limited number of builds per month; check expo.dev/pricing (checked on 2026-10-23). A free Expo account is enough.

npm install -g eas-cli
eas login
eas build:configure

eas build:configure creates eas.json. Edit the preview profile so Android produces an .apk file you can install directly, instead of the .aab bundle the Play Store expects:

{
  "build": {
    "preview": {
      "distribution": "internal",
      "android": { "buildType": "apk" }
    }
  }
}

Then:

eas build --platform android --profile preview

The build runs in the cloud and finishes with a link and a QR code. Open it on an Android phone, download the APK and install it (Android asks you to allow installs from that source). Your app now has its own icon on the home screen and runs without the development server.

What about iPhone?

Apple is stricter. To install your own build on an iPhone outside Expo Go you need either:

  • a paid Apple Developer Program membership ($99 per year; checked on 2026-10-23), which lets EAS create an internal ("ad hoc") build for registered devices, or TestFlight builds for testers; or
  • a Mac with Xcode and a free Apple ID, which can install a build directly to your own connected iPhone for personal testing, with signing that expires after a few days.

If you have neither, keep using Expo Go on the iPhone; it is a fine way to finish this course. Publishing to Google Play also costs money (a one-off $25; checked on 2026-10-23), and is covered in Mobile App Production.

Common mistakes

  • Expecting a build to pick up code changes. A preview build contains the JavaScript from when it was built. Rebuild (or use over-the-air updates, covered later) to change it.
  • Leaving development URLs in the build. A build cannot reach localhost or your laptop. Point API calls at a real HTTPS server, using environment variables for different builds.
  • Committing secrets. Anything in your JavaScript bundle can be extracted from the app. Never put private API keys in it.
  • Changing the bundle id later. Pick a stable reverse-domain id before the first release.

Quick recap

  • Expo Go is for learning; development builds add your own native code; preview and production builds are what others install.
  • Set the app name, icon, version and bundle ids in app.json.
  • eas build --platform android --profile preview with buildType: "apk" gives you an installable Android app on the free plan.
  • iPhone installs outside Expo Go need a paid Apple membership or a Mac with Xcode.

Try it

The Do tab walks you through giving your app an identity and installing a build (Android) or a polished Expo Go version (iPhone).

Also in this lesson: