/opt/canhelp/.github/workflows
NameSizeModeActions
mobile-android.yml37610644editdlrm
mobile-ios.yml42940644editdlrm
Edit: /opt/canhelp/.github/workflows/mobile-ios.yml (4294B)
name: iOS — Build & Upload TestFlight on: push: tags: - 'v*' # trigger on version tags: v1.0.0, v1.2.3+4 workflow_dispatch: # manual trigger from GitHub UI jobs: build-ios: name: Build & Upload to TestFlight runs-on: macos-15 steps: # ── Checkout ────────────────────────────────────────────── - name: Checkout code uses: actions/checkout@v4 # ── Flutter ─────────────────────────────────────────────── - name: Setup Flutter uses: subosito/flutter-action@v2 with: flutter-version: '3.38.3' channel: 'stable' cache: true - name: Flutter dependencies working-directory: apps/mobile run: flutter pub get # ── Ruby / Fastlane ─────────────────────────────────────── - name: Setup Ruby uses: ruby/setup-ruby@v1 with: ruby-version: '3.2' bundler-cache: true working-directory: apps/mobile/ios # ── Signing certificate ─────────────────────────────────── - name: Import signing certificate env: CERTIFICATE_BASE64: ${{ secrets.IOS_CERTIFICATE_BASE64 }} CERTIFICATE_PASSWORD: ${{ secrets.IOS_CERTIFICATE_PASSWORD }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} run: | KEYCHAIN_PATH=$RUNNER_TEMP/build.keychain echo -n "$CERTIFICATE_BASE64" | base64 --decode -o $RUNNER_TEMP/cert.p12 security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH security set-keychain-settings -lut 21600 $KEYCHAIN_PATH security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH security import $RUNNER_TEMP/cert.p12 -P "$CERTIFICATE_PASSWORD" \ -A -t cert -f pkcs12 -k $KEYCHAIN_PATH security list-keychain -d user -s $KEYCHAIN_PATH # ── Provisioning profile ────────────────────────────────── - name: Install provisioning profile env: PROVISIONING_PROFILE_BASE64: ${{ secrets.IOS_PROVISIONING_PROFILE_BASE64 }} run: | PP_PATH=$RUNNER_TEMP/profile.mobileprovision echo -n "$PROVISIONING_PROFILE_BASE64" | base64 --decode -o $PP_PATH mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles/ # ── dart_defines for CI ─────────────────────────────────── - name: Create dart_defines.ci.json working-directory: apps/mobile env: API_URL: ${{ secrets.PRODUCTION_API_URL }} GOOGLE_CLIENT_ID: ${{ secrets.GOOGLE_CLIENT_ID }} GOOGLE_IOS_CLIENT_ID: ${{ secrets.GOOGLE_IOS_CLIENT_ID }} run: | cat > config/dart_defines.ci.json <