Files
firebase-ios-sdk/Package.swift
T
2024-07-19 15:15:15 -07:00

1564 lines
49 KiB
Swift

// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to
// build this package.
// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import class Foundation.ProcessInfo
import PackageDescription
let firebaseVersion = "11.0.0"
let package = Package(
name: "Firebase",
platforms: [.iOS(.v12), .macCatalyst(.v13), .macOS(.v10_15), .tvOS(.v13), .watchOS(.v7)],
products: [
.library(
name: "FirebaseAnalytics",
targets: ["FirebaseAnalyticsTarget"]
),
// Adding this library to your project is enough for it to take effect. The module
// does not need to be imported into any source files.
.library(
name: "FirebaseAnalyticsWithoutAdIdSupport",
targets: ["FirebaseAnalyticsWithoutAdIdSupportTarget"]
),
// Adding this library to your project is enough for it to take effect. The module
// does not need to be imported into any source files.
.library(
name: "FirebaseAnalyticsOnDeviceConversion",
targets: ["FirebaseAnalyticsOnDeviceConversionTarget"]
),
.library(
name: "FirebaseAuth",
targets: ["FirebaseAuth"]
),
.library(
name: "FirebaseAppCheck",
targets: ["FirebaseAppCheck"]
),
.library(
name: "FirebaseAppDistribution-Beta",
targets: ["FirebaseAppDistributionTarget"]
),
.library(
name: "FirebaseAuthCombine-Community",
targets: ["FirebaseAuthCombineSwift"]
),
.library(
name: "FirebaseFirestoreCombine-Community",
targets: ["FirebaseFirestoreCombineSwift"]
),
.library(
name: "FirebaseFunctionsCombine-Community",
targets: ["FirebaseFunctionsCombineSwift"]
),
.library(
name: "FirebaseStorageCombine-Community",
targets: ["FirebaseStorageCombineSwift"]
),
.library(
name: "FirebaseCrashlytics",
targets: ["FirebaseCrashlytics"]
),
.library(
name: "FirebaseDatabase",
targets: ["FirebaseDatabase"]
),
.library(
name: "FirebaseDynamicLinks",
targets: ["FirebaseDynamicLinksTarget"]
),
.library(
name: "FirebaseFirestore",
targets: ["FirebaseFirestoreTarget"]
),
.library(
name: "FirebaseFunctions",
targets: ["FirebaseFunctions"]
),
.library(
name: "FirebaseInAppMessaging-Beta",
targets: ["FirebaseInAppMessagingTarget"]
),
.library(
name: "FirebaseInstallations",
targets: ["FirebaseInstallations"]
),
.library(
name: "FirebaseMessaging",
targets: ["FirebaseMessaging"]
),
.library(
name: "FirebaseMLModelDownloader",
targets: ["FirebaseMLModelDownloader"]
),
.library(
name: "FirebasePerformance",
targets: ["FirebasePerformanceTarget"]
),
.library(
name: "FirebaseRemoteConfig",
targets: ["FirebaseRemoteConfig"]
),
.library(
name: "FirebaseStorage",
targets: ["FirebaseStorage"]
),
.library(
name: "FirebaseVertexAI-Preview",
targets: ["FirebaseVertexAI"]
),
],
dependencies: [
.package(
url: "https://github.com/google/promises.git",
"2.4.0" ..< "3.0.0"
),
.package(
url: "https://github.com/apple/swift-protobuf.git",
"1.19.0" ..< "2.0.0"
),
googleAppMeasurementDependency(),
.package(
url: "https://github.com/google/GoogleDataTransport.git",
"10.0.0" ..< "11.0.0"
),
.package(
url: "https://github.com/google/GoogleUtilities.git",
"8.0.0" ..< "9.0.0"
),
.package(
url: "https://github.com/google/gtm-session-fetcher.git",
"3.4.1" ..< "4.0.0"
),
.package(
url: "https://github.com/firebase/nanopb.git",
"2.30910.0" ..< "2.30911.0"
),
abseilDependency(),
grpcDependency(),
// TODO: restore OCMock when https://github.com/erikdoe/ocmock/pull/537
// gets merged to fix Xcode 15.3 builds.
.package(
url: "https://github.com/paulb777/ocmock.git",
revision: "173955e93e6ee6999a10729ab67e4b4efdd1db6d"
),
// url: "https://github.com/erikdoe/ocmock.git",
// revision: "c5eeaa6dde7c308a5ce48ae4d4530462dd3a1110"
// ),
.package(
url: "https://github.com/firebase/leveldb.git",
"1.22.2" ..< "1.23.0"
),
.package(
url: "https://github.com/SlaunchaMan/GCDWebServer.git",
revision: "935e2736044e71e5341663c3cc9a335ba6867a2b"
),
.package(
url: "https://github.com/google/interop-ios-for-google-sdks.git",
"100.0.0" ..< "101.0.0"
),
.package(url: "https://github.com/google/app-check.git",
"11.0.1" ..< "12.0.0"),
],
targets: [
.target(
name: "Firebase",
path: "CoreOnly/Sources",
publicHeadersPath: "./"
),
.target(
name: "FirebaseCore",
dependencies: [
"Firebase",
"FirebaseCoreInternal",
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULLogger", package: "GoogleUtilities"),
],
path: "FirebaseCore/Sources",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../.."),
.define("Firebase_VERSION", to: firebaseVersion),
// TODO: - Add support for cflags cSetting so that we can set the -fno-autolink option
],
linkerSettings: [
.linkedFramework("UIKit", .when(platforms: [.iOS, .macCatalyst, .tvOS])),
.linkedFramework("AppKit", .when(platforms: [.macOS])),
]
),
.testTarget(
name: "CoreUnit",
dependencies: [
"FirebaseCore",
"SharedTestUtilities",
.product(name: "OCMock", package: "ocmock"),
],
path: "FirebaseCore/Tests/Unit",
exclude: ["Resources/GoogleService-Info.plist"],
cSettings: [
.headerSearchPath("../../.."),
]
),
// MARK: - Firebase Core Extension
// Extension of FirebaseCore for consuming by Swift product SDKs.
// When depending on `FirebaseCoreExtension`, also depend on `FirebaseCore`
// to avoid potential linker issues.
.target(
name: "FirebaseCoreExtension",
path: "FirebaseCore/Extension",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: ".",
cSettings: [
.headerSearchPath("../../"),
]
),
// MARK: - Firebase Core Internal
// Shared collection of APIs for internal FirebaseCore usage.
.target(
name: "FirebaseCoreInternal",
dependencies: [
.product(name: "GULNSData", package: "GoogleUtilities"),
],
path: "FirebaseCore/Internal/Sources",
resources: [.process("Resources/PrivacyInfo.xcprivacy")]
),
.testTarget(
name: "FirebaseCoreInternalTests",
dependencies: [
"FirebaseCoreInternal",
],
path: "FirebaseCore/Internal/Tests"
),
.target(
name: "FirebaseABTesting",
dependencies: ["FirebaseCore"],
path: "FirebaseABTesting/Sources",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "ABTestingUnit",
dependencies: ["FirebaseABTesting", .product(name: "OCMock", package: "ocmock")],
path: "FirebaseABTesting/Tests/Unit",
resources: [.process("Resources")],
cSettings: [
.headerSearchPath("../../.."),
]
),
.target(
name: "FirebaseAnalyticsTarget",
dependencies: [.target(name: "FirebaseAnalyticsWrapper",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS]))],
path: "SwiftPM-PlatformExclude/FirebaseAnalyticsWrap"
),
.target(
name: "FirebaseAnalyticsWrapper",
dependencies: [
.target(
name: "FirebaseAnalytics",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])
),
.product(name: "GoogleAppMeasurement",
package: "GoogleAppMeasurement",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])),
"FirebaseCore",
"FirebaseInstallations",
.product(name: "GULAppDelegateSwizzler", package: "GoogleUtilities"),
.product(name: "GULMethodSwizzler", package: "GoogleUtilities"),
.product(name: "GULNSData", package: "GoogleUtilities"),
.product(name: "GULNetwork", package: "GoogleUtilities"),
.product(name: "nanopb", package: "nanopb"),
],
path: "FirebaseAnalyticsWrapper",
linkerSettings: [
.linkedLibrary("sqlite3"),
.linkedLibrary("c++"),
.linkedLibrary("z"),
.linkedFramework("StoreKit"),
]
),
.binaryTarget(
name: "FirebaseAnalytics",
url: "https://dl.google.com/firebase/ios/swiftpm/11.0.0/rc2/FirebaseAnalytics.zip",
checksum: "3dffe84e22f11691c147c5f83ba83b66172bb5c11fe09a077f2dd5f8bbd8e2bc"
),
.testTarget(
name: "AnalyticsSwiftUnit",
dependencies: ["FirebaseAnalytics"],
path: "FirebaseAnalytics/Tests/SwiftUnit"
),
.testTarget(
name: "AnalyticsObjCAPI",
dependencies: ["FirebaseAnalytics"],
path: "FirebaseAnalytics/Tests/ObjCAPI"
),
.target(
name: "FirebaseAnalyticsWithoutAdIdSupportTarget",
dependencies: [.target(name: "FirebaseAnalyticsWithoutAdIdSupportWrapper",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS]))],
path: "SwiftPM-PlatformExclude/FirebaseAnalyticsWithoutAdIdSupportWrap"
),
.target(
name: "FirebaseAnalyticsWithoutAdIdSupportWrapper",
dependencies: [
.target(
name: "FirebaseAnalytics",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])
),
.product(name: "GoogleAppMeasurementWithoutAdIdSupport",
package: "GoogleAppMeasurement",
condition: .when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])),
"FirebaseCore",
"FirebaseInstallations",
.product(name: "GULAppDelegateSwizzler", package: "GoogleUtilities"),
.product(name: "GULMethodSwizzler", package: "GoogleUtilities"),
.product(name: "GULNSData", package: "GoogleUtilities"),
.product(name: "GULNetwork", package: "GoogleUtilities"),
.product(name: "nanopb", package: "nanopb"),
],
path: "FirebaseAnalyticsWithoutAdIdSupportWrapper",
linkerSettings: [
.linkedLibrary("sqlite3"),
.linkedLibrary("c++"),
.linkedLibrary("z"),
.linkedFramework("StoreKit"),
]
),
.target(
name: "FirebaseAnalyticsOnDeviceConversionTarget",
dependencies: [
.product(name: "GoogleAppMeasurementOnDeviceConversion",
package: "GoogleAppMeasurement",
condition: .when(platforms: [.iOS])),
],
path: "FirebaseAnalyticsOnDeviceConversionWrapper",
linkerSettings: [
.linkedLibrary("c++"),
]
),
.target(
name: "FirebaseAppDistributionTarget",
dependencies: [.target(name: "FirebaseAppDistribution",
condition: .when(platforms: [.iOS]))],
path: "SwiftPM-PlatformExclude/FirebaseAppDistributionWrap"
),
.target(
name: "FirebaseAppDistribution",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
.product(name: "GULAppDelegateSwizzler", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
],
path: "FirebaseAppDistribution/Sources",
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "AppDistributionUnit",
dependencies: ["FirebaseAppDistribution", .product(name: "OCMock", package: "ocmock")],
path: "FirebaseAppDistribution/Tests/Unit",
exclude: ["Swift/"],
resources: [.process("Resources")],
cSettings: [
.headerSearchPath("../../.."),
]
),
.testTarget(
name: "AppDistributionUnitSwift",
dependencies: ["FirebaseAppDistribution"],
path: "FirebaseAppDistribution/Tests/Unit/Swift",
cSettings: [
.headerSearchPath("../../../.."),
]
),
.target(
name: "FirebaseAuth",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseAuthInternal",
"FirebaseCore",
"FirebaseCoreExtension",
.product(name: "GULAppDelegateSwizzler", package: "GoogleUtilities"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GTMSessionFetcherCore", package: "gtm-session-fetcher"),
],
path: "FirebaseAuth/Sources",
exclude: [
"ObjC", "Public",
],
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
linkerSettings: [
.linkedFramework("Security"),
.linkedFramework("SafariServices", .when(platforms: [.iOS])),
]
),
.target(
name: "FirebaseAuthInternal",
dependencies: [
.product(name: "RecaptchaInterop", package: "interop-ios-for-google-sdks"),
],
path: "FirebaseAuth/Sources",
exclude: [
"Swift", "Resources",
],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
// Internal headers only for consuming from Swift.
.target(
name: "FirebaseAuthInterop",
path: "FirebaseAuth/Interop",
exclude: [
"CMakeLists.txt",
],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "AuthUnit",
dependencies: [
"FirebaseAuth",
],
path: "FirebaseAuth/Tests/Unit",
exclude: [
// TODO: these tests rely on a non-zero UIApplication.shared. They run from CocoaPods.
"PhoneAuthProviderTests.swift",
"AuthNotificationManagerTests.swift",
"ObjCAPITests.m", // Only builds via CocoaPods until mixed language or its own target.
"ObjCGlobalTests.m", // Only builds via CocoaPods until mixed language or its own target.
]
),
.target(
name: "FirebaseAuthCombineSwift",
dependencies: ["FirebaseAuth"],
path: "FirebaseCombineSwift/Sources/Auth"
),
.target(
name: "FirebaseFirestoreCombineSwift",
dependencies: [
"FirebaseFirestoreTarget",
],
path: "FirebaseCombineSwift/Sources/Firestore"
),
.target(
name: "FirebaseStorageCombineSwift",
dependencies: [
"FirebaseStorage",
],
path: "FirebaseCombineSwift/Sources/Storage"
),
.target(
name: "FirebaseCrashlytics",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
"FirebaseSessions",
"FirebaseRemoteConfigInterop",
"FirebaseCrashlyticsSwift",
.product(name: "GoogleDataTransport", package: "GoogleDataTransport"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "FBLPromises", package: "Promises"),
.product(name: "nanopb", package: "nanopb"),
],
path: "Crashlytics",
exclude: [
"run",
"CHANGELOG.md",
"LICENSE",
"README.md",
"ProtoSupport/",
"UnitTests/",
"generate_project.sh",
"upload-symbols",
"CrashlyticsInputFiles.xcfilelist",
"third_party/libunwind/LICENSE",
"Crashlytics/Rollouts/",
],
sources: [
"Crashlytics/",
"Protogen/",
"Shared/",
"third_party/libunwind/dwarf.h",
],
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Crashlytics/Public",
cSettings: [
.headerSearchPath(".."),
.define("DISPLAY_VERSION", to: firebaseVersion),
.define("CLS_SDK_NAME", to: "Crashlytics iOS SDK", .when(platforms: [.iOS])),
.define(
"CLS_SDK_NAME",
to: "Crashlytics macOS SDK",
.when(platforms: [.macOS, .macCatalyst])
),
.define("CLS_SDK_NAME", to: "Crashlytics tvOS SDK", .when(platforms: [.tvOS])),
.define("CLS_SDK_NAME", to: "Crashlytics watchOS SDK", .when(platforms: [.watchOS])),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
],
linkerSettings: [
.linkedFramework("Security"),
.linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .macOS, .tvOS])),
]
),
.target(
name: "FirebaseCrashlyticsSwift",
dependencies: ["FirebaseRemoteConfigInterop"],
path: "Crashlytics",
sources: [
"Crashlytics/Rollouts/",
]
),
.testTarget(
name: "FirebaseCrashlyticsSwiftUnit",
dependencies: ["FirebaseCrashlyticsSwift"],
path: "Crashlytics/UnitTestsSwift/"
),
.testTarget(
name: "FirebaseCrashlyticsUnit",
dependencies: ["FirebaseCrashlytics", .product(name: "OCMock", package: "ocmock")],
path: "Crashlytics/UnitTests",
resources: [
.copy("FIRCLSMachO/machO_data"),
.copy("Data"),
],
cSettings: [
.headerSearchPath("../.."),
.define("DISPLAY_VERSION", to: firebaseVersion),
.define("CLS_SDK_NAME", to: "Crashlytics iOS SDK", .when(platforms: [.iOS])),
.define(
"CLS_SDK_NAME",
to: "Crashlytics macOS SDK",
.when(platforms: [.macOS, .macCatalyst])
),
.define("CLS_SDK_NAME", to: "Crashlytics tvOS SDK", .when(platforms: [.tvOS])),
.define("CLS_SDK_NAME", to: "Crashlytics watchOS SDK", .when(platforms: [.watchOS])),
]
),
.target(
name: "FirebaseDatabaseInternal",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseCore",
"leveldb",
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
],
path: "FirebaseDatabase/Sources",
exclude: [
"third_party/Wrap-leveldb/LICENSE",
"third_party/FImmutableSortedDictionary/LICENSE",
],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
],
linkerSettings: [
.linkedFramework("CFNetwork"),
.linkedFramework("Security"),
.linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .macOS, .tvOS])),
.linkedFramework("WatchKit", .when(platforms: [.watchOS])),
]
),
.testTarget(
name: "DatabaseUnit",
dependencies: [
"FirebaseDatabase",
"SharedTestUtilities",
.product(name: "OCMock", package: "ocmock"),
],
path: "FirebaseDatabase/Tests/",
exclude: [
// Disable Swift tests as mixed targets are not supported (Xcode 12.4).
"Unit/Swift",
"Integration/",
],
resources: [.process("Resources")],
cSettings: [
.headerSearchPath("../.."),
]
),
.testTarget(
name: "DatabaseUnitSwift",
dependencies: ["FirebaseDatabase"],
path: "FirebaseDatabase/Tests/Unit/Swift",
cSettings: [
.headerSearchPath("../.."),
]
),
.target(
name: "FirebaseDatabase",
dependencies: ["FirebaseDatabaseInternal", "FirebaseSharedSwift"],
path: "FirebaseDatabase/Swift/Sources"
),
.target(
name: "FirebaseSharedSwift",
path: "FirebaseSharedSwift/Sources",
exclude: [
"third_party/FirebaseDataEncoder/LICENSE",
"third_party/FirebaseDataEncoder/METADATA",
]
),
.testTarget(
name: "FirebaseSharedSwiftTests",
dependencies: ["FirebaseSharedSwift"],
path: "FirebaseSharedSwift/Tests/"
),
.target(
name: "FirebaseDynamicLinksTarget",
dependencies: [.target(name: "FirebaseDynamicLinks",
condition: .when(platforms: [.iOS]))],
path: "SwiftPM-PlatformExclude/FirebaseDynamicLinksWrap"
),
.target(
name: "FirebaseDynamicLinks",
dependencies: ["FirebaseCore"],
path: "FirebaseDynamicLinks/Sources",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
.define("FIRDynamicLinks3P", to: "1"),
.define("GIN_SCION_LOGGING", to: "1"),
],
linkerSettings: [
.linkedFramework("QuartzCore"),
]
),
firestoreWrapperTarget(),
// MARK: - Firebase Functions
.target(
name: "FirebaseFunctions",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseCore",
"FirebaseCoreExtension",
"FirebaseMessagingInterop",
"FirebaseSharedSwift",
.product(name: "GTMSessionFetcherCore", package: "gtm-session-fetcher"),
],
path: "FirebaseFunctions/Sources"
),
.testTarget(
name: "FirebaseFunctionsUnit",
dependencies: ["FirebaseFunctions",
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseMessagingInterop",
"SharedTestUtilities"],
path: "FirebaseFunctions/Tests/Unit",
cSettings: [
.headerSearchPath("../../../"),
]
),
.testTarget(
name: "FirebaseFunctionsIntegration",
dependencies: ["FirebaseFunctions",
"SharedTestUtilities"],
path: "FirebaseFunctions/Tests/Integration"
),
.testTarget(
name: "FirebaseFunctionsObjCIntegration",
dependencies: ["FirebaseFunctions",
"SharedTestUtilities"],
path: "FirebaseFunctions/Tests/ObjCIntegration",
// See https://forums.swift.org/t/importing-swift-libraries-from-objective-c/56730
exclude: [
"ObjCPPAPITests.mm",
],
cSettings: [
.headerSearchPath("../../.."),
]
),
.target(
name: "FirebaseFunctionsCombineSwift",
dependencies: ["FirebaseFunctions"],
path: "FirebaseCombineSwift/Sources/Functions"
),
.testTarget(
name: "FunctionsCombineUnit",
dependencies: ["FirebaseFunctionsCombineSwift",
"SharedTestUtilities"],
path: "FirebaseFunctions/Tests/CombineUnit"
),
// MARK: - Firebase In App Messaging
.target(
name: "FirebaseInAppMessagingTarget",
dependencies: [
.target(name: "FirebaseInAppMessaging", condition: .when(platforms: [.iOS, .tvOS])),
],
path: "SwiftPM-PlatformExclude/FirebaseInAppMessagingWrap"
),
.target(
name: "FirebaseInAppMessagingInternal",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
"FirebaseABTesting",
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
.product(name: "nanopb", package: "nanopb"),
.target(name: "FirebaseInAppMessaging_iOS", condition: .when(platforms: [.iOS])),
],
path: "FirebaseInAppMessaging/Sources",
exclude: [
"DefaultUI/CHANGELOG.md",
"DefaultUI/README.md",
],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
]
),
.target(
name: "FirebaseInAppMessaging_iOS",
path: "FirebaseInAppMessaging/iOS",
resources: [.process("Resources")]
),
.target(
name: "FirebaseInAppMessaging",
dependencies: ["FirebaseInAppMessagingInternal"],
path: "FirebaseInAppMessaging/Swift/Source"
),
.target(
name: "FirebaseInstallations",
dependencies: [
"FirebaseCore",
.product(name: "FBLPromises", package: "Promises"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
],
path: "FirebaseInstallations/Source/Library",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../../"),
],
linkerSettings: [
.linkedFramework("Security"),
]
),
.target(
name: "FirebaseMLModelDownloader",
dependencies: [
"FirebaseCore",
"FirebaseCoreExtension",
"FirebaseInstallations",
.product(name: "GoogleDataTransport", package: "GoogleDataTransport"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
.product(name: "SwiftProtobuf", package: "swift-protobuf"),
],
path: "FirebaseMLModelDownloader/Sources",
exclude: [
"proto/firebase_ml_log_sdk.proto",
],
cSettings: [
.define("FIRMLModelDownloader_VERSION", to: firebaseVersion),
]
),
.testTarget(
name: "FirebaseMLModelDownloaderUnit",
dependencies: ["FirebaseMLModelDownloader"],
path: "FirebaseMLModelDownloader/Tests/Unit"
),
.target(
name: "FirebaseMessaging",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
.product(name: "GULAppDelegateSwizzler", package: "GoogleUtilities"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULReachability", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
.product(name: "GoogleDataTransport", package: "GoogleDataTransport"),
.product(name: "nanopb", package: "nanopb"),
],
path: "FirebaseMessaging/Sources",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
],
linkerSettings: [
.linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .macOS, .tvOS])),
]
),
// Internal headers only for consuming from Swift.
.target(
name: "FirebaseMessagingInterop",
path: "FirebaseMessaging/Interop",
publicHeadersPath: ".",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "MessagingUnit",
dependencies: [
"FirebaseMessaging",
"SharedTestUtilities",
.product(name: "OCMock", package: "ocmock"),
],
path: "FirebaseMessaging/Tests/UnitTests",
exclude: [
"FIRMessagingContextManagerServiceTest.m", // TODO: Adapt its NSBundle usage to SPM.
],
cSettings: [
.headerSearchPath("../../.."),
]
),
.target(
name: "FirebasePerformanceTarget",
dependencies: [.target(name: "FirebasePerformance",
condition: .when(platforms: [.iOS, .tvOS, .visionOS]))],
path: "SwiftPM-PlatformExclude/FirebasePerformanceWrap"
),
.target(
name: "FirebasePerformance",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
// Performance depends on the Obj-C target of FirebaseRemoteConfig to
// avoid including Swift code from the `FirebaseRemoteConfig` target
// that is unneeded.
"FirebaseRemoteConfigInternal",
"FirebaseSessions",
.product(name: "GoogleDataTransport", package: "GoogleDataTransport"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULMethodSwizzler", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
.product(name: "nanopb", package: "nanopb"),
],
path: "FirebasePerformance/Sources",
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
.define("FIRPerformance_LIB_VERSION", to: firebaseVersion),
],
linkerSettings: [
.linkedFramework("MobileCoreServices", .when(platforms: [.iOS, .tvOS])),
.linkedFramework("QuartzCore", .when(platforms: [.iOS, .tvOS])),
]
),
.testTarget(
name: "PerformanceUnit",
dependencies: [
"FirebasePerformanceTarget",
"SharedTestUtilities",
"GCDWebServer",
.product(name: "OCMock", package: "ocmock"),
],
path: "FirebasePerformance/Tests/Unit",
resources: [
.process("FPRURLFilterTests-Info.plist"),
.process("Server/smallDownloadFile"),
.process("Server/bigDownloadFile"),
],
cSettings: [
.headerSearchPath("../../.."),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
]
),
.target(
name: "SharedTestUtilities",
dependencies: ["FirebaseCore",
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseMessagingInterop",
"GoogleDataTransport",
.product(name: "OCMock", package: "ocmock")],
path: "SharedTestUtilities",
publicHeadersPath: "./",
cSettings: [
.headerSearchPath("../"),
]
),
// MARK: - Firebase Remote Config
.target(
name: "FirebaseRemoteConfigInternal",
dependencies: [
"FirebaseCore",
"FirebaseABTesting",
"FirebaseInstallations",
"FirebaseRemoteConfigInterop",
.product(name: "GULNSData", package: "GoogleUtilities"),
],
path: "FirebaseRemoteConfig/Sources",
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "RemoteConfigUnit",
dependencies: ["FirebaseRemoteConfigInternal", .product(name: "OCMock", package: "ocmock")],
path: "FirebaseRemoteConfig/Tests/Unit",
exclude: [
// Need to be evaluated/ported to RC V2.
"RCNConfigAnalyticsTest.m",
"RCNConfigSettingsTest.m",
"RCNConfigTest.m",
"RCNRemoteConfig+FIRAppTest.m",
"RCNThrottlingTests.m",
],
resources: [
.process("SecondApp-GoogleService-Info.plist"),
.process("Defaults-testInfo.plist"),
.process("TestABTPayload.txt"),
],
cSettings: [
.headerSearchPath("../../.."),
]
),
.testTarget(
name: "RemoteConfigSwiftUnit",
dependencies: ["FirebaseRemoteConfigInternal"],
path: "FirebaseRemoteConfig/Tests/SwiftUnit",
cSettings: [
.headerSearchPath("../../.."),
]
),
.target(
name: "FirebaseRemoteConfig",
dependencies: [
"FirebaseRemoteConfigInternal",
"FirebaseSharedSwift",
],
path: "FirebaseRemoteConfig/Swift",
resources: [.process("Resources/PrivacyInfo.xcprivacy")]
),
.testTarget(
name: "RemoteConfigFakeConsole",
dependencies: ["FirebaseRemoteConfig",
"RemoteConfigFakeConsoleObjC"],
path: "FirebaseRemoteConfig/Tests/Swift",
exclude: [
"AccessToken.json",
"README.md",
"ObjC/",
],
resources: [
.process("Defaults-testInfo.plist"),
],
cSettings: [
.headerSearchPath("../../../"),
]
),
.target(
name: "RemoteConfigFakeConsoleObjC",
dependencies: [.product(name: "OCMock", package: "ocmock")],
path: "FirebaseRemoteConfig/Tests/Swift/ObjC",
publicHeadersPath: ".",
cSettings: [
.headerSearchPath("../../../../"),
]
),
// Internal headers only for consuming from other SDK.
.target(
name: "FirebaseRemoteConfigInterop",
path: "FirebaseRemoteConfig/Interop",
publicHeadersPath: ".",
cSettings: [
.headerSearchPath("../../"),
]
),
// MARK: - Firebase Sessions
.target(
name: "FirebaseSessions",
dependencies: [
"FirebaseCore",
"FirebaseInstallations",
"FirebaseCoreExtension",
"FirebaseSessionsObjC",
.product(name: "Promises", package: "Promises"),
.product(name: "GoogleDataTransport", package: "GoogleDataTransport"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
],
path: "FirebaseSessions/Sources",
cSettings: [
.headerSearchPath(".."),
.define("DISPLAY_VERSION", to: firebaseVersion),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
],
linkerSettings: [
.linkedFramework("Security"),
.linkedFramework(
"SystemConfiguration",
.when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])
),
]
),
// The Sessions SDK is Swift-first with Objective-C code to support
// nanopb. Because Swift Package Manager doesn't support mixed
// language targets, the ObjC code has been extracted out into
// a separate target.
.target(
name: "FirebaseSessionsObjC",
dependencies: [
"FirebaseCore",
"FirebaseCoreExtension",
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "nanopb", package: "nanopb"),
],
path: "FirebaseSessions",
exclude: [
"README.md",
"Sources/",
"Tests/",
"ProtoSupport/",
"generate_project.sh",
"generate_protos.sh",
"generate_testapp.sh",
],
publicHeadersPath: "SourcesObjC",
cSettings: [
.headerSearchPath(".."),
.define("DISPLAY_VERSION", to: firebaseVersion),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
],
linkerSettings: [
.linkedFramework("Security"),
.linkedFramework(
"SystemConfiguration",
.when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])
),
]
),
.testTarget(
name: "FirebaseSessionsUnit",
dependencies: ["FirebaseSessions"],
path: "FirebaseSessions/Tests/Unit"
),
// MARK: - Firebase Storage
.target(
name: "FirebaseStorage",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseCore",
"FirebaseCoreExtension",
.product(name: "GTMSessionFetcherCore", package: "gtm-session-fetcher"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
],
path: "FirebaseStorage/Sources"
),
.testTarget(
name: "FirebaseStorageUnit",
dependencies: ["FirebaseStorage",
"SharedTestUtilities"],
path: "FirebaseStorage/Tests/Unit",
cSettings: [
.headerSearchPath("../../../"),
]
),
.testTarget(
name: "StorageObjCIntegration",
dependencies: ["FirebaseStorage"],
path: "FirebaseStorage/Tests/ObjCIntegration",
exclude: [
// See https://forums.swift.org/t/importing-swift-libraries-from-objective-c/56730
"FIRStorageIntegrationTests.m",
"ObjCPPAPITests.mm",
"Credentials.h",
],
cSettings: [
.headerSearchPath("../../.."),
]
),
.testTarget(
name: "swift-test",
dependencies: [
"Firebase",
"FirebaseAuth",
"FirebaseAppCheck",
"FirebaseABTesting",
"FirebaseAnalytics",
.target(name: "FirebaseAppDistribution",
condition: .when(platforms: [.iOS])),
"FirebaseAuthCombineSwift",
"FirebaseFirestoreCombineSwift",
"FirebaseFunctionsCombineSwift",
"FirebaseStorageCombineSwift",
"FirebaseCrashlytics",
"FirebaseCore",
"FirebaseDatabase",
"FirebaseDynamicLinks",
"FirebaseFirestoreTarget",
"FirebaseFunctions",
.target(name: "FirebaseInAppMessaging",
condition: .when(platforms: [.iOS, .tvOS])),
"FirebaseInstallations",
"FirebaseMessaging",
.target(name: "FirebasePerformance",
condition: .when(platforms: [.iOS, .tvOS])),
"FirebaseRemoteConfig",
"FirebaseSessions",
"FirebaseStorage",
.product(name: "nanopb", package: "nanopb"),
],
path: "SwiftPMTests/swift-test"
),
.testTarget(
name: "analytics-import-test",
dependencies: [
"FirebaseAnalyticsWrapper",
"Firebase",
],
path: "SwiftPMTests/analytics-import-test"
),
.testTarget(
name: "objc-import-test",
dependencies: [
"Firebase",
"FirebaseAuth",
"FirebaseABTesting",
"FirebaseAppCheck",
.target(name: "FirebaseAppDistribution",
condition: .when(platforms: [.iOS])),
"FirebaseCrashlytics",
"FirebaseCore",
"FirebaseDatabase",
"FirebaseDynamicLinks",
"FirebaseFirestoreTarget",
"FirebaseFunctions",
.target(name: "FirebaseInAppMessaging",
condition: .when(platforms: [.iOS, .tvOS])),
"FirebaseInstallations",
"FirebaseMessaging",
.target(name: "FirebasePerformance",
condition: .when(platforms: [.iOS, .tvOS])),
"FirebaseRemoteConfig",
"FirebaseStorage",
],
path: "SwiftPMTests/objc-import-test"
),
.testTarget(
name: "version-test",
dependencies: [
"FirebaseCore",
],
path: "SwiftPMTests/version-test",
cSettings: [
.define("FIR_VERSION", to: firebaseVersion),
]
),
// MARK: - Firebase App Check
.target(name: "FirebaseAppCheck",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseCore",
.product(name: "AppCheckCore", package: "app-check"),
.product(name: "GULEnvironment", package: "GoogleUtilities"),
.product(name: "GULUserDefaults", package: "GoogleUtilities"),
],
path: "FirebaseAppCheck/Sources",
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../.."),
],
linkerSettings: [
.linkedFramework(
"DeviceCheck",
.when(platforms: [.iOS, .macCatalyst, .macOS, .tvOS])
),
]),
// Internal headers only for consuming from Swift.
.target(
name: "FirebaseAppCheckInterop",
path: "FirebaseAppCheck/Interop",
exclude: [
"CMakeLists.txt",
],
publicHeadersPath: "Public",
cSettings: [
.headerSearchPath("../../"),
]
),
.testTarget(
name: "FirebaseAppCheckUnit",
dependencies: [
"FirebaseAppCheck",
"SharedTestUtilities",
.product(name: "OCMock", package: "ocmock"),
],
path: "FirebaseAppCheck/Tests/Unit",
exclude: [
// Swift tests are in the target `FirebaseAppCheckUnitSwift` since mixed language targets
// are not supported (as of Xcode 15.0).
"Swift",
],
cSettings: [
.headerSearchPath("../../.."),
]
),
.testTarget(
name: "FirebaseAppCheckUnitSwift",
dependencies: ["FirebaseAppCheck"],
path: "FirebaseAppCheck/Tests/Unit/Swift"
),
// MARK: Testing support
.target(
name: "FirebaseFirestoreTestingSupport",
dependencies: ["FirebaseFirestoreTarget"],
path: "FirebaseTestingSupport/Firestore/Sources",
publicHeadersPath: "./",
cSettings: [
.headerSearchPath("../../.."),
.headerSearchPath("../../../Firestore/Source/Public/FirebaseFirestore"),
]
),
.testTarget(
name: "FirestoreTestingSupportTests",
dependencies: ["FirebaseFirestoreTestingSupport"],
path: "FirebaseTestingSupport/Firestore/Tests",
cSettings: [
.headerSearchPath("../../.."),
]
),
// MARK: - Firebase Vertex AI
.target(
name: "FirebaseVertexAI",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseAuthInterop",
"FirebaseCore",
"FirebaseCoreExtension",
],
path: "FirebaseVertexAI/Sources"
),
.testTarget(
name: "FirebaseVertexAIUnit",
dependencies: ["FirebaseVertexAI", "SharedTestUtilities"],
path: "FirebaseVertexAI/Tests/Unit",
resources: [
.process("vertexai-sdk-test-data/mock-responses"),
],
cSettings: [
.headerSearchPath("../../../"),
]
),
.testTarget(
name: "FirebaseVertexAIIntegration",
dependencies: ["FirebaseVertexAI"],
path: "FirebaseVertexAI/Tests/Integration",
resources: [
.process("Resources"),
]
),
] + firestoreTargets(),
cLanguageStandard: .c99,
cxxLanguageStandard: CXXLanguageStandard.gnucxx14
)
// MARK: - Helper Functions
func googleAppMeasurementDependency() -> Package.Dependency {
let appMeasurementURL = "https://github.com/google/GoogleAppMeasurement.git"
// Point SPM CI to the tip of main of https://github.com/google/GoogleAppMeasurement so that the
// release process can defer publishing the GoogleAppMeasurement tag until after testing.
if ProcessInfo.processInfo.environment["FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT"] != nil {
return .package(url: appMeasurementURL, branch: "main")
}
return .package(url: appMeasurementURL, exact: "11.0.0")
}
func abseilDependency() -> Package.Dependency {
let packageInfo: (url: String, range: Range<Version>)
// If building Firestore from source, abseil will need to be built as source
// as the headers in the binary version of abseil are unusable.
if ProcessInfo.processInfo.environment["FIREBASE_SOURCE_FIRESTORE"] != nil {
packageInfo = (
"https://github.com/firebase/abseil-cpp-SwiftPM.git",
"0.20240116.1" ..< "0.20240117.0"
)
} else {
packageInfo = (
"https://github.com/google/abseil-cpp-binary.git",
"1.2024011601.1" ..< "1.2024011700.0"
)
}
return .package(url: packageInfo.url, packageInfo.range)
}
func grpcDependency() -> Package.Dependency {
let packageInfo: (url: String, range: Range<Version>)
// If building Firestore from source, abseil will need to be built as source
// as the headers in the binary version of abseil are unusable.
if ProcessInfo.processInfo.environment["FIREBASE_SOURCE_FIRESTORE"] != nil {
packageInfo = ("https://github.com/grpc/grpc-ios.git", "1.65.0" ..< "1.66.0")
} else {
packageInfo = ("https://github.com/google/grpc-binary.git", "1.62.2" ..< "1.63.0")
}
return .package(url: packageInfo.url, packageInfo.range)
}
func firestoreWrapperTarget() -> Target {
if ProcessInfo.processInfo.environment["FIREBASE_SOURCE_FIRESTORE"] != nil {
return .target(
name: "FirebaseFirestoreTarget",
dependencies: [.target(name: "FirebaseFirestore",
condition: .when(platforms: [.iOS, .tvOS, .macOS, .visionOS]))],
path: "SwiftPM-PlatformExclude/FirebaseFirestoreWrap"
)
}
return .target(
name: "FirebaseFirestoreTarget",
dependencies: [.target(name: "FirebaseFirestore",
condition: .when(platforms: [.iOS, .tvOS, .macOS, .macCatalyst]))],
path: "SwiftPM-PlatformExclude/FirebaseFirestoreWrap",
cSettings: [.define("FIREBASE_BINARY_FIRESTORE", to: "1")]
)
}
func firestoreTargets() -> [Target] {
if ProcessInfo.processInfo.environment["FIREBASE_SOURCE_FIRESTORE"] != nil {
return [
.target(
name: "FirebaseFirestoreInternalWrapper",
dependencies: [
"FirebaseAppCheckInterop",
"FirebaseCore",
"leveldb",
.product(name: "nanopb", package: "nanopb"),
.product(name: "abseil", package: "abseil-cpp-SwiftPM"),
.product(name: "gRPC-cpp", package: "grpc-ios"),
],
path: "Firestore",
exclude: [
"CHANGELOG.md",
"CMakeLists.txt",
"Example/",
"LICENSE",
"Protos/CMakeLists.txt",
"Protos/Podfile",
"Protos/README.md",
"Protos/build_protos.py",
"Protos/cpp/",
"Protos/lib/",
"Protos/nanopb_cpp_generator.py",
"Protos/protos/",
"README.md",
"Source/CMakeLists.txt",
"Swift/",
"core/CMakeLists.txt",
"core/src/util/config_detected.h.in",
"core/test/",
"fuzzing/",
"test.sh",
// Swift PM doesn't recognize hpp files, so we're relying on search paths
// to find third_party/nlohmann_json/json.hpp.
"third_party/",
// Exclude alternate implementations for other platforms
"core/src/remote/connectivity_monitor_noop.cc",
"core/src/util/filesystem_win.cc",
"core/src/util/log_stdio.cc",
"core/src/util/secure_random_openssl.cc",
],
sources: [
"Source/",
"Protos/nanopb/",
"core/include/",
"core/src",
],
publicHeadersPath: "Source/Public",
cSettings: [
.headerSearchPath("../"),
.headerSearchPath("Source/Public/FirebaseFirestore"),
.headerSearchPath("Protos/nanopb"),
.define("PB_FIELD_32BIT", to: "1"),
.define("PB_NO_PACKED_STRUCTS", to: "1"),
.define("PB_ENABLE_MALLOC", to: "1"),
.define("FIRFirestore_VERSION", to: firebaseVersion),
],
linkerSettings: [
.linkedFramework(
"SystemConfiguration",
.when(platforms: [.iOS, .macOS, .tvOS, .visionOS])
),
.linkedFramework("UIKit", .when(platforms: [.iOS, .tvOS, .visionOS])),
.linkedLibrary("c++"),
]
),
.target(
name: "FirebaseFirestore",
dependencies: [
"FirebaseCore",
"FirebaseCoreExtension",
"FirebaseFirestoreInternalWrapper",
"FirebaseSharedSwift",
],
path: "Firestore",
exclude: [
"CHANGELOG.md",
"CMakeLists.txt",
"Example/",
"LICENSE",
"Protos/",
"README.md",
"Source/",
"core/",
"fuzzing/",
"test.sh",
"Swift/CHANGELOG.md",
"Swift/Tests/",
"third_party/nlohmann_json",
],
sources: [
"Swift/Source/",
],
resources: [.process("Source/Resources/PrivacyInfo.xcprivacy")]
),
]
}
let firestoreInternalTarget: Target = {
if ProcessInfo.processInfo.environment["FIREBASECI_USE_LOCAL_FIRESTORE_ZIP"] != nil {
// This is set when running `scripts/check_firestore_symbols.sh`.
return .binaryTarget(
name: "FirebaseFirestoreInternal",
// The `xcframework` should be moved to the root of the repo.
path: "FirebaseFirestoreInternal.xcframework"
)
} else {
return .binaryTarget(
name: "FirebaseFirestoreInternal",
url: "https://dl.google.com/firebase/ios/bin/firestore/10.27.0/rc0/FirebaseFirestoreInternal.zip",
checksum: "38f6d1bb13fabca97f53c0ef5bf283b2fbbbf460eac8fa875cd3faab597097b8"
)
}
}()
return [
.target(
name: "FirebaseFirestore",
dependencies: [
.target(
name: "FirebaseFirestoreInternalWrapper",
condition: .when(platforms: [.iOS, .macCatalyst, .tvOS, .macOS])
),
.product(
name: "abseil",
package: "abseil-cpp-binary",
condition: .when(platforms: [.iOS, .macCatalyst, .tvOS, .macOS])
),
.product(
name: "gRPC-C++",
package: "grpc-binary",
condition: .when(platforms: [.iOS, .macCatalyst, .tvOS, .macOS])
),
.product(name: "nanopb", package: "nanopb"),
"FirebaseAppCheckInterop",
"FirebaseCore",
"FirebaseCoreExtension",
"leveldb",
"FirebaseSharedSwift",
],
path: "Firestore/Swift/Source",
resources: [.process("Resources/PrivacyInfo.xcprivacy")],
linkerSettings: [
.linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .macOS, .tvOS])),
.linkedFramework("UIKit", .when(platforms: [.iOS, .tvOS])),
.linkedLibrary("c++"),
]
),
.target(
name: "FirebaseFirestoreInternalWrapper",
dependencies: [.target(
name: "FirebaseFirestoreInternal",
condition: .when(platforms: [.iOS, .macCatalyst, .tvOS, .macOS])
)],
path: "FirebaseFirestoreInternal",
publicHeadersPath: "."
),
firestoreInternalTarget,
]
}