Skip to content

App builds (EAS)

Expo apps are built into installable binaries with EAS Build, Expo's cloud build service. This avoids maintaining local Android/iOS toolchains.

One-time setup

bash
# Install the CLI and sign in to your Expo account
npm install -g eas-cli
eas login

# Initialize EAS in the project (creates a project ID and eas.json)
eas build:configure

This generates eas.json. A typical configuration:

json
{
  "cli": { "version": ">= 12.0.0" },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    },
    "preview": {
      "distribution": "internal",
      "android": { "buildType": "apk" }
    },
    "production": {
      "autoIncrement": true
    }
  },
  "submit": {
    "production": {}
  }
}

Bundle identifiers

app.json already sets android.package and ios.bundleIdentifier to com.vineethkrishnan.wespend. Change these if you fork the project.

Build profiles

ProfileOutputUse
developmentDev clientDebugging with a custom native runtime
previewInternal APK / IPAShare a testable build with the household
productionStore-ready AAB / IPASubmission to Play Store / App Store

Build commands

bash
# A shareable Android APK for internal testing
eas build --platform android --profile preview

# Production builds for both platforms
eas build --platform all --profile production

EAS runs the build in the cloud and returns a download link (and, for internal distribution, a QR code to install on a device).

Supplying secrets to the build

The app reads Supabase credentials from EXPO_PUBLIC_* env vars at build time. For EAS builds, set them as EAS secrets so they are baked into the binary:

bash
eas secret:create --name EXPO_PUBLIC_SUPABASE_URL --value "https://YOUR-PROJECT.supabase.co"
eas secret:create --name EXPO_PUBLIC_SUPABASE_ANON_KEY --value "YOUR-ANON-KEY"

Anon key is public by design

The Supabase anon key is meant to ship in the client; Row Level Security is what protects data. Never put the service-role key in the app or in EXPO_PUBLIC_* vars.

Submitting to stores

bash
eas submit --platform android --latest
eas submit --platform ios --latest

Store submission requires a Google Play Console and an Apple Developer account. These are the founder-provided credentials noted in the overview.

Spend together, settle simply.