Files
pleno-vue/docs/mobile-artifacts.md
T

2.6 KiB

Mobile Store Delivery

Android and iOS delivery are intentionally independent. An iOS release or tag must never publish an Android production artifact.

Android

Android Store Artifacts remains in .github/workflows/mobile-artifacts.yml. It builds the Capacitor Android package io.truckwash.twa and supports:

  • Automatic delivery after successful current-master Automated Tests, with all six full Chromium-mobile role shards explicitly verified as green.
  • Manual dispatch with version, version code, upload toggle, track, and status.
  • Existing mobile-v* tags for the Android workflow.

Every Google Play upload path must resolve an exact completed Automated Tests push run for the same current-master commit. Manual no-upload artifact builds remain available for safe CI validation without invoking the store gate.

The Android job continues using GitHub environment mobile-store-production. Its required secrets are:

  • ANDROID_KEYSTORE_BASE64
  • ANDROID_KEYSTORE_PASSWORD
  • ANDROID_KEY_ALIAS
  • ANDROID_KEY_PASSWORD
  • GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64

Its variables are ANDROID_PACKAGE_NAME, ANDROID_AAB_PATH, PLAY_STORE_TRACK, PLAY_STORE_RELEASE_STATUS, and optional PLAY_STORE_USER_FRACTION. See the Google Play Console runbook for production track policy.

iOS

iOS uses three separate workflows:

  • iOS Internal TestFlight: exact verified master release to signed internal TestFlight build.
  • iOS App Store Candidate: protected ios-vX.Y.Z tag to exact-build storefront candidate, without rebuilding or submission.
  • iOS Credential Health: weekly identity, access, and expiry preflight.

Before signing or uploading to TestFlight, the workflow resolves the exact current-master test run and requires all six full WebKit-mobile role shards to be green. App Store candidates reuse that gated TestFlight build and do not rebuild it.

The GitHub environments and variables are documented in docs/app-store-release.md. The repository-level APP_STORE_AUTOMATION_ENABLED variable gates all access to them and must remain false until the signed credential canary is approved.

Local source/storefront checks:

npm run mobile:permissions:check
npm run mobile:ios:storefront:check

Strict candidate asset check:

npm run mobile:ios:storefront:check-strict

Version identity is deliberately different between platforms:

  • Android package: io.truckwash.twa
  • iOS App Store bundle: io.truckwash.app

The iOS release build verifies the final signed IPA rather than relying on the Capacitor appId, which remains the Android package identifier.