From 96f01760b8af55423c65c02342c7716c963d54f2 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 22 Oct 2024 16:05:04 +0100 Subject: [PATCH 1/7] feat(firebase_core): create a swift package of shared iOS source code for all plugins --- Package.swift | 33 +++++++++++++++++++ .../firebase_core_shared/FLTFirebasePlugin.m | 1 + .../FLTFirebasePluginRegistry.m | 1 + .../include/FLTFirebasePlugin.h | 1 + .../include/FLTFirebasePluginRegistry.h | 1 + 5 files changed, 37 insertions(+) create mode 100644 Package.swift create mode 120000 Sources/firebase_core_shared/FLTFirebasePlugin.m create mode 120000 Sources/firebase_core_shared/FLTFirebasePluginRegistry.m create mode 120000 Sources/firebase_core_shared/include/FLTFirebasePlugin.h create mode 120000 Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h diff --git a/Package.swift b/Package.swift new file mode 100644 index 000000000000..65ef865d0eaa --- /dev/null +++ b/Package.swift @@ -0,0 +1,33 @@ +// swift-tools-version: 5.9 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +// Copyright 2024, the Chromium project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import Foundation +import PackageDescription + +// Shared Swift package manager code for firebase core +let package = Package( + name: "remote_firebase_core", + platforms: [ + .iOS("13.0") + ], + products: [ + .library(name: "firebase-core-shared", targets: ["firebase_core_shared"]) + ], + dependencies: [ + .package(url: "https://github.com/firebase/firebase-ios-sdk", from: "11.0.0") + ], + targets: [ + .target( + name: "firebase_core_shared", + dependencies: [ + .product(name: "FirebaseInstallations", package: "firebase-ios-sdk") + ], + path: "Sources/firebase_core_shared", + publicHeadersPath: "include" + ), + ] +) diff --git a/Sources/firebase_core_shared/FLTFirebasePlugin.m b/Sources/firebase_core_shared/FLTFirebasePlugin.m new file mode 120000 index 000000000000..c5c6fd40a27f --- /dev/null +++ b/Sources/firebase_core_shared/FLTFirebasePlugin.m @@ -0,0 +1 @@ +packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m \ No newline at end of file diff --git a/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m b/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m new file mode 120000 index 000000000000..b279374e3bdf --- /dev/null +++ b/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m @@ -0,0 +1 @@ +packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m \ No newline at end of file diff --git a/Sources/firebase_core_shared/include/FLTFirebasePlugin.h b/Sources/firebase_core_shared/include/FLTFirebasePlugin.h new file mode 120000 index 000000000000..b73a8931ef3a --- /dev/null +++ b/Sources/firebase_core_shared/include/FLTFirebasePlugin.h @@ -0,0 +1 @@ +packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h \ No newline at end of file diff --git a/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h b/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h new file mode 120000 index 000000000000..492154f1d3ea --- /dev/null +++ b/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h @@ -0,0 +1 @@ +packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h \ No newline at end of file From 5a380ed690206f51b43edd9f2bd8abac8568a814 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Tue, 22 Oct 2024 16:06:49 +0100 Subject: [PATCH 2/7] create script for generating tag for SPM --- melos.yaml | 2 ++ scripts/generate_tag_spm_firebase_core.dart | 40 +++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 scripts/generate_tag_spm_firebase_core.dart diff --git a/melos.yaml b/melos.yaml index fac6e008d4ec..78ba09d39ad5 100644 --- a/melos.yaml +++ b/melos.yaml @@ -21,6 +21,8 @@ command: dart run scripts/generate_dataconnect_version.dart && \ git add packages/firebase_vertexai/firebase_vertexai/lib/src/vertex_version.dart && \ git add packages/firebase_data_connect/firebase_data_connect/lib/src/dataconnect_version.dart + post: | + dart run scripts/generate_tag_spm_firebase_core.dart bootstrap: # It seems so that running "pub get" in parallel has some issues (like diff --git a/scripts/generate_tag_spm_firebase_core.dart b/scripts/generate_tag_spm_firebase_core.dart new file mode 100644 index 000000000000..ef8b1105e9e4 --- /dev/null +++ b/scripts/generate_tag_spm_firebase_core.dart @@ -0,0 +1,40 @@ +import 'dart:io'; +import 'package:yaml/yaml.dart'; + +void main(List args) { + // Define the path to the pubspec.yaml file + const pubspecPath = 'packages/firebase_core/firebase_core/pubspec.yaml'; + + // Read the pubspec.yaml file + final pubspecFile = File(pubspecPath); + if (!pubspecFile.existsSync()) { + print('Error: pubspec.yaml file not found at $pubspecPath'); + return; + } + + // Parse the YAML content + final pubspecContent = pubspecFile.readAsStringSync(); + final pubspecYaml = loadYaml(pubspecContent); + + // Extract the version + final version = pubspecYaml['version']; + if (version == null) { + print('Error: Version not found in pubspec.yaml'); + return; + } + + const packageIdentifier = 'firebase-core-swift'; + + // Generate the tag + final tag = '$version-$packageIdentifier'; + print('Generated tag for firebase core swift: $tag'); + + // Run the git tag command + final result = Process.runSync('git', ['tag', tag]); + + if (result.exitCode == 0) { + print('Git tag created successfully for firebase core swift: $tag'); + } else { + print('Error creating git tag: ${result.stderr}'); + } +} From 1c0d8082edcf9f57524ee1e53bf58639fd3cb7dd Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 23 Oct 2024 11:16:36 +0100 Subject: [PATCH 3/7] latest symlinks --- Package.swift | 52 ++++++++++++++++++- .../firebase_core_shared/FLTFirebasePlugin.m | 2 +- .../FLTFirebasePluginRegistry.m | 1 - .../include/FLTFirebasePlugin.h | 2 +- .../include/FLTFirebasePluginRegistry.h | 2 +- 5 files changed, 54 insertions(+), 5 deletions(-) delete mode 120000 Sources/firebase_core_shared/FLTFirebasePluginRegistry.m diff --git a/Package.swift b/Package.swift index 65ef865d0eaa..3bafe5152c2b 100644 --- a/Package.swift +++ b/Package.swift @@ -8,17 +8,67 @@ import Foundation import PackageDescription +enum ConfigurationError: Error { + case fileNotFound(String) + case parsingError(String) + case invalidFormat(String) +} + +func loadFirebaseSDKVersion() throws -> String { + let firebaseCoreScriptPath = NSString.path(withComponents: [ + "packages", + "firebase_core", + "firebase_core", + "ios", + "firebase_sdk_version.rb", + ]) + + do { + let content = try String(contentsOfFile: firebaseCoreScriptPath, encoding: .utf8) + let pattern = #"def firebase_sdk_version!\(\)\n\s+'([^']+)'\nend"# + if let regex = try? NSRegularExpression(pattern: pattern, options: []), + let match = regex.firstMatch( + in: content, + range: NSRange(content.startIndex..., in: content) + ) { + if let versionRange = Range(match.range(at: 1), in: content) { + return String(content[versionRange]) + } else { + throw ConfigurationError.invalidFormat("Invalid format in firebase_sdk_version.rb") + } + } else { + throw ConfigurationError.parsingError("No match found in firebase_sdk_version.rb") + } + } catch { + throw ConfigurationError + .fileNotFound("Error loading or parsing firebase_sdk_version.rb: \(error)") + } +} + +let firebase_sdk_version_string: String + +do { + firebase_sdk_version_string = try loadFirebaseSDKVersion() +} catch { + fatalError("Failed to load configuration: \(error)") +} + +guard let firebase_sdk_version = Version(firebase_sdk_version_string) else { + fatalError("Invalid Firebase SDK version: \(firebase_sdk_version_string)") +} + // Shared Swift package manager code for firebase core let package = Package( name: "remote_firebase_core", platforms: [ .iOS("13.0") + ], products: [ .library(name: "firebase-core-shared", targets: ["firebase_core_shared"]) ], dependencies: [ - .package(url: "https://github.com/firebase/firebase-ios-sdk", from: "11.0.0") + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebase_sdk_version) ], targets: [ .target( diff --git a/Sources/firebase_core_shared/FLTFirebasePlugin.m b/Sources/firebase_core_shared/FLTFirebasePlugin.m index c5c6fd40a27f..9300663e81a9 120000 --- a/Sources/firebase_core_shared/FLTFirebasePlugin.m +++ b/Sources/firebase_core_shared/FLTFirebasePlugin.m @@ -1 +1 @@ -packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m \ No newline at end of file +../../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m \ No newline at end of file diff --git a/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m b/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m deleted file mode 120000 index b279374e3bdf..000000000000 --- a/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m +++ /dev/null @@ -1 +0,0 @@ -packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m \ No newline at end of file diff --git a/Sources/firebase_core_shared/include/FLTFirebasePlugin.h b/Sources/firebase_core_shared/include/FLTFirebasePlugin.h index b73a8931ef3a..6bbe0e68429a 120000 --- a/Sources/firebase_core_shared/include/FLTFirebasePlugin.h +++ b/Sources/firebase_core_shared/include/FLTFirebasePlugin.h @@ -1 +1 @@ -packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h \ No newline at end of file +../../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h \ No newline at end of file diff --git a/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h b/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h index 492154f1d3ea..e0b26a14c24f 120000 --- a/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h +++ b/Sources/firebase_core_shared/include/FLTFirebasePluginRegistry.h @@ -1 +1 @@ -packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h \ No newline at end of file +../../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h \ No newline at end of file From 5edd50e38ef67c98f67379b923af82bfb745ae1e Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 23 Oct 2024 11:17:26 +0100 Subject: [PATCH 4/7] fix symlinks --- Sources/firebase_core_shared/FLTFirebasePlugin.m | 2 +- Sources/firebase_core_shared/FLTFirebasePluginRegistry.m | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 120000 Sources/firebase_core_shared/FLTFirebasePluginRegistry.m diff --git a/Sources/firebase_core_shared/FLTFirebasePlugin.m b/Sources/firebase_core_shared/FLTFirebasePlugin.m index 9300663e81a9..76c49e1d4542 120000 --- a/Sources/firebase_core_shared/FLTFirebasePlugin.m +++ b/Sources/firebase_core_shared/FLTFirebasePlugin.m @@ -1 +1 @@ -../../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m \ No newline at end of file +../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m \ No newline at end of file diff --git a/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m b/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m new file mode 120000 index 000000000000..be294affaf60 --- /dev/null +++ b/Sources/firebase_core_shared/FLTFirebasePluginRegistry.m @@ -0,0 +1 @@ +../../packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m \ No newline at end of file From b3afa1173dc15c411992227c3538fa9d7a851cf0 Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 23 Oct 2024 11:32:15 +0100 Subject: [PATCH 5/7] add macOS min version --- Package.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Package.swift b/Package.swift index 3bafe5152c2b..334b6423a662 100644 --- a/Package.swift +++ b/Package.swift @@ -61,8 +61,8 @@ guard let firebase_sdk_version = Version(firebase_sdk_version_string) else { let package = Package( name: "remote_firebase_core", platforms: [ - .iOS("13.0") - + .iOS("13.0"), + .macOS("10.15") ], products: [ .library(name: "firebase-core-shared", targets: ["firebase_core_shared"]) From 6dc3bb359a11cf85aeb5a9a04eda3661a9f75d1b Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 23 Oct 2024 11:45:32 +0100 Subject: [PATCH 6/7] license header --- scripts/generate_tag_spm_firebase_core.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/generate_tag_spm_firebase_core.dart b/scripts/generate_tag_spm_firebase_core.dart index ef8b1105e9e4..e5d9510a1418 100644 --- a/scripts/generate_tag_spm_firebase_core.dart +++ b/scripts/generate_tag_spm_firebase_core.dart @@ -1,3 +1,8 @@ +// Copyright 2024 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. +// ignore_for_file: avoid_print + import 'dart:io'; import 'package:yaml/yaml.dart'; From f3e405337dc1caa47eda46da725d1618b0dfd7aa Mon Sep 17 00:00:00 2001 From: russellwheatley Date: Wed, 23 Oct 2024 12:05:48 +0100 Subject: [PATCH 7/7] format swift file --- Package.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Package.swift b/Package.swift index 334b6423a662..d0bce4a11f6b 100644 --- a/Package.swift +++ b/Package.swift @@ -62,19 +62,19 @@ let package = Package( name: "remote_firebase_core", platforms: [ .iOS("13.0"), - .macOS("10.15") + .macOS("10.15"), ], products: [ - .library(name: "firebase-core-shared", targets: ["firebase_core_shared"]) + .library(name: "firebase-core-shared", targets: ["firebase_core_shared"]), ], dependencies: [ - .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebase_sdk_version) + .package(url: "https://github.com/firebase/firebase-ios-sdk", exact: firebase_sdk_version), ], targets: [ .target( name: "firebase_core_shared", dependencies: [ - .product(name: "FirebaseInstallations", package: "firebase-ios-sdk") + .product(name: "FirebaseInstallations", package: "firebase-ios-sdk"), ], path: "Sources/firebase_core_shared", publicHeadersPath: "include"