054b0bb70f
The environment.ios_signing block makes Codemagic fetch an EXISTING profile at build init and fails with 'No matching profiles found' on a brand-new app. The 'Set up code signing' script already creates the cert+profile via fetch-signing-files --create, so the block was both redundant and blocking. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
83 lines
3.8 KiB
YAML
83 lines
3.8 KiB
YAML
# Codemagic CI/CD — builds the Biz Connect iOS app (Capacitor shell over the live web UI) and uploads it
|
|
# to TestFlight / App Store Connect. No Mac needed: this runs on Codemagic's macOS cloud instances.
|
|
#
|
|
# The app is a thin Capacitor wrapper that loads https://remote.bizgaze.com, so there's no bundled web
|
|
# code to build here — we generate the iOS project, patch its privacy strings, sign, archive and upload.
|
|
#
|
|
# ── One-time setup (see mobile/IOS_SETUP.md for the click-by-click) ────────────────────────────────
|
|
# 1. App Store Connect: create the app with bundle id com.bizgaze.connect
|
|
# 2. Codemagic → Teams/Integrations → App Store Connect: add your ASC API key (issuer id, key id, .p8).
|
|
# Name the integration exactly: BizGaze App Store Connect
|
|
# 3. That's it — automatic code signing fetches/creates the distribution cert + profile from that key.
|
|
|
|
workflows:
|
|
ios-testflight:
|
|
name: Biz Connect iOS → TestFlight
|
|
max_build_duration: 60
|
|
instance_type: mac_mini_m2
|
|
integrations:
|
|
app_store_connect: BizGaze App Store Connect # ← must match the integration name you create
|
|
environment:
|
|
# NOTE: we deliberately do NOT use an `ios_signing:` block here. That block makes Codemagic
|
|
# try to *fetch an existing* provisioning profile at build startup — it never creates one — so on
|
|
# a brand-new app it fails init with "No matching profiles found …". Instead the "Set up code
|
|
# signing" script below runs `fetch-signing-files … --create`, which creates the distribution
|
|
# certificate + profile on first run, then `xcode-project use-profiles` wires them into the project.
|
|
vars:
|
|
BUNDLE_ID: "com.bizgaze.connect"
|
|
XCODE_WORKSPACE: "mobile/ios/App/App.xcworkspace"
|
|
XCODE_SCHEME: "App"
|
|
node: 20
|
|
xcode: latest
|
|
cocoapods: default
|
|
scripts:
|
|
- name: Install JS dependencies
|
|
script: |
|
|
cd mobile
|
|
npm ci
|
|
|
|
- name: Generate the iOS project (Capacitor)
|
|
script: |
|
|
cd mobile
|
|
# `cap add ios` scaffolds ios/App; safe to re-run — it no-ops if it already exists.
|
|
if [ ! -d "ios" ]; then npx cap add ios; fi
|
|
npx cap sync ios
|
|
# App icon + splash from resources/icon.png & resources/splash*.png (1024x1024 icon, 2732² splash).
|
|
npx capacitor-assets generate --ios || echo "asset generation skipped"
|
|
|
|
- name: Patch Info.plist (App-Review privacy strings) + bundle id
|
|
script: |
|
|
bash mobile/scripts/ios-patch.sh
|
|
|
|
- name: Set up code signing
|
|
script: |
|
|
# Automatic signing via the App Store Connect API key configured in the integration above.
|
|
keychain initialize
|
|
app-store-connect fetch-signing-files "$BUNDLE_ID" \
|
|
--type IOS_APP_STORE --create
|
|
keychain add-certificates
|
|
xcode-project use-profiles
|
|
|
|
- name: Install CocoaPods
|
|
script: |
|
|
cd mobile/ios/App
|
|
pod install
|
|
|
|
- name: Build the signed IPA
|
|
script: |
|
|
xcode-project build-ipa \
|
|
--workspace "$XCODE_WORKSPACE" \
|
|
--scheme "$XCODE_SCHEME"
|
|
artifacts:
|
|
- build/ios/ipa/*.ipa
|
|
- /tmp/xcodebuild_logs/*.log
|
|
publishing:
|
|
app_store_connect:
|
|
auth: integration
|
|
submit_to_testflight: true
|
|
# Flip this to true (and add a `submit_to_app_store` group with reviewer notes) once you're ready
|
|
# to push a build to public App Store review instead of only TestFlight.
|
|
# submit_to_app_store: false
|
|
# No email recipients here on purpose — build status is watched on the Codemagic dashboard. Add
|
|
# per-user notifications in the Codemagic UI (or a `publishing.email` block) later if you want them.
|