Skip to main content

Mobile Deployment

ChurchApps' Expo mobile apps, such as B1 Checkin, are built with Expo EAS Build or a local Gradle build and distributed through the app stores. This page covers building, submitting, and pushing over-the-air updates for both Android and iOS, using B1 Checkin as the example.

Before You Begin

  • Set up the app locally -- see Mobile Apps
  • Install and configure the EAS CLI
  • Have access to the Google Play Console (Android) and/or Apple App Store Connect (iOS)

Building​

Android​

Android release builds run locally and are signed with the release keystore from EAS. Download it once with npx eas-cli credentials -p android (choose credentials.json: Download credentials from EAS), then run:

yarn build:android

The Google Play bundle is written to android/app/build/outputs/bundle/release/app-release.aab. To build on EAS instead, run yarn build:android:eas.

iOS​

iOS builds always run on EAS:

yarn build:ios

Submitting to App Stores​

Android -- Google Play Store​

Upload the AAB through the Play Console, or submit it with EAS:

npx eas-cli submit -p android --path android/app/build/outputs/bundle/release/app-release.aab

iOS -- Apple App Store​

Submit the iOS build directly via EAS:

eas submit --platform ios

OTA Updates​

For JavaScript-only changes that do not require app store review, use over-the-air (OTA) updates:

yarn update

This uses EAS Update to push changes directly to users without a full store submission.

tip

OTA updates are significantly faster than store builds -- changes can reach users in minutes rather than days. Use them for bug fixes, copy changes, and minor UI updates that do not involve native code changes.

Version Numbers​

Before creating a store build, version numbers must be updated in multiple files:

  • package.json
  • app.json
  • android/app/build.gradle (versionName and versionCode)

The iOS build number is incremented automatically by EAS.

warning

Forgetting to update version numbers in all files will cause build failures or app store rejection. Double-check every file listed above before starting a production build.