iOS release (Fastlane / ios_deployment)
This repo deploys iOS with Fastlane and the GitHub Actions workflow ios_deployment.
Prerequisites
- macOS + Xcode (CI uses macos-26 with Xcode 26.3)
- Access to App Store Connect + the signing/certificates repo used by
match - Fastlane credentials / secrets are kept in GitHub Secrets and injected by
.github/workflows/ios_deployment.yaml:APPSTORE_KEY_IDAPPSTORE_ISSUER_IDP8_AUTH_KEY(contents of the App Store Connect.p8key)APPLE_IDITUNES_TEAM_IDAPPSTORE_TEAM_IDMATCH_PASSWORDMATCH_REPO_KEY(SSH key used to access the match repo)SENTRY_AUTH_TOKEN(optional but expected in CI)DEEPLINKNOW_API_KEY,LUCRA_API_KEY,LUCRA_API_URL- Vars:
BASE_URL
Recommended: run the GitHub Actions workflow
- Go to GitHub → Actions →
ios-deployment - Click Run workflow
- Select
backend_branch:release= production backendmain= qa backend
- Start the run and wait for it to finish
What the workflow does (high level):
- Installs
client/dependencies and builds the web app - Creates
.env.productionbased onbackend_branch - Ensures Capacitor iOS platform exists and syncs plugins
- Installs CocoaPods in
client/ios/App - Moves Fastlane + iOS build inputs into
client/ios/App - Writes
fastlane/secretKey.p8from theP8_AUTH_KEYsecret - Runs the Fastlane lane:
bundle exec fastlane ios release
Local fallback (only if CI is broken)
From client/fastlane/README.md, the local flow is supported but should be used only when needed. In CI, the secrets come from GitHub Secrets; for local runs you must provide equivalents yourself.
1) Install Ruby deps
From client/:
bundle install
2) Provide App Store Connect API key inputs
Fastlane expects:
APPSTORE_KEY_IDAPPSTORE_ISSUER_IDfastlane/secretKey.p8(the.p8private key file)
Place the .p8 key at:
client/fastlane/secretKey.p8
3) Run the Fastlane lane
bundle exec fastlane ios release
This lane increments build number, runs match (readonly), builds the archive (gym), and uploads to TestFlight (pilot).
Verify in App Store Connect
- Open App Store Connect → My Apps → FoodFight → TestFlight
- Confirm the new build appears (processing can take time)
Troubleshooting
.p8 file not found- Ensure
secretKey.p8is created before running Fastlane:- CI:
echo "$P8_AUTH_KEY" > fastlane/secretKey.p8 - Local: copy the key to
client/fastlane/secretKey.p8
- CI:
- Ensure
- Signing / provisioning issues
- Ensure
MATCH_PASSWORDandMATCH_REPO_KEYare valid and the match repo is reachable
- Ensure