Skip to main content

Builds and releases

Native builds are made with EAS Build in the cloud; nothing is built for release on a laptop.

Profiles (eas.json)​

ProfileUseOutputChannel
developmentDeveloper client for local work on a device (developmentClient: true, internal distribution)installable dev builddevelopment
previewTesters; share internallyAndroid APK, iOS simulator buildpreview
productionStoresAndroid app bundle (AAB), iOS device build; autoIncrement: trueproduction
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 production uses the appleId in eas.json; you will be prompted for the App Store Connect app (no ascAppId is 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.android block 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.js points at https://app.emaw-app.com/ (the bump script enforces this)
  • npm run version run and committed on develop; merged to main
  • Google client ids unchanged, or the new SHA-1 / bundle registered and the backend GOOGLE_SIGNIN_CLIENT_IDS updated
  • 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.