BangSo/docs/mobile-release.md

2.9 KiB

Mobile builds and store releases

Rakazo's public repository does not contain production App Store Connect, Google Play, Apple team, or private EAS submission identifiers. Those values belong in the release operator's private configuration.

Self-hosters normally do not need to publish their own mobile app: the Rakazo client can select a compatible server from the sign-in screen. If you distribute your own branded build, use your own Expo and store accounts.

Configure a build

  1. Link apps/mobile to an Expo project owned by your account.
  2. Choose unique iOS and Android application identifiers.
  3. Configure EXPO_PUBLIC_API_URL in the EAS build environment. Production builds require a valid HTTPS URL.
  4. Keep store application IDs, team IDs, signing credentials, API keys, and review-account credentials out of Git.
  5. Before a native iOS or Android build, run pnpm --filter @rakazo/mobile exec expo install --check. Attachment pickers and other Expo native modules must match the SDK (SDK 57 needs expo-image-picker@~57.0.11, not 17.x). Use pnpm exec expo install --fix from apps/mobile if that check fails.

From apps/mobile:

eas project:init
eas env:create --environment production --name EXPO_PUBLIC_API_URL --value https://app.example.com --visibility plaintext
eas build --platform ios --profile production
eas submit --platform ios --profile production --latest

EAS can prompt for store identity interactively. For automated submission, add the required identifiers through a private CI configuration or a short-lived local change that is never committed.

Before submission, verify the production API, account deletion, sign-in, notifications, store privacy answers, age rating, screenshots, support page, and review account on a physical device.

Over-the-air updates

Production and preview builds include expo-updates and use the corresponding EAS Update channel. The runtime version follows the public app version, so bump expo.version whenever native code, config plugins, permissions, or native dependencies change, then create and submit new store builds.

After the full GitHub Actions test suite passes on main, CI publishes a production OTA update when the revision only changes the mobile JavaScript, TypeScript, or bundled CSS. CI deliberately skips OTA publishing when native configuration, modules, dependencies, assets, or the update workflow changed. The repository needs an EXPO_TOKEN Actions secret with access to the linked Expo project.

To publish a compatible update manually from apps/mobile:

eas update --platform all --channel production --environment production --message "Short description"

Installed release builds download a compatible update in the background on launch and apply it after the next restart. Builds created before expo-updates was configured cannot receive OTA updates and must be replaced with a new iOS and Android build once.