# 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.