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
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
# https://firebase.google.com/support/release-notes/ios
# CocoaPods pin. Do not bump this past the last firebase-ios-sdk version
# published to CocoaPods. New releases stop publishing in October 2026.
# Swift Package Manager uses scripts/firebase_sdk_version_spm.dart.
def firebase_sdk_version!()
'12.19.0'
end
12 changes: 12 additions & 0 deletions scripts/firebase_sdk_version_spm.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// Copyright 2026 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/// Swift Package Manager pin for firebase-ios-sdk.
///
/// This may be newer than the CocoaPods pin in
/// `packages/firebase_core/firebase_core/ios/firebase_sdk_version.rb`.
/// Firebase stops publishing new Apple SDK versions to CocoaPods in
/// October 2026. Podspecs must keep using the last version that was
/// published as a pod.
const String firebaseSpmSdkVersion = '12.19.0';
9 changes: 8 additions & 1 deletion scripts/generate_bom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import 'package:intl/intl.dart';
import 'package:melos/melos.dart';

import 'bom_analysis.dart';
import 'firebase_sdk_version_spm.dart';

const packagesDir = 'packages';
const versionsFile = 'VERSIONS.md';
Expand Down Expand Up @@ -73,6 +74,7 @@ void main(List<String> arguments) async {
'firebase_sdk': {
'android': androidSdkVersion,
'ios': iosSdkVersion,
'ios_spm': firebaseSpmSdkVersion,
'web': webSdkVersion,
'windows': windowsSdkVersion,
},
Expand Down Expand Up @@ -100,6 +102,7 @@ void main(List<String> arguments) async {
date,
androidSdkVersion,
iosSdkVersion,
firebaseSpmSdkVersion,
webSdkVersion,
windowsSdkVersion,
);
Expand Down Expand Up @@ -145,6 +148,7 @@ Future<void> appendStaticText(
String date,
String androidSdkVersion,
String iosSdkVersion,
String iosSpmSdkVersion,
String webSdkVersion,
String windowsSdkVersion,
) async {
Expand Down Expand Up @@ -185,7 +189,10 @@ Future<void> appendStaticText(
'| Android SDK | $androidSdkVersion | [Release Notes](https://firebase.google.com/support/release-notes/android) |',
);
sink.writeln(
'| iOS SDK | $iosSdkVersion | [Release Notes](https://firebase.google.com/support/release-notes/ios) |',
'| iOS SDK (CocoaPods) | $iosSdkVersion | [Release Notes](https://firebase.google.com/support/release-notes/ios) |',
);
sink.writeln(
'| iOS SDK (Swift Package Manager) | $iosSpmSdkVersion | [Release Notes](https://firebase.google.com/support/release-notes/ios) |',
);
sink.writeln(
'| Web SDK | $webSdkVersion | [Release Notes](https://firebase.google.com/support/release-notes/js) |',
Expand Down
35 changes: 6 additions & 29 deletions scripts/generate_versions_spm.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,16 @@ import 'dart:io';
import 'package:cli_util/cli_logging.dart' as logging;
import 'package:yaml/yaml.dart';

// Used to generate a simple txt file for Package.swift file to parse in order to use correct firebase-ios-sdk version
import 'firebase_sdk_version_spm.dart';

// Writes scripts/firebase_sdk_version_spm.dart into each plugin Package.swift.

void main(List<String> args) async {
final workspace = await getMelosWorkspace();
// get version from core
final firebaseCorePackage = workspace.filteredPackages.values
.firstWhere((package) => package.name == 'firebase_core');

final firebaseCoreIosVersionFile = File(
'${firebaseCorePackage.path}/ios/firebase_sdk_version.rb',
);

final firebaseiOSVersion = getFirebaseiOSVersion(firebaseCoreIosVersionFile);

// Update hard-coded versions in all plugin Package.swift files
updatePluginPackageSwiftVersions(workspace, firebaseiOSVersion);
// Update hard-coded versions in all plugin Package.swift files.
// CocoaPods keeps its own pin in firebase_sdk_version.rb.
updatePluginPackageSwiftVersions(workspace, firebaseSpmSdkVersion);
// Update plugin version in Constants.swift for pure Swift plugins. Unable to pass macros in pure Swift implementations
updateLibraryVersionPureSwiftPlugins();
}
Expand All @@ -47,23 +41,6 @@ Future<melos.MelosWorkspace> getMelosWorkspace() async {
return workspace;
}

String getFirebaseiOSVersion(File firebaseCoreIosSdkVersion) {
if (firebaseCoreIosSdkVersion.existsSync()) {
final content = firebaseCoreIosSdkVersion.readAsStringSync();
final versionMatch = RegExp(r"'(\d+\.\d+\.\d+)'").firstMatch(content);

if (versionMatch != null && versionMatch.group(1) != null) {
return versionMatch.group(1)!;
} else {
throw Exception(
'Firebase iOS SDK version not found in firebase_sdk_version.rb.',
);
}
} else {
throw Exception('firebase_sdk_version.rb file does not exist.');
}
}

void updatePluginPackageSwiftVersions(
melos.MelosWorkspace workspace,
String firebaseiOSVersion,
Expand Down
Loading