Repository navigation
ci: require Xcode 26.2 as the minimum version - #1876
Merged
Merged
Conversation
Firebase now requires Xcode 26.2, so drop Xcode 16 support from CI, scripts, and sample code. - Bump the Xcode matrix and hardcoded paths from 16.4 to 26.2. - Select Xcode explicitly in jobs that used the runner default. The macOS-15 runner defaults to Xcode 16.4, so the matrix bump alone only changed the job names. - Make test.sh and build-for-testing.sh exit on Xcode < 26 and remove the Xcode 16 device defaults. - Replace the no-op sudo xcode-select in test.sh with xcode-select -p, matching build-for-testing.sh. - Remove the unused ios_version and DEVICE variables. - Remove the Swift < 6.2 allowBluetoothHFP shim from AudioController.swift.
Contributor
There was a problem hiding this comment.
Code Review
This pull request simplifies Xcode version checks and device configuration across testing scripts, removing dynamic iPhone versioning in favor of a hardcoded "iPhone 17 Pro" default, and cleans up compiler-version-specific extensions in AudioController.swift. Feedback on scripts/test.sh highlights a potential crash due to an unbound variable error when OS is explicitly set but DEVICE is not, suggesting to decouple the defaulting of DEVICE from OS.
zizmor's unpinned-uses policy requires actions to be pinned to a commit hash. Pin actions/checkout@master to v6.0.1, matching the existing pins in firebaseai.yml and check.yml, and pin actions/cache@v4 to v4.3.0, the commit v4 currently points to.
test.sh only defaulted DEVICE when OS was also unset, so running it with OS=iOS and no DEVICE exited on an unbound variable under set -u. Default DEVICE to iPhone 17 Pro whenever OS is iOS and DEVICE is unset. Callers that set both or neither are unaffected. Suggested in code review by gemini-code-assist.
andrewheard
marked this pull request as ready for review
October 15, 2026 19:55
ncooke3
approved these changes
Oct 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Firebase now requires Xcode 26.2 or later. This PR moves the quickstart CI to Xcode 26.2 and removes Xcode 16 workarounds from the scripts and sample code.
Changes
Workflows (
.github/workflows/)matrix.xcodefrom16.4to26.2inabtesting,analytics,crashlytics,database,functions,performanceandstorage.Xcode_16.4.apppath inauthentication.ymltoXcode_26.2.app.xcode-selectstep to every job that was using the runner's default Xcode:abtesting,crashlytics,database,functions,performance,storage):sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developerconfig,databasespm-buildonly,firestore,inappmessaging,installations,messaging,performancespm-buildonly):sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/DeveloperImportant
The
macOS-15runner image still defaults to Xcode 16.4 (seetoolset-15.json). Without an explicitxcode-select, bumpingmatrix.xcodewould only change the job name, and the build would still use 16.4.scripts/test.shdoesn't switch Xcode itself.Scripts (
scripts/)test.shandbuild-for-testing.shnow exit withUnsupported Xcode versionif Xcode is older than 26. The Xcode 16 branches are gone.test.sh: replaced thesudo xcode-select -sblock, which re-selected the Xcode that was already active, withxcode-select -pto matchbuild-for-testing.sh. Xcode is now selected only in the workflows.test.sh: removed the unusedios_versionvariable. The default device is stilliPhone 17 Pro.build-for-testing.sh: removed the unusediphone_versionandDEVICEdefaults. This script always builds forgeneric/platform=iOS.Sample code
firebaseai/.../AudioController.swift: removed the#if compiler(<6.2)shim forAVAudioSession.CategoryOptions.allowBluetoothHFP. It was added in fix: Restore Xcode 16 testing for AI QS #1828 for Xcode 16, and Xcode 26.2 ships Swift 6.2 or later.Downstream impact
The firebase-ios-sdk
_quickstart.ymlworkflow runs this repo'sscripts/test.shonmacos-26, after selecting Xcode 26.4 itself. It doesn't setOSorDEVICE, so it still gets the same default device (iPhone 17 Pro). I don't expect any change in behavior.Testing
bash -npasses forscripts/test.shandscripts/build-for-testing.sh.What to watch in CI
The
macOS-15jobs still useiPhone 16simulators (andconfig.ymlboots"iPhone 16"). The runner installs the iOS 26.2 simulator runtime with Xcode 26.2.firebaseai.ymlalready runsiPhone 16with Xcode 26.2 onmacos-15, so I expect these to work. If any job fails with "unable to find a destination", switch that job to aniPhone 17model or add axcodebuild -downloadPlatform iOSstep.