From ed84bdafa808753ee815e6ced384d6ce6753fb34 Mon Sep 17 00:00:00 2001 From: Mats Blomdahl Date: Tue, 24 Feb 2026 18:55:39 +0100 Subject: [PATCH] Pin Xcode to 16.4 and default macOS runner to macos-15 Reverts the `latest-stable` Xcode version introduced in #463 back to pinned 16.4, and changes the default runner-label from `macos-latest` to `macos-15` (which ships with Xcode 16.4). The `macos-latest` label now resolves to macOS 26 runners with Xcode 26.x, which is incompatible with Expo SDK 52 / React Native 0.76. Fixes #485 --- .github/workflows/build_ios_simulator_app.yml | 4 ++-- .github/workflows/build_tvos_simulator_app.yml | 4 ++-- .github/workflows/deploy-static-main.yml | 2 +- .github/workflows/testflight.yml | 4 ++-- CLAUDE.md | 10 ++++++++++ 5 files changed, 17 insertions(+), 7 deletions(-) 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