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
.apkinstalls 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
previewprofile — it produces a standalone app you just install and open (best for testing the real double-tap + sign-in). (developmentis for fast native-module iteration but needs Metro running;productionis 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.jsonlike the scheme/icon) need a fresheas build. - App Store later:
eas build --profile productiontheneas 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.