Skip to content

Add Xcode 26 CI jobs for iOS and macOS - #1642

Merged
CedricGuillemet merged 5 commits into
BabylonJS:masterfrom
CedricGuillemet:test/xcode-26
Apr 20, 2026
Merged

CedricGuillemet merged 5 commits into
BabylonJS:masterfrom
CedricGuillemet:test/xcode-26

Conversation

@CedricGuillemet

@CedricGuillemet CedricGuillemet commented Mar 20, 2026 •

Copy link
Copy Markdown
Collaborator

Add iOS and macOS build jobs targeting Xcode 26

@CedricGuillemet
CedricGuillemet force-pushed the test/xcode-26 branch 3 times, most recently from 57dbd1b to 08f1008 Compare March 20, 2026 17:03
@CedricGuillemet
CedricGuillemet marked this pull request as ready for review March 23, 2026 10:57
Copilot AI review requested due to automatic review settings March 23, 2026 10:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

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 updates the Azure DevOps pipeline and Apple platform code to support selecting specific Xcode versions per job (including new Xcode 26-targeting jobs) and to address iOS 26 deprecations in a few UIKit API usages.

Changes:

  • Add an xcodeVersion parameter to iOS/macOS CI job templates and switch Xcode selection to use that parameter.
  • Add new macOS and iOS pipeline jobs intended to run under “Xcode 26”.
  • Update iOS orientation and display-scale retrieval code paths to use newer APIs when running on iOS 26.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 6 comments.

Show a summary per file
File Description
azure-pipelines.yml Removes global Xcode version var; passes explicit xcodeVersion into Apple job templates; adds “Xcode 26” jobs.
.github/jobs/macos.yml Adds xcodeVersion parameter and uses it for xcode-select.
.github/jobs/ios.yml Adds xcodeVersion parameter and uses it for xcode-select.
.github/jobs/test_install_macos.yml Adds xcodeVersion parameter and uses it for xcode-select in installation tests.
.github/jobs/test_install_ios.yml Adds xcodeVersion parameter and uses it for xcode-select in installation tests.
Plugins/NativeCamera/Source/Apple/CameraDevice.mm Uses iOS 26+ orientation API (effectiveGeometry) with deprecated fallback suppressed.
Dependencies/xr/Source/ARKit/XR.mm Same iOS 26+ orientation API update as NativeCamera.
Core/Graphics/Source/DeviceImpl_iOS.mm Avoids deprecated UIScreen.mainScreen on newer iOS by reading display scale from a window scene when possible.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/jobs/macos.yml Outdated
Comment thread .github/jobs/ios.yml Outdated
Comment thread .github/jobs/test_install_macos.yml Outdated
Comment thread .github/jobs/test_install_ios.yml Outdated
Comment thread azure-pipelines.yml Outdated
Comment thread Core/Graphics/Source/DeviceImpl_iOS.mm Outdated
@CedricGuillemet
CedricGuillemet requested a review from bghgary March 23, 2026 15:04
Comment thread Core/Graphics/Source/DeviceImpl_iOS.mm
Comment thread Plugins/NativeCamera/Source/Apple/CameraDevice.mm Outdated
Comment thread azure-pipelines.yml Outdated
@CedricGuillemet
CedricGuillemet requested a review from bghgary March 27, 2026 14:46
CedricGuillemet and others added 4 commits April 16, 2026 10:42
Use effectiveGeometry.interfaceOrientation on iOS 26+ while keeping
the old interfaceOrientation call for earlier iOS versions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use effectiveGeometry.interfaceOrientation on iOS 26+ with pragma
guards around the old API for older iOS versions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace deprecated UIScreen.mainScreen.scale with
UIWindowScene.traitCollection.displayScale (iOS 17+).
Retains a pragma-suppressed fallback for older iOS versions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add xcode-version input to build-ios, build-macos, test-install-ios,
and test-install-macos reusable workflows (defaults to 16.4).
Add MacOS_Xcode26 and iOS_Xcode26 jobs targeting Xcode 26.4.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

@bghgary bghgary left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[Review by Copilot on behalf of @bghgary]

Looks good to me. Still waiting on my earlier displayScale question.

@bghgary bghgary left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[Approved by Copilot on behalf of @bghgary]

bghgary added a commit to bghgary/JsRuntimeHost that referenced this pull request Apr 17, 2026
Add macOS_Xcode26 and iOS_Xcode26 jobs on the macos-26 runner with
Xcode 26.4 (iPhone 17 simulator for iOS). Remove iOS_Xcode152 which
ran on the soon-to-be-retired macos-14 runner.

Mirrors BabylonJS/BabylonNative#1642. No source changes needed —
JsRuntimeHost has no iOS UI code affected by the iOS 26 deprecations.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
bghgary added a commit to BabylonJS/JsRuntimeHost that referenced this pull request Apr 17, 2026
[Created by Copilot on behalf of @bghgary]

Add CI coverage for Xcode 26 (`macos-26` runner) and drop Xcode 15.2.

## Changes

- **Added** `macOS_Xcode264` — builds + tests on `macos-26` with Xcode
26.4.
- **Added** `macOS_Xcode264_Sanitizers` — ASan/UBSan on `macos-26` with
Xcode 26.4.
- **Added** `macOS_Xcode264_ThreadSanitizer` — TSan on `macos-26` with
Xcode 26.4.
- **Added** `iOS_Xcode264` — builds + tests on `macos-26` with Xcode
26.4, iPhone 17 simulator.
- **Removed** `iOS_Xcode152` — the `macos-14` runner and Xcode 15.2 are
on their way to being retired; Xcode 16.4 (`macos-latest`) is our
baseline and Xcode 26 now exercises the latest toolchain.

The Xcode 16.4 sanitizer jobs are retained alongside the new 26.4
sanitizer jobs. Major Xcode bumps have historically introduced
sanitizer-runtime regressions (instrumentation gaps as the toolchain
catches up to new system libraries), and TSan on arm64 is less
battle-tested than on x86. Running both lets us catch regressions on the
newer toolchain without losing coverage if Xcode 26 has sanitizer
issues. Once Xcode 26 sanitizers have been stable for a while, the 16.4
sanitizer jobs can be dropped.

Mirrors the approach taken in BabylonJS/BabylonNative#1642. No source
changes were needed — JsRuntimeHost has no iOS/macOS UI code (no
`UIScreen.mainScreen`, `connectedScenes`, or `statusBarOrientation`
usages), so the iOS 26 deprecations addressed in #1642 don't apply here.

## Dropping Xcode 15.2

Xcode 15.2 coverage came from the `macos-14` runner, which is being
phased out on GitHub Actions. With `macos-latest` pinned to Xcode 16.4
and the new `macos-26` job exercising Xcode 26.4, the 15.2 slot is
redundant and unsupported.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@CedricGuillemet
CedricGuillemet merged commit 167daf3 into BabylonJS:master Apr 20, 2026
53 of 54 checks passed
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.

3 participants