Skip to content

Pin Xcode to 16.4 and default macOS runner to macos-15#488

Merged
ar9708 merged 1 commit intoOwnTube-tv:mainfrom
mblomdahl:fix/pin-xcode-16.4-and-macos-15-runner
Feb 24, 2026
Merged

Pin Xcode to 16.4 and default macOS runner to macos-15#488
ar9708 merged 1 commit intoOwnTube-tv:mainfrom
mblomdahl:fix/pin-xcode-16.4-and-macos-15-runner

Conversation

@ar9708
Copy link
Copy Markdown
Contributor

@ar9708 ar9708 commented Feb 24, 2026

Summary

  • Pin xcode-version from latest-stable back to 16.4 in all iOS/tvOS build workflows
  • Change default runner-label from macos-latest to macos-15 in reusable workflow inputs and deploy-static-main.yml fallback
  • Document macOS runner and Xcode version constraints in CLAUDE.md

Context

The macos-15 runner now ships Xcode 26.3 RC alongside 16.x, and latest-stable resolves to 26.3 RC — which is incompatible with Expo SDK 52 / React Native 0.76 (Apple skipped versions 17–25). This broke all iOS/tvOS builds in downstream branded app repos despite PREFERRED_MACOS_RUNNER already being set to macos-15.

Build log from cust-app-xrtube confirming the issue: https://github.com/OwnTube-tv/cust-app-xrtube/actions/runs/22347211910/job/64664815299

Reverts the latest-stable change from #463. Fixes #485.

Test plan

  • Trigger iOS simulator build from a downstream branded app repo (e.g. cust-app-xrtube) and verify it completes successfully
  • Verify grep -r "latest-stable" .github/workflows/ returns no results
  • Verify grep -r "macos-latest" .github/workflows/ returns no results from iOS/tvOS/deploy workflows

🤖 Generated with Claude Code

Reverts the `latest-stable` Xcode version introduced in OwnTube-tv#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 OwnTube-tv#485
Copy link
Copy Markdown
Contributor

@mblomdahl mblomdahl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Thanks AI robot" 😀

@ar9708 ar9708 merged commit 3645860 into OwnTube-tv:main Feb 24, 2026
3 checks passed
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes a critical CI/CD issue where iOS and tvOS builds were failing due to Xcode version incompatibility. The macos-15 runner now includes Xcode 26.3 RC alongside Xcode 16.x, and when latest-stable is used, it resolves to the incompatible 26.3 RC version. This PR reverts the Xcode version specification from latest-stable back to the pinned 16.4 version, and updates the default macOS runner from macos-latest to macos-15 for consistency.

Changes:

  • Pin Xcode version to 16.4 in all iOS/tvOS build workflows to ensure compatibility with Expo SDK 52 / React Native 0.76
  • Update default macOS runner from macos-latest to macos-15 in reusable workflow inputs and fallback configuration
  • Document the macOS runner and Xcode version constraints in CLAUDE.md to prevent future regressions

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
.github/workflows/testflight.yml Pin Xcode to 16.4 and change default runner to macos-15 for TestFlight builds
.github/workflows/build_ios_simulator_app.yml Pin Xcode to 16.4 and change default runner to macos-15 for iOS simulator builds
.github/workflows/build_tvos_simulator_app.yml Pin Xcode to 16.4 and change default runner to macos-15 for tvOS simulator builds
.github/workflows/deploy-static-main.yml Update fallback runner from macos-latest to macos-15
CLAUDE.md Document macOS runner and Xcode version constraints for future reference

Comment on lines +244 to +245
- **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.
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The statement "it resolves to macOS 26" is incorrect. The macos-latest runner resolves to the latest stable macOS version (currently macOS 14 or 15), not "macOS 26".

The confusion appears to be between macOS versions and Xcode versions. While Xcode did skip from version 16 to 26, macOS versions follow a different sequential pattern (macOS 11, 12, 13, 14, 15, etc.).

The actual issue is that macos-latest currently points to a runner that may have different Xcode versions available than macos-15, which could cause build inconsistencies. The documentation should clarify this distinction.

Suggested change
- **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.
- **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 Xcode 26.x which is incompatible with React Native 0.76. Apple skipped Xcode versions 17–25 (jumped from 16 to 26).
- **Runner:** `macos-15` (default in reusable workflow inputs). Do NOT use `macos-latest` — it resolves to the latest stable macOS version (currently macOS 15), which may expose different Xcode versions than `macos-15` and can cause build inconsistencies. Do not confuse macOS versioning with Xcode’s jump from 16 to 26.

Copilot uses AI. Check for mistakes.

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).
Copy link

Copilot AI Feb 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The statement "latest-stable resolves to 26.x" should be more specific. According to the issue description and PR context, it resolves to "Xcode 26.3 RC" (Release Candidate), not a general "26.x" version. Using "26.x" might imply any 26.x version would be problematic, when the specific issue is with the RC version that's currently marked as latest-stable.

Consider revising to: "latest-stable resolves to Xcode 26.3 RC which is incompatible..." for accuracy.

Suggested change
- **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).
- **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` currently resolves to Xcode 26.3 RC, which is incompatible with React Native 0.76. Apple skipped versions 17–25 (jumped from 16 to 26).

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Xcode latest-stable now resolves to Xcode 26.3 RC — breaks all iOS/tvOS builds

3 participants