Skip to Content
MobileDeployment

Deployment

Notice

There is currently no automatic CI/CD setup for mobile deployments.

All iOS and Android release builds are created and submitted manually.

EAS and Fastlane scripts may exist in the repository, but they are not part of the current release process.

iOS (Manual)

Before building, set the correct native environment for the target release (dev, staging, or prod).

pnpm native-env:dev # or pnpm native-env:staging # or pnpm native-env:prod
  1. Set the app version values in ios/CardNexus.xcodeproj/project.pbxproj:
    • MARKETING_VERSION = app version
    • CURRENT_PROJECT_VERSION = build number
  2. Build locally in Xcode (recommended):
    • Open the iOS project/workspace in Xcode.
    • Use Product -> Archive to create an archive.
    • Use Xcode Organizer to upload the build through Apple’s upload flow to TestFlight.
  3. In TestFlight:
    • Select the uploaded build and assign it to the relevant tester groups.
    • Submit the build for App Store release if needed.
  4. Run post-upload checks:
    • Validate smoke tests in TestFlight before promoting to production release.

iOS Prerequisites

  • You must be logged into Xcode with an Apple ID that is a member of the CardNexus team.

Android (Manual)

Before building, set the correct native environment for the target release (dev, staging, or prod).

pnpm native-env:dev # or pnpm native-env:staging # or pnpm native-env:prod

Required codegen before direct Gradle builds

If you build Android manually with ./gradlew or from Android Studio after schema/codegen-related or native-module changes, run schema codegen first.

From apps/mobile:

pnpm android:gradle:codegen

Or from apps/mobile/android:

./gradlew generateCodegenArtifactsFromSchema

If this step is skipped, Android release builds can reuse stale generated native artifacts, which can make recent changes appear not to update correctly in the built app.

The existing wrapper scripts already handle this for you:

  • pnpm android:release
  • pnpm build:gradle:release
  • pnpm build:gradle:development
  • pnpm build:gradle:staging
  • pnpm build:gradle:production
  1. Set Android version values in android/app/build.gradle:
    • versionName = app version
    • versionCode = build number
  2. Build locally using Gradle (run from android/):
    • Build an Android App Bundle (recommended for Play Store):
./gradlew generateCodegenArtifactsFromSchema ./gradlew bundleRelease
  • Or build a release APK when needed:
./gradlew generateCodegenArtifactsFromSchema ./gradlew assembleRelease
  1. Upload manually in Google Play Console:
    • Use the generated .aab or .apk depending on release use case.
    • Typical output paths:
      • AAB: android/app/build/outputs/bundle/release/*.aab
      • APK: android/app/build/outputs/apk/release/*.apk
    • Choose the target track (internal/testing/production) based on environment and release goal.
    • Complete release notes, review, and rollout steps in Play Console.
  2. Run post-upload checks:
    • Validate smoke tests in Play internal testing before broader rollout.

Android Prerequisites

  • Android release signing requires a valid keystore setup (keystore.properties/keystore credentials).

Both Android build and Play Store submission are manual today.

Last updated on