diff --git a/.github/workflows/all_plugins.yaml b/.github/workflows/all_plugins.yaml
index 0f933c3cbce1..1724d32b4ed0 100644
--- a/.github/workflows/all_plugins.yaml
+++ b/.github/workflows/all_plugins.yaml
@@ -122,7 +122,23 @@ jobs:
run: |
melos exec -c 1 --scope="*example*" --dir-exists="web" -- \
"flutter build web"
-
+ swift-integration:
+ runs-on: macos-latest
+ timeout-minutes: 10
+ steps:
+ - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
+ - uses: subosito/flutter-action@2783a3f08e1baf891508463f8c6653c258246225
+ with:
+ # TODO - enabling swift is on `master` channel at the moment. Update when it's on `stable`
+ channel: 'master'
+ - uses: bluefireteam/melos-action@5a8367ec4b9942d712528c398ff3f996e03bc230
+ with:
+ melos-version: '5.3.0'
+ - name: 'Swift Integration Setup'
+ run: flutter config --enable-swift-package-manager
+ - name: 'Build Apps with Swift Package Manager'
+ run: ./.github/workflows/scripts/swift-integration.sh
+
test:
runs-on: ubuntu-latest
timeout-minutes: 30
diff --git a/.github/workflows/ios.yaml b/.github/workflows/ios.yaml
index a34593ab0fb4..d2f970044b7b 100644
--- a/.github/workflows/ios.yaml
+++ b/.github/workflows/ios.yaml
@@ -74,6 +74,23 @@ jobs:
- name: 'Install Tools'
run: |
sudo npm i -g firebase-tools
+ - name: 'Free up space'
+ run: |
+ sudo rm -rf \
+ /usr/local/share/.cache \
+ /Users/runner/Library/Caches \
+ /Users/runner/Library/Developer/Xcode/DerivedData \
+ /Users/runner/Library/Developer/CoreSimulator/Caches \
+ /opt/microsoft/msedge \
+ /opt/microsoft/powershell \
+ /opt/pipx \
+ /usr/lib/mono \
+ /usr/local/julia* \
+ /usr/local/lib/android \
+ /usr/local/share/chromium \
+ /usr/local/share/powershell \
+ /usr/share/dotnet
+ df -h /
- name: 'Build Application'
working-directory: ${{ matrix.working_directory }}
run: |
diff --git a/.github/workflows/scripts/swift-integration.sh b/.github/workflows/scripts/swift-integration.sh
new file mode 100755
index 000000000000..d15fb70bf1f2
--- /dev/null
+++ b/.github/workflows/scripts/swift-integration.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+set -e
+
+# Just Core example has pure Swift capability at the moment
+
+
+# firebase_core iOS example
+
+# Setup for SPM integration
+cd packages/firebase_core/firebase_core/example/ios
+rm Podfile
+pod deintegrate
+
+# Run the flutter build command and capture the output and exit status
+flutter_output=$(flutter build ios --no-codesign)
+flutter_exit_code=$?
+
+# Check if the flutter build command was successful
+if [[ $flutter_exit_code -ne 0 ]]; then
+ echo "Flutter build failed with exit code $flutter_exit_code."
+ exit 1
+fi
+
+# Check the output for the specific string
+if [[ "$flutter_output" =~ "Running pod install" ]]; then
+ exit 1
+else
+ echo "Successfully built iOS project using Swift Package Manager."
+fi
+
+# firebase_core macOS example
+
+# Setup for SPM integration
+cd ../macos
+rm Podfile
+pod deintegrate
+
+# Run the flutter build command and capture the output and exit status
+flutter_output=$(flutter build macos)
+flutter_exit_code=$?
+
+# Check if the flutter build command was successful
+if [[ $flutter_exit_code -ne 0 ]]; then
+ echo "Flutter build failed with exit code $flutter_exit_code."
+ exit 1
+fi
+
+# Check the output for the specific string
+if [[ "$flutter_output" =~ "Running pod install" ]]; then
+ exit 1
+else
+ echo "Successfully built macOS project using Swift Package Manager."
+ exit 0
+fi
diff --git a/.gitignore b/.gitignore
index 0653a393e76e..00d6737efb50 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,6 +15,7 @@ flutter_export_environment.sh
examples/all_plugins/pubspec.yaml
+Package.resolved
Podfile.lock
Pods/
.symlinks/
diff --git a/packages/firebase_core/firebase_core/example/ios/Flutter/Debug.xcconfig b/packages/firebase_core/firebase_core/example/ios/Flutter/Debug.xcconfig
index e8efba114687..ec97fc6f3021 100644
--- a/packages/firebase_core/firebase_core/example/ios/Flutter/Debug.xcconfig
+++ b/packages/firebase_core/firebase_core/example/ios/Flutter/Debug.xcconfig
@@ -1,2 +1,2 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
diff --git a/packages/firebase_core/firebase_core/example/ios/Flutter/Release.xcconfig b/packages/firebase_core/firebase_core/example/ios/Flutter/Release.xcconfig
index 399e9340e6f6..c4855bfe2000 100644
--- a/packages/firebase_core/firebase_core/example/ios/Flutter/Release.xcconfig
+++ b/packages/firebase_core/firebase_core/example/ios/Flutter/Release.xcconfig
@@ -1,2 +1,2 @@
-#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
diff --git a/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj
index c05e66a93280..dbae6965e211 100644
--- a/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj
+++ b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.pbxproj
@@ -9,6 +9,7 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */ = {isa = PBXBuildFile; productRef = 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
@@ -56,6 +57,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ 78A318202AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage in Frameworks */,
CC8B39E3ACF96AAA7558280C /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -149,13 +151,15 @@
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- FE9FCD1596DCB6AB2B208201 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
+ packageProductDependencies = (
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */,
+ );
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
@@ -184,6 +188,9 @@
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
+ packageReferences = (
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */,
+ );
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -261,30 +268,6 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
- FE9FCD1596DCB6AB2B208201 /* [CP] Embed Pods Frameworks */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
- "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
- "${BUILT_PRODUCTS_DIR}/FirebaseCoreInternal/FirebaseCoreInternal.framework",
- "${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
- "${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
- );
- name = "[CP] Embed Pods Frameworks";
- outputPaths = (
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreInternal.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
- showEnvVarsInLog = 0;
- };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -580,6 +563,20 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
+
+/* Begin XCLocalSwiftPackageReference section */
+ 781AD8BC2B33823900A9FFBB /* XCLocalSwiftPackageReference "FlutterGeneratedPluginSwiftPackage" */ = {
+ isa = XCLocalSwiftPackageReference;
+ relativePath = Flutter/ephemeral/Packages/FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCLocalSwiftPackageReference section */
+
+/* Begin XCSwiftPackageProductDependency section */
+ 78A3181F2AECB46A00862997 /* FlutterGeneratedPluginSwiftPackage */ = {
+ isa = XCSwiftPackageProductDependency;
+ productName = FlutterGeneratedPluginSwiftPackage;
+ };
+/* End XCSwiftPackageProductDependency section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
diff --git a/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 000000000000..18d981003d68
--- /dev/null
+++ b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index e67b2808af02..7120d2eaf0f3 100644
--- a/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/packages/firebase_core/firebase_core/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -5,6 +5,24 @@
+
+
+
+
+
+
+
+
+
+
'../LICENSE' }
s.authors = 'The Chromium Authors'
s.source = { :path => '.' }
- s.source_files = 'Classes/**/*'
- s.public_header_files = 'Classes/**/*.h'
+ s.source_files = 'firebase_core/Sources/firebase_core/**/*.{h,m}'
+ s.public_header_files = 'firebase_core/Sources/firebase_core/include/**/*.h'
s.ios.deployment_target = '13.0'
@@ -37,7 +37,7 @@ Pod::Spec.new do |s|
s.static_framework = true
s.pod_target_xcconfig = {
- 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\@\\\"#{library_version}\\\" LIBRARY_NAME=\\@\\\"flutter-fire-core\\\"",
+ 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-core\\\"",
'DEFINES_MODULE' => 'YES'
}
end
diff --git a/packages/firebase_core/firebase_core/ios/firebase_core/Package.swift b/packages/firebase_core/firebase_core/ios/firebase_core/Package.swift
new file mode 100644
index 000000000000..5d4cd0f52b5f
--- /dev/null
+++ b/packages/firebase_core/firebase_core/ios/firebase_core/Package.swift
@@ -0,0 +1,110 @@
+// 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
+
+enum ConfigurationError: Error {
+ case fileNotFound(String)
+ case parsingError(String)
+ case invalidFormat(String)
+}
+
+let iosRootDirectory = String(URL(string: #file)!.deletingLastPathComponent().absoluteString
+ .dropLast())
+
+func loadPubspecVersion() throws -> String {
+ let pubspecPath = NSString.path(withComponents: [iosRootDirectory, "..", "..", "pubspec.yaml"])
+ do {
+ let yamlString = try String(contentsOfFile: pubspecPath, encoding: .utf8)
+ if let versionLine = yamlString.split(separator: "\n")
+ .first(where: { $0.starts(with: "version:") }) {
+ let version = versionLine.split(separator: ":")[1].trimmingCharacters(in: .whitespaces)
+ return version.replacingOccurrences(of: "+", with: "-")
+ } else {
+ throw ConfigurationError.invalidFormat("No version line found in pubspec.yaml")
+ }
+ } catch {
+ throw ConfigurationError.fileNotFound("Error loading or parsing pubspec.yaml: \(error)")
+ }
+}
+
+func loadFirebaseSDKVersion() throws -> String {
+ let firebaseCoreScriptPath = NSString.path(withComponents: [
+ iosRootDirectory,
+ "..",
+ "..",
+ "..",
+ "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 library_version: String
+let firebase_sdk_version_string: String
+
+do {
+ library_version = try loadPubspecVersion()
+ 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)")
+}
+
+let package = Package(
+ name: "firebase_core",
+ platforms: [
+ .iOS("13.0"),
+ ],
+ products: [
+ .library(name: "firebase-core", targets: ["firebase_core"]),
+ ],
+ dependencies: [
+ .package(url: "https://github.com/firebase/firebase-ios-sdk", from: firebase_sdk_version),
+ ],
+ targets: [
+ .target(
+ name: "firebase_core",
+ dependencies: [
+ // No product for firebase-core so we pull in the smallest one
+ .product(name: "FirebaseInstallations", package: "firebase-ios-sdk"),
+ ],
+ resources: [
+ .process("Resources"),
+ ],
+ cSettings: [
+ .headerSearchPath("include/firebase_core"),
+ .define("LIBRARY_VERSION", to: "\"\(library_version)\""),
+ .define("LIBRARY_NAME", to: "\"flutter-fire-core\""),
+ ]
+ ),
+ ]
+)
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebaseCorePlugin.m b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
similarity index 97%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebaseCorePlugin.m
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
index a30185f4d6e1..87cb647c0eba 100644
--- a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebaseCorePlugin.m
+++ b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
@@ -2,9 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#import "FLTFirebaseCorePlugin.h"
-#import "FLTFirebasePluginRegistry.h"
-#import "messages.g.h"
+#import "include/firebase_core/FLTFirebaseCorePlugin.h"
+#import "include/firebase_core/FLTFirebasePluginRegistry.h"
+#import "include/firebase_core/messages.g.h"
@implementation FLTFirebaseCorePlugin {
BOOL _coreInitialized;
@@ -105,11 +105,11 @@ - (NSDictionary *_Nonnull)pluginConstantsForFIRApp:(FIRApp *)firebase_app {
}
- (NSString *_Nonnull)firebaseLibraryName {
- return LIBRARY_NAME;
+ return @LIBRARY_NAME;
}
- (NSString *_Nonnull)firebaseLibraryVersion {
- return LIBRARY_VERSION;
+ return @LIBRARY_VERSION;
}
- (NSString *_Nonnull)flutterChannelName {
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePlugin.m b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
similarity index 97%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePlugin.m
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
index aa5dda3af19b..16433a2f26ea 100644
--- a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePlugin.m
+++ b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#import "FLTFirebasePlugin.h"
+#import "include/firebase_core/FLTFirebasePlugin.h"
// Firebase default app name.
NSString *_Nonnull const kFIRDefaultAppNameIOS = @"__FIRAPP_DEFAULT";
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePluginRegistry.m b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
similarity index 97%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePluginRegistry.m
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
index 234fb5e9d412..5f5886274d5c 100644
--- a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePluginRegistry.m
+++ b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#import "FLTFirebasePluginRegistry.h"
+#import "include/firebase_core/FLTFirebasePluginRegistry.h"
#if __has_include()
#import
diff --git a/packages/firebase_core/firebase_core/ios/Assets/.gitkeep b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/Resources/.gitkeep
similarity index 100%
rename from packages/firebase_core/firebase_core/ios/Assets/.gitkeep
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/Resources/.gitkeep
diff --git a/packages/firebase_core/firebase_core/macos/Assets/.gitkeep b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep
similarity index 100%
rename from packages/firebase_core/firebase_core/macos/Assets/.gitkeep
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebaseCorePlugin.h b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h
similarity index 100%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebaseCorePlugin.h
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePlugin.h b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h
similarity index 100%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePlugin.h
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h
diff --git a/packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePluginRegistry.h b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h
similarity index 100%
rename from packages/firebase_core/firebase_core/ios/Classes/FLTFirebasePluginRegistry.h
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h
diff --git a/packages/firebase_core/firebase_core/ios/Classes/messages.g.h b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h
similarity index 100%
rename from packages/firebase_core/firebase_core/ios/Classes/messages.g.h
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h
diff --git a/packages/firebase_core/firebase_core/ios/Classes/messages.g.m b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/messages.g.m
similarity index 99%
rename from packages/firebase_core/firebase_core/ios/Classes/messages.g.m
rename to packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/messages.g.m
index 9d47c309ceab..a1bf4e0fbeb0 100644
--- a/packages/firebase_core/firebase_core/ios/Classes/messages.g.m
+++ b/packages/firebase_core/firebase_core/ios/firebase_core/Sources/firebase_core/messages.g.m
@@ -4,7 +4,7 @@
// Autogenerated from Pigeon (v9.2.5), do not edit directly.
// See also: https://pub.dev/packages/pigeon
-#import "messages.g.h"
+#import "include/firebase_core/messages.g.h"
#if TARGET_OS_OSX
#import
#else
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.h b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.h
deleted file mode 120000
index a4d92c64fafe..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.h
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebaseCorePlugin.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.m b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.m
deleted file mode 120000
index 55954048bdf3..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebaseCorePlugin.m
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebaseCorePlugin.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.h b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.h
deleted file mode 120000
index 606eda24a895..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.h
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebasePlugin.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.m b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.m
deleted file mode 120000
index 74852b0672c2..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePlugin.m
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebasePlugin.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.h b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.h
deleted file mode 120000
index eae678ac6d96..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.h
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebasePluginRegistry.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.m b/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.m
deleted file mode 120000
index 1d008b541876..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/FLTFirebasePluginRegistry.m
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/FLTFirebasePluginRegistry.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/messages.g.h b/packages/firebase_core/firebase_core/macos/Classes/messages.g.h
deleted file mode 120000
index 8c85826b010b..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/messages.g.h
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/messages.g.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/Classes/messages.g.m b/packages/firebase_core/firebase_core/macos/Classes/messages.g.m
deleted file mode 120000
index 5c65810afc79..000000000000
--- a/packages/firebase_core/firebase_core/macos/Classes/messages.g.m
+++ /dev/null
@@ -1 +0,0 @@
-../../ios/Classes/messages.g.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core.podspec b/packages/firebase_core/firebase_core/macos/firebase_core.podspec
index a97b59064a01..bb6990fea0b0 100644
--- a/packages/firebase_core/firebase_core/macos/firebase_core.podspec
+++ b/packages/firebase_core/firebase_core/macos/firebase_core.podspec
@@ -42,7 +42,8 @@ Pod::Spec.new do |s|
s.license = { :file => '../LICENSE' }
s.authors = 'The Chromium Authors'
s.source = { :path => '.' }
- s.source_files = 'Classes/**/*'
+ s.source_files = 'firebase_core/Sources/firebase_core/**/*.{h,m}'
+ s.public_header_files = 'firebase_core/Sources/firebase_core/include/**/*.h'
s.platform = :osx, '10.13'
@@ -54,7 +55,7 @@ Pod::Spec.new do |s|
s.static_framework = true
s.pod_target_xcconfig = {
- 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\@\\\"#{library_version}\\\" LIBRARY_NAME=\\@\\\"flutter-fire-core\\\"",
+ 'GCC_PREPROCESSOR_DEFINITIONS' => "LIBRARY_VERSION=\\\"#{library_version}\\\" LIBRARY_NAME=\\\"flutter-fire-core\\\"",
'DEFINES_MODULE' => 'YES'
}
end
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Package.swift b/packages/firebase_core/firebase_core/macos/firebase_core/Package.swift
new file mode 100644
index 000000000000..c4d04289386e
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Package.swift
@@ -0,0 +1,110 @@
+// 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
+
+enum ConfigurationError: Error {
+ case fileNotFound(String)
+ case parsingError(String)
+ case invalidFormat(String)
+}
+
+let macosRootDirectory = String(URL(string: #file)!.deletingLastPathComponent().absoluteString
+ .dropLast())
+
+func loadPubspecVersion() throws -> String {
+ let pubspecPath = NSString.path(withComponents: [macosRootDirectory, "..", "..", "pubspec.yaml"])
+ do {
+ let yamlString = try String(contentsOfFile: pubspecPath, encoding: .utf8)
+ if let versionLine = yamlString.split(separator: "\n")
+ .first(where: { $0.starts(with: "version:") }) {
+ let version = versionLine.split(separator: ":")[1].trimmingCharacters(in: .whitespaces)
+ return version.replacingOccurrences(of: "+", with: "-")
+ } else {
+ throw ConfigurationError.invalidFormat("No version line found in pubspec.yaml")
+ }
+ } catch {
+ throw ConfigurationError.fileNotFound("Error loading or parsing pubspec.yaml: \(error)")
+ }
+}
+
+func loadFirebaseSDKVersion() throws -> String {
+ let firebaseCoreScriptPath = NSString.path(withComponents: [
+ macosRootDirectory,
+ "..",
+ "..",
+ "..",
+ "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 library_version: String
+let firebase_sdk_version_string: String
+
+do {
+ library_version = try loadPubspecVersion()
+ 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)")
+}
+
+let package = Package(
+ name: "firebase_core",
+ platforms: [
+ .macOS("10.15"),
+ ],
+ products: [
+ .library(name: "firebase-core", targets: ["firebase_core"]),
+ ],
+ dependencies: [
+ .package(url: "https://github.com/firebase/firebase-ios-sdk", from: firebase_sdk_version),
+ ],
+ targets: [
+ .target(
+ name: "firebase_core",
+ dependencies: [
+ // No product for firebase-core so we pull in the smallest one
+ .product(name: "FirebaseInstallations", package: "firebase-ios-sdk"),
+ ],
+ resources: [
+ .process("Resources"),
+ ],
+ cSettings: [
+ .headerSearchPath("include/firebase_core"),
+ .define("LIBRARY_VERSION", to: "\"\(library_version)\""),
+ .define("LIBRARY_NAME", to: "\"flutter-fire-core\""),
+ ]
+ ),
+ ]
+)
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
new file mode 120000
index 000000000000..d014e98d510f
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
@@ -0,0 +1 @@
+../../../../ios/firebase_core/Sources/firebase_core/FLTFirebaseCorePlugin.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
new file mode 120000
index 000000000000..e6ce8910e33c
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
@@ -0,0 +1 @@
+../../../../ios/firebase_core/Sources/firebase_core/FLTFirebasePlugin.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
new file mode 120000
index 000000000000..9c70b9506434
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
@@ -0,0 +1 @@
+../../../../ios/firebase_core/Sources/firebase_core/FLTFirebasePluginRegistry.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/Resources/.gitkeep b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/Resources/.gitkeep
new file mode 120000
index 000000000000..7ecb7b294b8f
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/Resources/.gitkeep
@@ -0,0 +1 @@
+../../../../../ios/firebase_core/Sources/firebase_core/Resources/.gitkeep
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep
new file mode 120000
index 000000000000..96eefa258228
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep
@@ -0,0 +1 @@
+../../../../../../ios/firebase_core/Sources/firebase_core/include/firebase_core/.gitkeep
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h
new file mode 120000
index 000000000000..b8c28eb5bd36
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h
@@ -0,0 +1 @@
+../../../../../../ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebaseCorePlugin.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h
new file mode 120000
index 000000000000..18a8349f94be
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h
@@ -0,0 +1 @@
+../../../../../../ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePlugin.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h
new file mode 120000
index 000000000000..17ebeb905b75
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h
@@ -0,0 +1 @@
+../../../../../../ios/firebase_core/Sources/firebase_core/include/firebase_core/FLTFirebasePluginRegistry.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h
new file mode 120000
index 000000000000..77dd32416d53
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h
@@ -0,0 +1 @@
+../../../../../../ios/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/messages.g.m b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/messages.g.m
new file mode 120000
index 000000000000..8c67a9cfd102
--- /dev/null
+++ b/packages/firebase_core/firebase_core/macos/firebase_core/Sources/firebase_core/messages.g.m
@@ -0,0 +1 @@
+../../../../ios/firebase_core/Sources/firebase_core/messages.g.m
\ No newline at end of file
diff --git a/packages/firebase_core/firebase_core_platform_interface/pigeons/messages.dart b/packages/firebase_core/firebase_core_platform_interface/pigeons/messages.dart
index 00fa0d744802..02640d85c490 100644
--- a/packages/firebase_core/firebase_core_platform_interface/pigeons/messages.dart
+++ b/packages/firebase_core/firebase_core_platform_interface/pigeons/messages.dart
@@ -15,8 +15,10 @@ import 'package:pigeon/pigeon.dart';
package: 'io.flutter.plugins.firebase.core',
className: 'GeneratedAndroidFirebaseCore',
),
- objcHeaderOut: '../firebase_core/ios/Classes/messages.g.h',
- objcSourceOut: '../firebase_core/ios/Classes/messages.g.m',
+ objcHeaderOut:
+ '../firebase_core/ios/firebase_core/Sources/firebase_core/include/firebase_core/messages.g.h',
+ objcSourceOut:
+ '../firebase_core/ios/firebase_core/Sources/firebase_core/messages.g.m',
cppHeaderOut: '../firebase_core/windows/messages.g.h',
cppSourceOut: '../firebase_core/windows/messages.g.cpp',
cppOptions: CppOptions(namespace: 'firebase_core_windows'),