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'),