From 36504c3264c221a6c29ebe27a65307e7e19ed88b Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 16 Jan 2026 16:05:28 -0500 Subject: [PATCH 01/29] fix: Xcode/OS matrices in reusable SPM and CP workflows --- .github/workflows/_cocoapods.yml | 11 ++++++++--- .github/workflows/_spm.yml | 14 ++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 132db24a203..dc18e7cf075 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -122,11 +122,16 @@ jobs: if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) strategy: matrix: - os: [macos-15] - xcode: [Xcode_16.4] + os: [macos-15, macos-26] + xcode: [Xcode_16.4, Xcode_26.1] platform: [iOS, tvOS, macOS, watchOS] + exclude: + - os: macos-15 + xcode: Xcode_26.1 + - os: macos-26 + xcode: Xcode_16.4 include: - - os: macos-14 + - os: macos-15 xcode: Xcode_16.2 platform: iOS runs-on: ${{ matrix.os }} diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 6343839f8ae..05514df3fb9 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -96,16 +96,18 @@ jobs: FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }} strategy: matrix: - os: [macos-15] - xcode: [Xcode_16.4] + os: [macos-15, macos-26] + xcode: [Xcode_16.4, Xcode_26.1] platform: [iOS, tvOS, macOS, watchOS, catalyst, visionOS] + exclude: + - os: macos-15 + xcode: Xcode_26.1 + - os: macos-26 + xcode: Xcode_16.4 include: - - os: macos-14 + - os: macos-15 xcode: Xcode_16.2 platform: iOS - - os: macos-26 - xcode: Xcode_26.1 - platform: iOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 From df6402603a202e2f62b257ebc2b803e89a2d7fbe Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 16 Jan 2026 16:09:03 -0500 Subject: [PATCH 02/29] macos14 testing --- .github/workflows/_cocoapods.yml | 3 +++ .github/workflows/_spm.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index dc18e7cf075..14e1cd2aec1 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -134,6 +134,9 @@ jobs: - os: macos-15 xcode: Xcode_16.2 platform: iOS + - os: macos-14 + xcode: Xcode_16.2 + platform: iOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 05514df3fb9..f4a8fdf3e94 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -108,6 +108,9 @@ jobs: - os: macos-15 xcode: Xcode_16.2 platform: iOS + - os: macos-14 + xcode: Xcode_16.2 + platform: iOS runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 From 34ea0b0d599ab81d8e6d16a3a2f59eff170a428f Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 12:08:07 -0500 Subject: [PATCH 03/29] install sims --- .github/workflows/_cocoapods.yml | 8 ++++++++ .github/workflows/_spm.yml | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 14e1cd2aec1..aac877a3936 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -150,6 +150,14 @@ jobs: command: scripts/setup_bundler.sh - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer + - name: Install simulators in case they are missing. + if: matrix.target != 'macOS' + uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 + with: + timeout_minutes: 15 + max_attempts: 5 + retry_wait_seconds: 120 + command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Set conditional environment variable, if needed. if: inputs.product == 'FirebaseAuth' run: echo "FIREBASE_CI=true" >> $GITHUB_ENV diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index f4a8fdf3e94..135dc235682 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -120,6 +120,14 @@ jobs: key: ${{needs.spm-package-resolved.outputs.cache_key}} - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer + - name: Install simulators in case they are missing. + if: matrix.target != 'macOS' + uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 + with: + timeout_minutes: 15 + max_attempts: 5 + retry_wait_seconds: 120 + command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Run setup command, if needed. if: inputs.setup_command != '' run: ${{ inputs.setup_command }} From 1a688664068c9fb755375d388ace86e10d0bb13b Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:13:43 -0500 Subject: [PATCH 04/29] Apply suggestion from @ncooke3 --- .github/workflows/_spm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 135dc235682..e345c43bddc 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -121,7 +121,7 @@ jobs: - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer - name: Install simulators in case they are missing. - if: matrix.target != 'macOS' + if: matrix.target != 'macOS' && matrix.target != 'catalyst' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: timeout_minutes: 15 From 25a433e8ea38c08c215e8ffdaeb86fd63c3a825e Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:15:11 -0500 Subject: [PATCH 05/29] Update .github/workflows/_cocoapods.yml --- .github/workflows/_cocoapods.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index aac877a3936..95370956fc0 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -151,7 +151,7 @@ jobs: - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer - name: Install simulators in case they are missing. - if: matrix.target != 'macOS' + if: matrix.platform != 'macOS' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: timeout_minutes: 15 From 8a021d1ad0f401d69f66693a6b6abf691a4329f7 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 14:15:20 -0500 Subject: [PATCH 06/29] Update .github/workflows/_spm.yml --- .github/workflows/_spm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index e345c43bddc..6cf629e1dbc 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -121,7 +121,7 @@ jobs: - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer - name: Install simulators in case they are missing. - if: matrix.target != 'macOS' && matrix.target != 'catalyst' + if: matrix.platform != 'macOS' && matrix.platform != 'catalyst' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: timeout_minutes: 15 From 5e9ebe252da488f2cc8b8871e1a484a697fc4fc9 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Tue, 20 Jan 2026 16:20:47 -0500 Subject: [PATCH 07/29] fix --- scripts/build.sh | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index 171b15cb228..7e09e7664ca 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -191,12 +191,19 @@ macos_flags=( tvos_flags=( -destination 'platform=tvOS Simulator,name=Apple TV' ) -visionos_flags=( - # As of Aug 15, 2025, the default OS "latest" was failing as it matched both - # the visionOS 26 beta and visionOS 2.5 (from Xcode 16.4) simulators; - # explicitly specifying OS=2.5 in destination as a workaround. - -destination 'platform=visionOS Simulator,OS=2.5,name=Apple Vision Pro' -) +if [[ "$xcode_major" -ge 26 ]]; then + visionos_flags=( + -destination 'platform=visionOS Simulator,OS=latest,name=Apple Vision Pro' + ) +else + # TODO(visionOS): Remove this else case when we no longer need to test against macOS 15. + visionos_flags=( + # As of Aug 15, 2025, the default OS "latest" was failing as it matched both + # the visionOS 26 beta and visionOS 2.5 (from Xcode 16.4) simulators; + # explicitly specifying OS=2.5 in destination as a workaround. + -destination 'platform=visionOS Simulator,OS=2.5,name=Apple Vision Pro' + ) +fi catalyst_flags=( ARCHS=x86_64 VALID_ARCHS=x86_64 SUPPORTS_MACCATALYST=YES -destination platform="macOS,variant=Mac Catalyst,arch=x86_64" TARGETED_DEVICE_FAMILY=2 From 0001c7743e189e1dd0a70e5f8d6f2093005abe96 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 17:10:26 -0500 Subject: [PATCH 08/29] can't upload xcresult when build fails --- .github/workflows/_spm.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 6cf629e1dbc..5e8b86c5a05 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -157,4 +157,5 @@ jobs: with: name: xcresults-${{ inputs.target }}-${{ matrix.platform }}-${{ matrix.os }}-${{ matrix.xcode }} path: xcresults/* - if-no-files-found: error + # If build did not succeed, then xcresult won't exist. Warn for visibility. + if-no-files-found: warn From c006e038fc426113d79a2590ba2c4ca6f60f0016 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Tue, 20 Jan 2026 17:14:23 -0500 Subject: [PATCH 09/29] fix watchos --- scripts/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index 7e09e7664ca..418ec06acb1 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -173,7 +173,7 @@ else -destination "platform=iOS Simulator,name=${iphone_simulator_name}" ) watchos_flags=( - -destination 'platform=watchOS Simulator,name=Apple Watch Series 10 (42mm)' + -destination 'platform=watchOS Simulator,name=Apple Watch Series 11 (42mm)' ) fi From a29f62e7fce25088d62fd9eeff0799695020c584 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Tue, 20 Jan 2026 18:50:05 -0500 Subject: [PATCH 10/29] fix: scripts/setup_spm.sh should handle ghost commits (#15742) --- scripts/setup_quickstart.sh | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/scripts/setup_quickstart.sh b/scripts/setup_quickstart.sh index faf0224fec8..7d249bdd8f3 100755 --- a/scripts/setup_quickstart.sh +++ b/scripts/setup_quickstart.sh @@ -176,7 +176,20 @@ update_spm_dependency() { *) # For PR testing, point to the current commit. local current_revision - current_revision=$(git -C "$root_dir" rev-parse HEAD) + + # Detect if we are in a PR or a regular push + if [ "${GITHUB_EVENT_NAME:-}" == "pull_request" ]; then + if ! command -v jq &> /dev/null; then + echo "Error: jq is required for PR testing." >&2 + exit 1 + fi + # In a PR, read the real commit SHA from the event payload + # This guarantees a hash that exists on the remote server + current_revision=$(jq -r .pull_request.head.sha "${GITHUB_EVENT_PATH}") + else + # In a Push (or local run), HEAD is safe to use + current_revision=$(git -C "$root_dir" rev-parse HEAD) + fi echo "Setting SPM dependency to current revision: ${current_revision}" "$scripts_dir/update_firebase_spm_dependency.sh" \ "$absolute_project_file" --revision "$current_revision" From 82c49aa78862dc8f3acf30117fea241e78586621 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:35:05 -0500 Subject: [PATCH 11/29] Update .github/workflows/_cocoapods.yml --- .github/workflows/_cocoapods.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 95370956fc0..0eab62679c6 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -157,6 +157,7 @@ jobs: timeout_minutes: 15 max_attempts: 5 retry_wait_seconds: 120 + continue_on_error: true command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Set conditional environment variable, if needed. if: inputs.product == 'FirebaseAuth' From 2a30b92ac8f8f4d9b7aa80bfc20e75f5b056ac07 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:35:12 -0500 Subject: [PATCH 12/29] Update .github/workflows/_spm.yml --- .github/workflows/_spm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 5e8b86c5a05..6b2d50cd985 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -127,6 +127,7 @@ jobs: timeout_minutes: 15 max_attempts: 5 retry_wait_seconds: 120 + continue_on_error: true command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Run setup command, if needed. if: inputs.setup_command != '' From 3fa9a86f39d82cdff2a0854920f1c3012b86382d Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:38:53 -0500 Subject: [PATCH 13/29] Update _cocoapods.yml --- .github/workflows/_cocoapods.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 0eab62679c6..7d66ddf5638 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -121,6 +121,7 @@ jobs: # Run on the main repo's scheduled jobs or pull requests and manual workflow invocations. if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) strategy: + fail-fast: false matrix: os: [macos-15, macos-26] xcode: [Xcode_16.4, Xcode_26.1] From 6b438e1ff5b690e1fa3825678d79c1ae90d576c4 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:39:16 -0500 Subject: [PATCH 14/29] Update _spm.yml --- .github/workflows/_spm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 6b2d50cd985..7236c0380bf 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -95,6 +95,7 @@ jobs: env: FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }} strategy: + fail-fast: false matrix: os: [macos-15, macos-26] xcode: [Xcode_16.4, Xcode_26.1] From 3b992356b3505c696d87851fc9b959000fc676ce Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:41:37 -0500 Subject: [PATCH 15/29] Update _spm.yml --- .github/workflows/_spm.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 7236c0380bf..02732f3b714 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -91,6 +91,7 @@ jobs: spm: # Run on the main repo's scheduled jobs or pull requests and manual workflow invocations. if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) + name: inputs.target (matrix.os, matrix.xcode, matrix.platform) needs: [spm-package-resolved] env: FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }} From 99700cc5b9126e0a3f142ad267e21a09c11c03da Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 09:45:20 -0500 Subject: [PATCH 16/29] Update _spm.yml --- .github/workflows/_spm.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 02732f3b714..0494c3156d4 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -65,6 +65,7 @@ on: jobs: spm-package-resolved: + name: spm-package-resolved / ${{ inputs.target }} env: FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 runs-on: macos-15 @@ -91,7 +92,7 @@ jobs: spm: # Run on the main repo's scheduled jobs or pull requests and manual workflow invocations. if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) - name: inputs.target (matrix.os, matrix.xcode, matrix.platform) + name: spm / ${{ inputs.target }} needs: [spm-package-resolved] env: FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }} From b3e48bf1537c7fcc7ec6fd35bbd80d247a8960f2 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Wed, 21 Jan 2026 15:37:20 -0500 Subject: [PATCH 17/29] fixes --- .github/workflows/_cocoapods.yml | 4 ++-- .github/workflows/_spm.yml | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 7d66ddf5638..1f55ad2b60b 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -155,11 +155,11 @@ jobs: if: matrix.platform != 'macOS' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: - timeout_minutes: 15 + timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 continue_on_error: true - command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} + command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Set conditional environment variable, if needed. if: inputs.product == 'FirebaseAuth' run: echo "FIREBASE_CI=true" >> $GITHUB_ENV diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 0494c3156d4..48577600385 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -65,7 +65,6 @@ on: jobs: spm-package-resolved: - name: spm-package-resolved / ${{ inputs.target }} env: FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 runs-on: macos-15 @@ -92,7 +91,6 @@ jobs: spm: # Run on the main repo's scheduled jobs or pull requests and manual workflow invocations. if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) - name: spm / ${{ inputs.target }} needs: [spm-package-resolved] env: FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }} @@ -127,11 +125,11 @@ jobs: if: matrix.platform != 'macOS' && matrix.platform != 'catalyst' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: - timeout_minutes: 15 + timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 continue_on_error: true - command: sudo xcodebuild -downloadPlatform ${{ matrix.platform }} + command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Run setup command, if needed. if: inputs.setup_command != '' run: ${{ inputs.setup_command }} From 22d7b6a596a6e94d596e7453406bbce9eb405c56 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:59:34 -0500 Subject: [PATCH 18/29] fixes --- .github/workflows/_cocoapods.yml | 4 ++-- .github/workflows/sdk.ai.yml | 8 ++++++++ .github/workflows/sdk.firestore.yml | 2 +- Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m | 2 -- 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 1f55ad2b60b..7c7f7ddf72c 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -110,11 +110,11 @@ on: required: false default: "" - # The timeout (in minutes) for the linting to complete. Defaults to 15. + # The timeout (in minutes) for the linting to complete. Defaults to 20. timeout_minutes: type: number required: false - default: 15 + default: 20 jobs: pod-lib-lint: diff --git a/.github/workflows/sdk.ai.yml b/.github/workflows/sdk.ai.yml index e016b015869..9d480cf14da 100644 --- a/.github/workflows/sdk.ai.yml +++ b/.github/workflows/sdk.ai.yml @@ -96,5 +96,13 @@ jobs: - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - name: Xcode run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer + - name: Install simulators in case they are missing. + uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 + with: + timeout_minutes: 5 + max_attempts: 5 + retry_wait_seconds: 120 + continue_on_error: true + command: xcodebuild -downloadPlatform iOS - name: Build Quickstart run: scripts/quickstart_build_spm.sh FirebaseAI diff --git a/.github/workflows/sdk.firestore.yml b/.github/workflows/sdk.firestore.yml index 0e04ed5ee06..33a5007731b 100644 --- a/.github/workflows/sdk.firestore.yml +++ b/.github/workflows/sdk.firestore.yml @@ -390,7 +390,7 @@ jobs: platforms: iOS allow_warnings: true analyze: false # TODO(#9565, b/227461966): Remove when absl is fixed. - timeout_minutes: 30 + timeout_minutes: 40 # `pod lib lint` takes a long time so only run the other platforms and static frameworks build in the cron. pod-lib-lint-cron: diff --git a/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m b/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m index e310d85121c..4a06a6ee210 100644 --- a/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m +++ b/Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m @@ -72,8 +72,6 @@ - (void)testDictionaryRepresentation { NSDictionary* testDict = [_userDefaults dictionaryRepresentation]; NSLog(@"%@", testDict); - NSLog(@"foooo"); - XCTAssertEqualObjects(testDict, expectedTestDict, @""); } From 4551e7b29b2a93a866007845f708bff74366eefa Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 10:01:42 -0500 Subject: [PATCH 19/29] fixes --- .github/workflows/_cocoapods.yml | 1 - .github/workflows/_spm.yml | 1 - .github/workflows/sdk.ai.yml | 1 - 3 files changed, 3 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 7c7f7ddf72c..285a90a6c6d 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -158,7 +158,6 @@ jobs: timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 - continue_on_error: true command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Set conditional environment variable, if needed. if: inputs.product == 'FirebaseAuth' diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 48577600385..7836c45ae85 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -128,7 +128,6 @@ jobs: timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 - continue_on_error: true command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Run setup command, if needed. if: inputs.setup_command != '' diff --git a/.github/workflows/sdk.ai.yml b/.github/workflows/sdk.ai.yml index 9d480cf14da..fa69e7d5777 100644 --- a/.github/workflows/sdk.ai.yml +++ b/.github/workflows/sdk.ai.yml @@ -102,7 +102,6 @@ jobs: timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 - continue_on_error: true command: xcodebuild -downloadPlatform iOS - name: Build Quickstart run: scripts/quickstart_build_spm.sh FirebaseAI From 9ee78132dbfcbacebb81a57d12a24b12c34370ce Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:18:26 -0500 Subject: [PATCH 20/29] Apply suggestions from code review (1) --- .github/workflows/_cocoapods.yml | 1 + .github/workflows/_spm.yml | 1 + .github/workflows/sdk.ai.yml | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 285a90a6c6d..7c7f7ddf72c 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -158,6 +158,7 @@ jobs: timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 + continue_on_error: true command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Set conditional environment variable, if needed. if: inputs.product == 'FirebaseAuth' diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 7836c45ae85..48577600385 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -128,6 +128,7 @@ jobs: timeout_minutes: 5 max_attempts: 5 retry_wait_seconds: 120 + continue_on_error: true command: xcodebuild -downloadPlatform ${{ matrix.platform }} - name: Run setup command, if needed. if: inputs.setup_command != '' diff --git a/.github/workflows/sdk.ai.yml b/.github/workflows/sdk.ai.yml index fa69e7d5777..d57ac7a0b47 100644 --- a/.github/workflows/sdk.ai.yml +++ b/.github/workflows/sdk.ai.yml @@ -99,9 +99,10 @@ jobs: - name: Install simulators in case they are missing. uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: - timeout_minutes: 5 + timeout_minutes: 15 max_attempts: 5 retry_wait_seconds: 120 + continue_on_error: true command: xcodebuild -downloadPlatform iOS - name: Build Quickstart run: scripts/quickstart_build_spm.sh FirebaseAI From 8b100836eb634a463ff568854d0fed89666a4ad1 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:19:08 -0500 Subject: [PATCH 21/29] Apply suggestion from @ncooke3 --- .github/workflows/_spm.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 48577600385..760dbc9aa20 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -125,7 +125,7 @@ jobs: if: matrix.platform != 'macOS' && matrix.platform != 'catalyst' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: - timeout_minutes: 5 + timeout_minutes: 15 max_attempts: 5 retry_wait_seconds: 120 continue_on_error: true From 95a340cb6a60b2e1072b439ad885ec2579ee8b05 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:19:20 -0500 Subject: [PATCH 22/29] Apply suggestion from @ncooke3 --- .github/workflows/_cocoapods.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 7c7f7ddf72c..68640b2e74a 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -155,7 +155,7 @@ jobs: if: matrix.platform != 'macOS' uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 with: - timeout_minutes: 5 + timeout_minutes: 15 max_attempts: 5 retry_wait_seconds: 120 continue_on_error: true From 19fe58bfa68eae459b608fc935f2c73371e89712 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Thu, 22 Jan 2026 18:23:26 -0500 Subject: [PATCH 23/29] Apply suggestion from @ncooke3 --- scripts/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index 418ec06acb1..476dd19eb86 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -196,7 +196,7 @@ if [[ "$xcode_major" -ge 26 ]]; then -destination 'platform=visionOS Simulator,OS=latest,name=Apple Vision Pro' ) else - # TODO(visionOS): Remove this else case when we no longer need to test against macOS 15. + # TODO(ncooke3): Remove this else case when we no longer need to test against macOS 15. visionos_flags=( # As of Aug 15, 2025, the default OS "latest" was failing as it matched both # the visionOS 26 beta and visionOS 2.5 (from Xcode 16.4) simulators; From 9c59108c0d94621d607b98360ccf2c6d3a163b25 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 23 Jan 2026 09:43:43 -0500 Subject: [PATCH 24/29] fix: skip builds earlier in _cocoapods.yml, when applicable (#15753) --- .github/workflows/_cocoapods.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 68640b2e74a..9c9dd759b15 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -140,6 +140,10 @@ jobs: platform: iOS runs-on: ${{ matrix.os }} steps: + - name: Skip, if applicable. + # Skip matrix combinations that weren't requested, while preserving the specific macos-14 / iOS inclusion. + if: contains(join(inputs.platforms), matrix.platform) == false && matrix.os != 'macos-14' + run: exit 0 - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1 - name: Setup Bundler From 4424478cc4fd536fb3ac8d7f48acd33dd9ecf03f Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:07:16 -0500 Subject: [PATCH 25/29] Update scripts/setup_quickstart.sh Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- scripts/setup_quickstart.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_quickstart.sh b/scripts/setup_quickstart.sh index 7d249bdd8f3..ed10c1c8003 100755 --- a/scripts/setup_quickstart.sh +++ b/scripts/setup_quickstart.sh @@ -185,7 +185,7 @@ update_spm_dependency() { fi # In a PR, read the real commit SHA from the event payload # This guarantees a hash that exists on the remote server - current_revision=$(jq -r .pull_request.head.sha "${GITHUB_EVENT_PATH}") + current_revision=$(jq -er .pull_request.head.sha "${GITHUB_EVENT_PATH}") else # In a Push (or local run), HEAD is safe to use current_revision=$(git -C "$root_dir" rev-parse HEAD) From c9c7a06c5f99079a0696e3f1ea69a977d7f83c7e Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:12:16 -0500 Subject: [PATCH 26/29] Apply suggestion from @ncooke3 --- .github/workflows/_spm.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 760dbc9aa20..0b3f510cca5 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -106,9 +106,6 @@ jobs: - os: macos-26 xcode: Xcode_16.4 include: - - os: macos-15 - xcode: Xcode_16.2 - platform: iOS - os: macos-14 xcode: Xcode_16.2 platform: iOS From 341db028ef2b6dbca3cffaaadb8db8d07a9d7b17 Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 23 Jan 2026 11:12:24 -0500 Subject: [PATCH 27/29] Apply suggestion from @ncooke3 --- .github/workflows/_cocoapods.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 9c9dd759b15..9e8778e2382 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -132,9 +132,6 @@ jobs: - os: macos-26 xcode: Xcode_16.4 include: - - os: macos-15 - xcode: Xcode_16.2 - platform: iOS - os: macos-14 xcode: Xcode_16.2 platform: iOS From 2669c126bdf880983bb5764ac846476797756fbc Mon Sep 17 00:00:00 2001 From: Nick Cooke <36927374+ncooke3@users.noreply.github.com> Date: Fri, 23 Jan 2026 13:15:12 -0500 Subject: [PATCH 28/29] Move to Xcode 26.2 --- .github/workflows/_cocoapods.yml | 4 ++-- .github/workflows/_spm.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 9e8778e2382..4cd280bdd02 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -124,11 +124,11 @@ jobs: fail-fast: false matrix: os: [macos-15, macos-26] - xcode: [Xcode_16.4, Xcode_26.1] + xcode: [Xcode_16.4, Xcode_26.2] platform: [iOS, tvOS, macOS, watchOS] exclude: - os: macos-15 - xcode: Xcode_26.1 + xcode: Xcode_26.2 - os: macos-26 xcode: Xcode_16.4 include: diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index 0b3f510cca5..b8a75e1285f 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -98,11 +98,11 @@ jobs: fail-fast: false matrix: os: [macos-15, macos-26] - xcode: [Xcode_16.4, Xcode_26.1] + xcode: [Xcode_16.4, Xcode_26.2] platform: [iOS, tvOS, macOS, watchOS, catalyst, visionOS] exclude: - os: macos-15 - xcode: Xcode_26.1 + xcode: Xcode_26.2 - os: macos-26 xcode: Xcode_16.4 include: From 1eacb6f67d48aac80a1c24c479d13ca6e3084be2 Mon Sep 17 00:00:00 2001 From: Nick Cooke Date: Fri, 23 Jan 2026 14:12:49 -0500 Subject: [PATCH 29/29] Revert "Move to Xcode 26.2" This reverts commit 2669c126bdf880983bb5764ac846476797756fbc. --- .github/workflows/_cocoapods.yml | 4 ++-- .github/workflows/_spm.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/_cocoapods.yml b/.github/workflows/_cocoapods.yml index 4cd280bdd02..9e8778e2382 100644 --- a/.github/workflows/_cocoapods.yml +++ b/.github/workflows/_cocoapods.yml @@ -124,11 +124,11 @@ jobs: fail-fast: false matrix: os: [macos-15, macos-26] - xcode: [Xcode_16.4, Xcode_26.2] + xcode: [Xcode_16.4, Xcode_26.1] platform: [iOS, tvOS, macOS, watchOS] exclude: - os: macos-15 - xcode: Xcode_26.2 + xcode: Xcode_26.1 - os: macos-26 xcode: Xcode_16.4 include: diff --git a/.github/workflows/_spm.yml b/.github/workflows/_spm.yml index b8a75e1285f..0b3f510cca5 100644 --- a/.github/workflows/_spm.yml +++ b/.github/workflows/_spm.yml @@ -98,11 +98,11 @@ jobs: fail-fast: false matrix: os: [macos-15, macos-26] - xcode: [Xcode_16.4, Xcode_26.2] + xcode: [Xcode_16.4, Xcode_26.1] platform: [iOS, tvOS, macOS, watchOS, catalyst, visionOS] exclude: - os: macos-15 - xcode: Xcode_26.2 + xcode: Xcode_26.1 - os: macos-26 xcode: Xcode_16.4 include: