Builds and releases
Native builds are made with EAS Build in the cloud; nothing is built for release on a laptop.
Profiles (eas.json)
| Profile | Use | Output | Channel |
|---|---|---|---|
development | Developer client for local work on a device (developmentClient: true, internal distribution) | installable dev build | development |
preview | Testers; share internally | Android APK, iOS simulator build | preview |
production | Stores | Android app bundle (AAB), iOS device build; autoIncrement: true | production |
eas build --profile development --platform android
eas build --profile preview --platform all
eas build --profile production --platform all
Build numbers are managed remotely (appVersionSource: remote); EAS stores and increments them.
Versioning
npm run version runs scripts/bumpVersion.mjs, which bumps version in package.json and app.json and rewrites constants/backendIp.js to the production URL. Always bump through the script so a dev URL cannot ship. The runtimeVersion policy is appVersion, so every version bump defines a new update runtime (OTA updates).
Submitting
- iOS:
eas submit --platform ios --profile productionuses theappleIdineas.json; you will be prompted for the App Store Connect app (noascAppIdis configured). Then release from App Store Connect / TestFlight. - Android: no submit profile is configured; upload the AAB in the Google Play Console (or add a
submit.production.androidblock with a service account key kept out of git).
Store listings, screenshots and legal text are managed in the store consoles; the in-app Terms and Privacy are components/TermsOfService.js and components/PrivacyPolicy.js. Giving is hidden on iOS to comply with App Store rules.
Release checklist
-
constants/backendIp.jspoints athttps://app.emaw-app.com/(the bump script enforces this) -
npm run versionrun and committed ondevelop; merged tomain - Google client ids unchanged, or the new SHA-1 / bundle registered and the backend
GOOGLE_SIGNIN_CLIENT_IDSupdated - Backend changes the build depends on are live in production
-
eas build --profile production --platform all - Install the iOS build via TestFlight and the Android build from the Play internal track; sign in, open each tab, download a Bible, run an audio practice
- Submit; monitor crashes in the store consoles for the first days
Prebuild
android/ and ios/ are gitignored and regenerated by expo prebuild. Native changes go in config plugins (plugins/) or app.json, never by editing the generated folders. The only custom plugin today is withGradleJvmArgs.