Skip to content
useffect.sh
Book 30 min with a senior
Build & release

EAS Build

Expo’s hosted build service: profiles in eas.json, credentials management, and macOS and Linux runners for iOS and Android.

Definition

EAS Build is the hosted Expo Application Services service that compiles the iOS and Android binaries of an Expo or React Native project. You describe build profiles in eas.json (development, preview, production, or your own), each with its distribution, environment variables, update channel, and native options, then run eas build --profile. Android builds run on Linux runners on Google Cloud, iOS builds on macOS machines Expo manages, which spares the team from maintaining a CI Mac. The service can generate and store credentials (an Android keystore, iOS certificates and provisioning profiles) or use yours. If the android and ios folders are absent, it runs prebuild before compiling. It saves maintaining a home-grown pipeline (Fastlane, a macOS CI), while remaining runnable locally with eas build --local. An eas.json file at the project root means it is in use.

In a real app

The eas.json file is the first thing to read in a project. A healthy setup has at least three profiles: development (developmentClient: true, internal distribution), preview (release, internal distribution, preview channel), and production (production channel, autoIncrement for the build number). Each profile points at an EAS Update channel; that link decides which OTA updates a binary receives by default, and it can only be changed afterwards from inside the app, through Updates.setUpdateRequestHeadersOverride.

The usual pitfalls are about secrets and environment: EXPO_PUBLIC_* variables that differ between local and EAS, a git-ignored google-services.json therefore missing on the runner (pass it as a file-type environment variable), or an .easignore that accidentally excludes a required folder. Pinning Node, Xcode, or Java versions in the profile (node, image) avoids surprises when EAS changes its default images.

To diagnose a build that passes locally and fails on EAS, eas build --local replays the pipeline on your machine with the same steps. In an audit I check that credentials are managed by EAS or at least documented, that the production profile does not ship developmentClient, and that iOS builds run on an image compatible with the Xcode version Apple requires for submission.

Our services on this

Sources

All 35 glossary terms

One of these is blocking your app?

30 minutes with a senior to look at the problem in your code. Free.