Make a Build

Right now the app runs inside Expo Go — you scan a QR and it borrows Expo Go's shell. A build compiles your own standalone app that installs on the iPhone like any other app.

Two things only a build unlocks — the exact two you're chasing:

flowchart LR
  A[Expo Go
scan a QR] -->|build| B[Standalone app
on your iPhone] B --> C[budgetclone:// works
offline, anytime] B --> D[Real Google / Apple
sign-in]
  • Stable budgetclone:// deep link → the Back-Tap popup fires offline, anytime, without Expo Go open.
  • Real Google / Apple sign-in → OAuth needs a real bundle id; it can't run inside Expo Go (today it's simulated).

We build with EAS Build — Expo's cloud builder. No Xcode, no Mac simulator needed. It compiles on Expo's servers (~10–15 min) and hands you an install link.


Before you start — the one cost

You need Why Cost
Expo account Runs the EAS cloud build Free — sign up at expo.dev
Apple Developer account Apple's rule: installing any app on a physical iPhone needs a registered developer + signing $99/yr (Apple Developer Program)
Node + this project Already on your machine

The honest gate: the Apple Developer account is non-negotiable for putting the app on a real iPhone — that's Apple, not Expo. The free Apple tier exists but is painful without Xcode; the $99/yr program is the clean path. (Android has no such gate — a free .apk installs directly — if you ever want a no-cost test route.)


The steps

1. Install the EAS CLI

npm install -g eas-cli

2. Log into Expo

eas login

No account yet? Create one at expo.dev first, then run the command.

3. Configure the project

cd ~/Documents/budget-clone
eas build:configure

This creates eas.json and asks you to set the iOS bundle identifier — pick something permanent like com.hassan.budgetclone. (Changing it later = a different app, so choose once.) Select iOS when prompted.

4. Register your iPhone

eas device:create

Follow the link it prints → it installs a small profile on your phone and records its device ID. This is what lets an internal build install on your device.

5. Run the build

eas build --platform ios --profile preview
  • Use the preview profile — it produces a standalone app you just install and open (best for testing the real double-tap + sign-in). (development is for fast native-module iteration but needs Metro running; production is for the App Store.)
  • On the first run it asks to log into your Apple account → let EAS manage credentials (it generates the certificate + provisioning profile for you).
  • The cloud build takes ~10–15 min.

6. Install on the iPhone

When the build finishes EAS prints a URL / QR. Open it on the phone → install → then trust the developer: Settings → General → VPN & Device Management → (your profile) → Trust.

7. Point the Back-Tap shortcut at the real app

Now budgetclone://add-transaction resolves to your app instead of Expo Go. In your iOS Back-Tap shortcut, set it to open the URL:

budgetclone://add-transaction

Double-tap the back of the phone → the add-expense popup appears, offline, anytime. Done.


After the first build

flowchart LR
  X[Change JS / styles] -->|eas update| Y[OTA push
no rebuild] Z[New native module
or app.json change] -->|eas build| W[Fresh build needed]
  • Code-only changes ship over-the-air with eas update — no full rebuild.
  • Native changes (a new native module, or edits to app.json like the scheme/icon) need a fresh eas build.
  • App Store later: eas build --profile production then eas submit.

Still simulated after the build — read this

The build makes budgetclone:// real, but Google / Apple sign-in stays simulated until one more step: registering the bundle id + redirect URIs in the Google / Apple consoles and wiring expo-auth-session. That's a separate task after the build runs — flag it when you want real auth and we'll do it then.


Built for the budget-clone side project. SDK 54 · scheme budgetclone (already set in app.json). Personal — not TX work.