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_BASE64ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORDGOOGLE_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: protectedios-vX.Y.Ztag 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.