Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
36504c3
fix: Xcode/OS matrices in reusable SPM and CP workflows
ncooke3 Jan 16, 2026
df64026
macos14 testing
ncooke3 Jan 16, 2026
34ea0b0
install sims
ncooke3 Jan 20, 2026
1a68866
Apply suggestion from @ncooke3
ncooke3 Jan 20, 2026
25a433e
Update .github/workflows/_cocoapods.yml
ncooke3 Jan 20, 2026
8a021d1
Update .github/workflows/_spm.yml
ncooke3 Jan 20, 2026
5e9ebe2
fix
ncooke3 Jan 20, 2026
0001c77
can't upload xcresult when build fails
ncooke3 Jan 20, 2026
c006e03
fix watchos
ncooke3 Jan 20, 2026
a29f62e
fix: scripts/setup_spm.sh should handle ghost commits (#15742)
ncooke3 Jan 20, 2026
82c49aa
Update .github/workflows/_cocoapods.yml
ncooke3 Jan 21, 2026
2a30b92
Update .github/workflows/_spm.yml
ncooke3 Jan 21, 2026
3fa9a86
Update _cocoapods.yml
ncooke3 Jan 21, 2026
6b438e1
Update _spm.yml
ncooke3 Jan 21, 2026
3b99235
Update _spm.yml
ncooke3 Jan 21, 2026
99700cc
Update _spm.yml
ncooke3 Jan 21, 2026
b3e48bf
fixes
ncooke3 Jan 21, 2026
22d7b6a
fixes
ncooke3 Jan 22, 2026
4551e7b
fixes
ncooke3 Jan 22, 2026
9ee7813
Apply suggestions from code review (1)
ncooke3 Jan 22, 2026
8b10083
Apply suggestion from @ncooke3
ncooke3 Jan 22, 2026
95a340c
Apply suggestion from @ncooke3
ncooke3 Jan 22, 2026
19fe58b
Apply suggestion from @ncooke3
ncooke3 Jan 22, 2026
9c59108
fix: skip builds earlier in _cocoapods.yml, when applicable (#15753)
ncooke3 Jan 23, 2026
4424478
Update scripts/setup_quickstart.sh
ncooke3 Jan 23, 2026
c9c7a06
Apply suggestion from @ncooke3
ncooke3 Jan 23, 2026
341db02
Apply suggestion from @ncooke3
ncooke3 Jan 23, 2026
2669c12
Move to Xcode 26.2
ncooke3 Jan 23, 2026
1eacb6f
Revert "Move to Xcode 26.2"
ncooke3 Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions .github/workflows/_cocoapods.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,27 +110,37 @@ 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:
# 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]
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
xcode: Xcode_16.2
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
Expand All @@ -142,6 +152,15 @@ 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.platform != 'macOS'
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
with:
timeout_minutes: 15
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'
run: echo "FIREBASE_CI=true" >> $GITHUB_ENV
Expand Down
25 changes: 19 additions & 6 deletions .github/workflows/_spm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,17 +95,20 @@ jobs:
env:
FIREBASE_IS_NIGHTLY_TESTING: ${{ inputs.is_nightly && '1' || '' }}
strategy:
fail-fast: false
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
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
Expand All @@ -115,6 +118,15 @@ 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.platform != 'macOS' && matrix.platform != 'catalyst'
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3
with:
timeout_minutes: 15
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 != ''
run: ${{ inputs.setup_command }}
Expand Down Expand Up @@ -144,4 +156,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
8 changes: 8 additions & 0 deletions .github/workflows/sdk.ai.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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: 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
2 changes: 1 addition & 1 deletion .github/workflows/sdk.firestore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions Crashlytics/UnitTests/FIRCLSUserDefaultsTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,6 @@ - (void)testDictionaryRepresentation {
NSDictionary* testDict = [_userDefaults dictionaryRepresentation];
NSLog(@"%@", testDict);

NSLog(@"foooo");
Copy link
Contributor

Choose a reason for hiding this comment

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

😆 I'm not sure we want to clean this up. I like it.


XCTAssertEqualObjects(testDict, expectedTestDict, @"");
}

Expand Down
21 changes: 14 additions & 7 deletions scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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(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;
# 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
Expand Down
15 changes: 14 additions & 1 deletion scripts/setup_quickstart.sh
Copy link
Member Author

Choose a reason for hiding this comment

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

Fixes a bug that reappeared in this PR where the quickstart script that updates the SPM dependency to point to this PR fails because Github creates a "ghost" commit that does not exist outside of the PR's CI context. This is a problem since the quickstart needs to point to a valid commit on the remote of the Firebase repo. This solution seems to work so far.

Original file line number Diff line number Diff line change
Expand Up @@ -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 -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)
fi
echo "Setting SPM dependency to current revision: ${current_revision}"
"$scripts_dir/update_firebase_spm_dependency.sh" \
"$absolute_project_file" --revision "$current_revision"
Expand Down
Loading