Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 2 additions & 8 deletions .github/workflows/all_plugins.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,13 @@ jobs:
swift-integration-ios:
needs: changes
if: needs.changes.outputs.ios == 'true'
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: 35
env:
FLUTTER_DEPENDENCIES: "cloud_firestore firebase_remote_config cloud_functions firebase_database firebase_auth firebase_storage firebase_analytics firebase_messaging firebase_app_check firebase_in_app_messaging firebase_performance firebase_crashlytics firebase_ml_model_downloader firebase_app_installations firebase_ai"
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
Expand All @@ -219,16 +216,13 @@ jobs:
swift-integration-macos:
needs: changes
if: needs.changes.outputs.macos == 'true'
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: 35
env:
FLUTTER_DEPENDENCIES: "cloud_firestore firebase_remote_config cloud_functions firebase_database firebase_auth firebase_storage firebase_analytics firebase_messaging firebase_app_check firebase_in_app_messaging firebase_performance firebase_crashlytics firebase_ml_model_downloader firebase_app_installations firebase_ai"
PR_HEAD_REPO: ${{ github.event.pull_request.head.repo.full_name }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
node: 'false'
Expand Down
15 changes: 6 additions & 9 deletions .github/workflows/e2e_tests_fdc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -126,13 +126,10 @@ jobs:
path: ~/.cache/firebase/emulators

ios:
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: ${{ inputs.nightly_test_mode && 5 || 45 }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
npm-cache: 'false'
Expand All @@ -143,7 +140,7 @@ jobs:
- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03
name: Xcode Compile Cache
with:
key: xcode-cache-${{ runner.os }}
key: xcode-cache-${{ runner.os }}-xcode27
save: "${{ github.ref == 'refs/heads/main' }}"
max-size: 700M
- uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
Expand All @@ -156,8 +153,8 @@ jobs:
# tests/pubspec.lock is gitignored, so the old key hashed nothing and
# the cache never invalidated. Key on the files that actually pin the
# native SDK version instead.
key: ${{ runner.os }}-fdc-pods-v2-${{ hashFiles('packages/firebase_data_connect/firebase_data_connect/example/ios/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: ${{ runner.os }}-fdc-pods-v2-
key: ${{ runner.os }}-fdc-pods-v3-${{ hashFiles('packages/firebase_data_connect/firebase_data_connect/example/ios/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: ${{ runner.os }}-fdc-pods-v3-
- name: Firebase Emulator Cache
id: firebase-emulator-cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
Expand Down Expand Up @@ -190,8 +187,8 @@ jobs:
- uses: futureware-tech/simulator-action@e89aa8f93d3aec35083ff49d2854d07f7186f7f5
id: simulator
with:
# https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#installed-simulators
model: "iPhone 16"
# https://github.com/actions/runner-images/blob/main/images/macos/xcode-27-arm64-Readme.md#installed-simulators
model: "iPhone 17"
Comment thread
SelaseKay marked this conversation as resolved.
- name: Ensure Simulator Ready
env:
SIMULATOR: ${{ steps.simulator.outputs.udid }}
Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/e2e_tests_pipeline.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -165,13 +165,10 @@ jobs:
github.event_name != 'pull_request' ||
(github.event.pull_request.head.repo.full_name == github.repository &&
github.actor != 'dependabot[bot]')
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: 50
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
npm-cache: 'false'
Expand Down Expand Up @@ -209,8 +206,8 @@ jobs:
- uses: futureware-tech/simulator-action@e89aa8f93d3aec35083ff49d2854d07f7186f7f5
id: simulator
with:
# https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#installed-simulators
model: "iPhone 16"
# https://github.com/actions/runner-images/blob/main/images/macos/xcode-27-arm64-Readme.md#installed-simulators
model: "iPhone 17"
- name: Build iOS (simulator)
working-directory: packages/cloud_firestore/cloud_firestore/pipeline_example
# A cold SwiftPM fetch (grpc/abseil binaries) plus the Xcode build has
Expand Down
30 changes: 12 additions & 18 deletions .github/workflows/e2e_tests_smoke.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -203,13 +203,10 @@ jobs:
if: needs.changes.outputs.ios == 'true'
permissions:
contents: read
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: ${{ inputs.nightly_test_mode && 5 || 35 }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
firebase-tools-version: '15.25.1'
Expand All @@ -221,9 +218,9 @@ jobs:
- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03
name: Xcode Compile Cache
with:
# Distinct from the macOS job's key: both run on macos-15, so a shared
# Distinct from the macOS job's key: both run on xcode-27, so a shared
# `xcode-cache-${{ runner.os }}` had the two jobs clobbering each other.
key: xcode-ccache-ios
key: xcode-ccache-ios-xcode27
save: "${{ github.ref == 'refs/heads/main' }}"
max-size: 700M
- uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
Expand All @@ -236,8 +233,8 @@ jobs:
# Keyed on the Podfile and the pinned Firebase SDK version, not tests/pubspec.lock:
# that file is gitignored, so hashFiles() returned an empty string and the key
# never changed - the cache could never be invalidated.
key: pods-v4-${{ runner.os }}-ios-${{ hashFiles('tests/ios/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v4-${{ runner.os }}-ios-
key: pods-v5-${{ runner.os }}-ios-${{ hashFiles('tests/ios/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v5-${{ runner.os }}-ios-
- name: Firebase Emulator Cache
id: firebase-emulator-cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
Expand Down Expand Up @@ -273,8 +270,8 @@ jobs:
- uses: futureware-tech/simulator-action@e89aa8f93d3aec35083ff49d2854d07f7186f7f5
id: simulator
with:
# List of available simulators: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#installed-simulators
model: "iPhone 16"
# List of available simulators: https://github.com/actions/runner-images/blob/main/images/macos/xcode-27-arm64-Readme.md#installed-simulators
model: "iPhone 17"
- name: Ensure Simulator Ready
timeout-minutes: 13
env:
Expand Down Expand Up @@ -326,13 +323,10 @@ jobs:
if: needs.changes.outputs.macos == 'true'
permissions:
contents: read
runs-on: macos-15
runs-on: xcode-27
timeout-minutes: ${{ inputs.nightly_test_mode && 5 || 35 }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
- name: Xcode
# Firebase iOS SDK: minimum Xcode 26.2.
run: sudo xcode-select -s /Applications/Xcode_26.2.app/Contents/Developer
- uses: ./.github/actions/setup-flutterfire
with:
firebase-tools-version: '15.25.1'
Expand All @@ -344,9 +338,9 @@ jobs:
- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03
name: Xcode Compile Cache
with:
# Distinct from the iOS job's key: both run on macos-15, so a shared
# Distinct from the iOS job's key: both run on xcode-27, so a shared
# `xcode-cache-${{ runner.os }}` had the two jobs clobbering each other.
key: xcode-ccache-macos
key: xcode-ccache-macos-xcode27
save: "${{ github.ref == 'refs/heads/main' }}"
max-size: 700M
- name: Pods Cache
Expand All @@ -359,8 +353,8 @@ jobs:
# Keyed on the Podfile and the pinned Firebase SDK version, not tests/pubspec.lock:
# that file is gitignored, so hashFiles() returned an empty string and the key
# never changed - the cache could never be invalidated.
key: pods-v4-${{ runner.os }}-macos-${{ hashFiles('tests/macos/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v4-${{ runner.os }}-macos-
key: pods-v5-${{ runner.os }}-macos-${{ hashFiles('tests/macos/Podfile', 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v5-${{ runner.os }}-macos-
- name: Firebase Emulator Cache
id: firebase-emulator-cache
uses: actions/cache/restore@55cc8345863c7cc4c66a329aec7e433d2d1c52a9
Expand Down
29 changes: 13 additions & 16 deletions .github/workflows/reusable_e2e_ios.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ jobs:
github.actor != 'dependabot[bot]')
permissions:
contents: read
runs-on: macos-15
runs-on: xcode-27
env:
# Inputs consumed inside run: scripts are routed through env so their
# values are data, never shell/template code (zizmor: template-injection).
Expand All @@ -125,15 +125,12 @@ jobs:
timeout-minutes: ${{ inputs.nightly_test_mode && 5 || 60 }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
# No `xcode-select` pin: use the runner image's default Xcode. Firebase's
# iOS SDK minimum is 26.2 and every current macos-15 image is at or above
# it. The pin to exactly 26.2 was the reason SPM resolution kept failing:
# that toolchain canonicalizes the ephemeral symlink farm Flutter lays out
# for plugin packages and then looks for the siblings at their real paths
# ("Could not resolve package dependencies ... ios/firebase_core does not
# exist"); newer Xcode resolves the same layout. It is also why
# cloud_functions and firebase_performance are on CocoaPods for now - they
# can rejoin SPM once the default-Xcode runs prove clean.
# Use the xcode-27 image default (Xcode 27 / iOS 27). Do not pin an older
# Xcode: pinning 26.2 on macos-15 made SPM fail by canonicalizing Flutter's
# ephemeral plugin symlink farm ("Could not resolve package dependencies
# ... ios/firebase_core does not exist"). cloud_functions and
# firebase_performance stay on CocoaPods until default-Xcode SPM runs prove
# clean.
- uses: ./.github/actions/setup-flutterfire
with:
node: ${{ inputs.use-firebase-emulators && 'true' || 'false' }}
Expand All @@ -157,9 +154,9 @@ jobs:
- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03
name: Xcode Compile Cache
with:
# Distinct from every other macos-15 job's key, otherwise the workflows
# Distinct from every other xcode-27 job's key, otherwise the workflows
# clobber each other's cache.
key: xcode-ccache-${{ inputs.cache-key-suffix }}-ios
key: xcode-ccache-${{ inputs.cache-key-suffix }}-ios-xcode27
save: "${{ github.ref == 'refs/heads/main' }}"
max-size: 700M
- name: Firebase Emulator Cache
Expand Down Expand Up @@ -222,8 +219,8 @@ jobs:
# Keyed on the Podfile and the pinned Firebase SDK version, not on a
# pubspec.lock: those are gitignored, so hashFiles() returns an empty
# string and the key could never be invalidated.
key: pods-v1-${{ runner.os }}-${{ inputs.cache-key-suffix }}-ios-${{ hashFiles(format('{0}/example/ios/Podfile', inputs.package-path), 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v1-${{ runner.os }}-${{ inputs.cache-key-suffix }}-ios-
key: pods-v2-${{ runner.os }}-${{ inputs.cache-key-suffix }}-ios-${{ hashFiles(format('{0}/example/ios/Podfile', inputs.package-path), 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v2-${{ runner.os }}-${{ inputs.cache-key-suffix }}-ios-
- name: 'Build Application'
working-directory: ${{ inputs.package-path }}/example
timeout-minutes: 25
Expand Down Expand Up @@ -262,8 +259,8 @@ jobs:
- uses: futureware-tech/simulator-action@e89aa8f93d3aec35083ff49d2854d07f7186f7f5
id: simulator
with:
# List of available simulators: https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md#installed-simulators
model: "iPhone 16"
# List of available simulators: https://github.com/actions/runner-images/blob/main/images/macos/xcode-27-arm64-Readme.md#installed-simulators
model: "iPhone 17"
- name: Ensure Simulator Ready
timeout-minutes: 13
env:
Expand Down
15 changes: 7 additions & 8 deletions .github/workflows/reusable_e2e_macos.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ jobs:
github.actor != 'dependabot[bot]')
permissions:
contents: read
runs-on: macos-15
runs-on: xcode-27
env:
# Inputs consumed inside run: scripts are routed through env so their
# values are data, never shell/template code (zizmor: template-injection).
Expand All @@ -110,9 +110,8 @@ jobs:
timeout-minutes: ${{ inputs.nightly_test_mode && 5 || 60 }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1
# No `xcode-select` pin: use the runner image's default Xcode. Firebase's
# minimum is 26.2 and every current macos-15 image is at or above it. See
# `reusable_e2e_ios.yaml` for why pinning 26.2 exactly was harmful.
# Use the xcode-27 image default (Xcode 27 / macOS 27). See
# `reusable_e2e_ios.yaml` for why pinning an older Xcode was harmful.
- uses: ./.github/actions/setup-flutterfire
with:
node: ${{ inputs.use-firebase-emulators && 'true' || 'false' }}
Expand All @@ -128,9 +127,9 @@ jobs:
- uses: hendrikmuhs/ccache-action@d62db5f07c26379fc4b4e0916f098a92573c3b03
name: Xcode Compile Cache
with:
# Distinct from every other macos-15 job's key, otherwise the workflows
# Distinct from every other xcode-27 job's key, otherwise the workflows
# clobber each other's cache.
key: xcode-ccache-${{ inputs.cache-key-suffix }}-macos
key: xcode-ccache-${{ inputs.cache-key-suffix }}-macos-xcode27
save: "${{ github.ref == 'refs/heads/main' }}"
max-size: 700M
- name: Pods Cache
Expand All @@ -145,8 +144,8 @@ jobs:
# Keyed on the Podfile and the pinned Firebase SDK version, not on a
# pubspec.lock: those are gitignored, so hashFiles() returns an empty
# string and the key could never be invalidated.
key: pods-v1-${{ runner.os }}-${{ inputs.cache-key-suffix }}-macos-${{ hashFiles(format('{0}/example/macos/Podfile', inputs.package-path), 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v1-${{ runner.os }}-${{ inputs.cache-key-suffix }}-macos-
key: pods-v2-${{ runner.os }}-${{ inputs.cache-key-suffix }}-macos-${{ hashFiles(format('{0}/example/macos/Podfile', inputs.package-path), 'packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb') }}
restore-keys: pods-v2-${{ runner.os }}-${{ inputs.cache-key-suffix }}-macos-
- name: Firebase Emulator Cache
if: inputs.use-firebase-emulators
id: firebase-emulator-cache
Expand Down
9 changes: 9 additions & 0 deletions packages/cloud_firestore/cloud_firestore/example/ios/Podfile
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,13 @@ post_install do |installer|
end
flutter_additional_ios_build_settings(target)
end
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Xcode 27 rejects iOS deployment targets below 15.0.
ios_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
if ios_target.nil? || ios_target.empty? || Gem::Version.new(ios_target.to_s) < Gem::Version.new('15.0')
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '15.0'
end
end
end
end
11 changes: 10 additions & 1 deletion packages/cloud_firestore/cloud_firestore/example/macos/Podfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
platform :osx, '10.15'
platform :osx, '12.0'

require 'yaml'

Expand Down Expand Up @@ -57,4 +57,13 @@ post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_macos_build_settings(target)
end
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
# Xcode 27 rejects macOS deployment targets below 12.0.
macos_target = config.build_settings['MACOSX_DEPLOYMENT_TARGET']
if macos_target.nil? || macos_target.empty? || Gem::Version.new(macos_target.to_s) < Gem::Version.new('12.0')
config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -552,7 +552,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
Expand All @@ -574,7 +574,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
Expand Down Expand Up @@ -635,7 +635,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
Expand Down Expand Up @@ -685,7 +685,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
Expand All @@ -707,7 +707,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
Expand All @@ -728,7 +728,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.15;
MACOSX_DEPLOYMENT_TARGET = 12.0;
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_VERSION = 5.0;
};
Expand Down
Loading
Loading