diff --git a/.github/workflows/build_ios_simulator_app.yml b/.github/workflows/build_ios_simulator_app.yml index c44f7fd1..1f53d17d 100644 --- a/.github/workflows/build_ios_simulator_app.yml +++ b/.github/workflows/build_ios_simulator_app.yml @@ -13,7 +13,7 @@ on: description: "Should a parent repo be used for customizations? (Required for branded builds)" runner-label: type: string - default: "macos-latest" + default: "macos-15" customizations_env_content: required: false type: string @@ -61,7 +61,7 @@ jobs: - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: 16.4 - name: Build release .app for simulators by @${{ github.actor }} run: | diff --git a/.github/workflows/build_tvos_simulator_app.yml b/.github/workflows/build_tvos_simulator_app.yml index 531f6853..6e198f2b 100644 --- a/.github/workflows/build_tvos_simulator_app.yml +++ b/.github/workflows/build_tvos_simulator_app.yml @@ -13,7 +13,7 @@ on: description: "Should a parent repo be used for customizations? (Required for branded builds)" runner-label: type: string - default: "macos-latest" + default: "macos-15" customizations_env_content: required: false type: string @@ -61,7 +61,7 @@ jobs: - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: 16.4 - name: Build release tvOS .app for simulators by @${{ github.actor }} run: | diff --git a/.github/workflows/deploy-static-main.yml b/.github/workflows/deploy-static-main.yml index 0dc61933..dd62e376 100644 --- a/.github/workflows/deploy-static-main.yml +++ b/.github/workflows/deploy-static-main.yml @@ -54,7 +54,7 @@ jobs: - name: Set macos runner id: set-macos-runner run: | - echo "runner-label=${{ vars.PREFERRED_MACOS_RUNNER || 'macos-latest' }}" >> $GITHUB_OUTPUT + echo "runner-label=${{ vars.PREFERRED_MACOS_RUNNER || 'macos-15' }}" >> $GITHUB_OUTPUT build_info: runs-on: ubuntu-latest diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index 446882fa..c3b2f398 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -17,7 +17,7 @@ on: description: Upload iOS (iphoneos) or tvOS (appletvos) app runner-label: type: string - default: "macos-latest" + default: "macos-15" customizations_env_content: required: false type: string @@ -135,7 +135,7 @@ jobs: - name: Setup Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: latest-stable + xcode-version: 16.4 - name: Build and archive app for upload to Testflight by @${{ github.actor }} env: diff --git a/CLAUDE.md b/CLAUDE.md index 12145abe..ce559b19 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -237,6 +237,16 @@ Examples: `cust-app-blender`, `cust-app-xrtube`, `cust-app-basspistol`, `cust-ap - App Store Connect and Google Play accounts - Certificate/signing keys in GitHub Secrets +### macOS Runner & Xcode Version + +iOS/tvOS build workflows pin both the macOS runner image and Xcode version to ensure compatibility with Expo SDK 52 / React Native 0.76: + +- **Xcode:** Pinned to `16.4` via `maxim-lobanov/setup-xcode@v1`. Do NOT use `latest-stable` — the `macos-15` runner now ships both Xcode 16.x and Xcode 26.3 RC, and `latest-stable` resolves to 26.x which is incompatible with React Native 0.76. Apple skipped versions 17–25 (jumped from 16 to 26). +- **Runner:** `macos-15` (default in reusable workflow inputs). Do NOT use `macos-latest` — it resolves to macOS 26. +- **Override:** The main repo can override the runner via `PREFERRED_MACOS_RUNNER` variable in the `owntube` environment. Downstream branded app repos use the default from the reusable workflow inputs. + +When upgrading Expo SDK or React Native, re-evaluate whether newer Xcode/runner versions are compatible and update the pins accordingly. + ### Environments 1. **`owntube` environment:** Stores sensitive secrets for app builds