diff --git a/.github/workflows/zip.yml b/.github/workflows/zip.yml index 45578d33761..57c0dafc369 100644 --- a/.github/workflows/zip.yml +++ b/.github/workflows/zip.yml @@ -7,6 +7,8 @@ on: - '.github/workflows/zip.yml' - 'scripts/build_non_firebase_sdks.sh' - 'Gemfile*' + # DELETE BEFORE pushing + - 'FirebaseCore.podspec' # Don't run based on any markdown only changes. - '!ReleaseTooling/*.md' schedule: diff --git a/Crashlytics/Resources/PrivacyInfo.xcprivacy b/Crashlytics/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..730bb05c863 --- /dev/null +++ b/Crashlytics/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,66 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategorySystemBootTime + NSPrivacyAccessedAPITypeReasons + + 35F9.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + + + diff --git a/FirebaseABTesting.podspec b/FirebaseABTesting.podspec index 2321afaf72f..60e3584c1f0 100644 --- a/FirebaseABTesting.podspec +++ b/FirebaseABTesting.podspec @@ -43,6 +43,9 @@ Firebase Cloud Messaging and Firebase Remote Config in your app. 'Interop/Analytics/Public/*.h', 'FirebaseCore/Extension/*.h', ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy' + } s.requires_arc = base_dir + '*.m' s.public_header_files = base_dir + 'Public/FirebaseABTesting/*.h' s.pod_target_xcconfig = { diff --git a/FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..c89c88f62f5 --- /dev/null +++ b/FirebaseABTesting/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,18 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/FirebaseAuth.podspec b/FirebaseAuth.podspec index 63dc3f0fcc0..5333ffc3b4b 100644 --- a/FirebaseAuth.podspec +++ b/FirebaseAuth.podspec @@ -41,6 +41,9 @@ supports email and password accounts, as well as several 3rd party authenticatio 'FirebaseAuth/Interop/*.h', ] s.public_header_files = source + 'Public/FirebaseAuth/*.h' + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy' + } s.preserve_paths = [ 'FirebaseAuth/README.md', 'FirebaseAuth/CHANGELOG.md' diff --git a/FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..123ccfcd6f7 --- /dev/null +++ b/FirebaseAuth/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,50 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeUserID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + + + diff --git a/FirebaseCore.podspec b/FirebaseCore.podspec index f629afae4cd..5320d32e4ef 100644 --- a/FirebaseCore.podspec +++ b/FirebaseCore.podspec @@ -36,6 +36,10 @@ Firebase Core includes FIRApp and FIROptions which provide central configuration 'FirebaseCore/Extension/*.h' ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy' + } + s.swift_version = '5.3' s.public_header_files = 'FirebaseCore/Sources/Public/FirebaseCore/*.h' diff --git a/FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy b/FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..c89c88f62f5 --- /dev/null +++ b/FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,18 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..3fb515ffdd3 --- /dev/null +++ b/FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,26 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + 1C8F.1 + + + + + + diff --git a/FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..0244f2f54b0 --- /dev/null +++ b/FirebaseCore/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,26 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + + + + + diff --git a/FirebaseCoreExtension.podspec b/FirebaseCoreExtension.podspec index a5e6a1344d8..9f8aff68ce6 100644 --- a/FirebaseCoreExtension.podspec +++ b/FirebaseCoreExtension.podspec @@ -30,5 +30,9 @@ Pod::Spec.new do |s| s.source_files = 'FirebaseCore/Extension/*.[hm]' s.public_header_files = 'FirebaseCore/Extension/*.h' + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseCore/Extension/Resources/PrivacyInfo.xcprivacy' + } + s.dependency 'FirebaseCore', '~> 10.0' end diff --git a/FirebaseCoreInternal.podspec b/FirebaseCoreInternal.podspec index bae9c0dc743..330587c824d 100644 --- a/FirebaseCoreInternal.podspec +++ b/FirebaseCoreInternal.podspec @@ -32,6 +32,10 @@ Pod::Spec.new do |s| 'FirebaseCore/Internal/Sources/**/*.swift' ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseCore/Internal/Sources/Resources/PrivacyInfo.xcprivacy' + } + s.swift_version = '5.3' s.dependency 'GoogleUtilities/NSData+zlib', '~> 7.8' diff --git a/FirebaseCrashlytics.podspec b/FirebaseCrashlytics.podspec index b2303029d24..e4b5cebea5c 100644 --- a/FirebaseCrashlytics.podspec +++ b/FirebaseCrashlytics.podspec @@ -36,6 +36,10 @@ Pod::Spec.new do |s| 'Interop/Analytics/Public/*.h', ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'Crashlytics/Resources/PrivacyInfo.xcprivacy' + } + s.public_header_files = [ 'Crashlytics/Crashlytics/Public/FirebaseCrashlytics/*.h' ] diff --git a/FirebaseDynamicLinks.podspec b/FirebaseDynamicLinks.podspec index d81f919e856..d0c2cf282b8 100644 --- a/FirebaseDynamicLinks.podspec +++ b/FirebaseDynamicLinks.podspec @@ -29,6 +29,9 @@ Firebase Dynamic Links are deep links that enhance user experience and increase 'FirebaseCore/Extension/*.h', ] s.public_header_files = 'FirebaseDynamicLinks/Sources/Public/FirebaseDynamicLinks/*.h' + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseDynamicLinks/Sources/Resources/PrivacyInfo.xcprivacy' + } s.frameworks = 'QuartzCore' s.weak_framework = 'WebKit' s.dependency 'FirebaseCore', '~> 10.0' diff --git a/FirebaseDynamicLinks/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseDynamicLinks/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..0fccd3b0f69 --- /dev/null +++ b/FirebaseDynamicLinks/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,46 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDataTypes + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryFileTimestamp + NSPrivacyAccessedAPITypeReasons + + C617.1 + + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + 1C8F.1 + + + + + + diff --git a/FirebaseFirestore.podspec b/FirebaseFirestore.podspec index 0f80b831868..53d0f8a0877 100644 --- a/FirebaseFirestore.podspec +++ b/FirebaseFirestore.podspec @@ -31,6 +31,9 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling, 'FirebaseFirestoreInternal/**/*.[mh]', 'Firestore/Swift/Source/**/*.swift', ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'Firestore/Swift/Source/Resources/PrivacyInfo.xcprivacy' + } s.dependency 'FirebaseCore', '~> 10.0' s.dependency 'FirebaseCoreExtension', '~> 10.0' diff --git a/FirebaseFirestoreInternal.podspec b/FirebaseFirestoreInternal.podspec index 39a7e85ecf9..139ef417636 100644 --- a/FirebaseFirestoreInternal.podspec +++ b/FirebaseFirestoreInternal.podspec @@ -87,6 +87,10 @@ Google Cloud Firestore is a NoSQL document database built for automatic scaling, 'Firestore/core/src/util/secure_random_openssl.cc' ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'Firestore/Source/Resources/PrivacyInfo.xcprivacy' + } + s.dependency 'FirebaseAppCheckInterop', '~> 10.17' s.dependency 'FirebaseCore', '~> 10.0' diff --git a/FirebaseInstallations.podspec b/FirebaseInstallations.podspec index 7ba214b8d73..815ac860204 100644 --- a/FirebaseInstallations.podspec +++ b/FirebaseInstallations.podspec @@ -40,6 +40,9 @@ Pod::Spec.new do |s| s.public_header_files = [ base_dir + 'Library/Public/FirebaseInstallations/*.h', ] + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseInstallations/Source/Library/Resources/PrivacyInfo.xcprivacy' + } s.framework = 'Security' s.dependency 'FirebaseCore', '~> 10.0' diff --git a/FirebaseInstallations/Source/Library/Resources/PrivacyInfo.xcprivacy b/FirebaseInstallations/Source/Library/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..1e83fa67acd --- /dev/null +++ b/FirebaseInstallations/Source/Library/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,30 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/FirebaseMessaging.podspec b/FirebaseMessaging.podspec index cffc83756e8..0cee992e8b3 100644 --- a/FirebaseMessaging.podspec +++ b/FirebaseMessaging.podspec @@ -45,6 +45,9 @@ device, and it is completely free. 'FirebaseInstallations/Source/Library/Private/*.h', ] s.public_header_files = base_dir + 'Sources/Public/FirebaseMessaging/*.h' + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseMessaging/Sources/Resources/PrivacyInfo.xcprivacy' + } s.library = 'sqlite3' s.pod_target_xcconfig = { 'GCC_C_LANGUAGE_STANDARD' => 'c99', diff --git a/FirebaseMessaging/Sources/Resources/PrivacyInfo.xcprivacy b/FirebaseMessaging/Sources/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..3b29f79eeaf --- /dev/null +++ b/FirebaseMessaging/Sources/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,54 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDataTypes + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/FirebaseRemoteConfig.podspec b/FirebaseRemoteConfig.podspec index a19552b9463..1efbc8ff746 100644 --- a/FirebaseRemoteConfig.podspec +++ b/FirebaseRemoteConfig.podspec @@ -43,6 +43,9 @@ app update. 'FirebaseRemoteConfig/Swift/**/*.swift', ] s.public_header_files = base_dir + 'Public/FirebaseRemoteConfig/*.h' + s.resource_bundles = { + "#{s.module_name}_Privacy" => 'FirebaseRemoteConfig/Swift/Resources/PrivacyInfo.xcprivacy' + } s.pod_target_xcconfig = { 'GCC_C_LANGUAGE_STANDARD' => 'c99', 'HEADER_SEARCH_PATHS' => '"${PODS_TARGET_SRCROOT}"' diff --git a/FirebaseRemoteConfig/Swift/Resources/PrivacyInfo.xcprivacy b/FirebaseRemoteConfig/Swift/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..719a06f4937 --- /dev/null +++ b/FirebaseRemoteConfig/Swift/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,38 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + 1C8F.1 + + + + + + diff --git a/Firestore/Source/Resources/PrivacyInfo.xcprivacy b/Firestore/Source/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..1e83fa67acd --- /dev/null +++ b/Firestore/Source/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,30 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/Firestore/Swift/Source/Resources/PrivacyInfo.xcprivacy b/Firestore/Swift/Source/Resources/PrivacyInfo.xcprivacy new file mode 100644 index 00000000000..1e83fa67acd --- /dev/null +++ b/Firestore/Swift/Source/Resources/PrivacyInfo.xcprivacy @@ -0,0 +1,30 @@ + + + + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDiagnosticData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyAccessedAPITypes + + + + + diff --git a/Package.swift b/Package.swift index eaf1ce91704..5309b8ddbfd 100644 --- a/Package.swift +++ b/Package.swift @@ -199,6 +199,7 @@ let package = Package( .product(name: "GULLogger", package: "GoogleUtilities"), ], path: "FirebaseCore/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../.."), @@ -232,6 +233,7 @@ let package = Package( .target( name: "FirebaseCoreExtension", path: "FirebaseCore/Extension", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: ".", cSettings: [ .headerSearchPath("../../"), @@ -246,7 +248,8 @@ let package = Package( dependencies: [ .product(name: "GULNSData", package: "GoogleUtilities"), ], - path: "FirebaseCore/Internal/Sources" + path: "FirebaseCore/Internal/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")] ), .testTarget( name: "FirebaseCoreInternalTests", @@ -260,6 +263,7 @@ let package = Package( name: "FirebaseABTesting", dependencies: ["FirebaseCore"], path: "FirebaseABTesting/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), @@ -431,6 +435,7 @@ let package = Package( .product(name: "RecaptchaInterop", package: "interop-ios-for-google-sdks"), ], path: "FirebaseAuth/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), @@ -516,6 +521,7 @@ let package = Package( "Shared/", "third_party/libunwind/dwarf.h", ], + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Crashlytics/Public", cSettings: [ .headerSearchPath(".."), @@ -648,6 +654,7 @@ let package = Package( name: "FirebaseDynamicLinks", dependencies: ["FirebaseCore"], path: "FirebaseDynamicLinks/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), @@ -794,6 +801,7 @@ let package = Package( .product(name: "GULUserDefaults", package: "GoogleUtilities"), ], path: "FirebaseInstallations/Source/Library", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../../"), @@ -839,6 +847,7 @@ let package = Package( .product(name: "nanopb", package: "nanopb"), ], path: "FirebaseMessaging/Sources", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], publicHeadersPath: "Public", cSettings: [ .headerSearchPath("../../"), @@ -993,7 +1002,8 @@ let package = Package( "FirebaseRemoteConfigInternal", "FirebaseSharedSwift", ], - path: "FirebaseRemoteConfig/Swift" + path: "FirebaseRemoteConfig/Swift", + resources: [.process("Resources/PrivacyInfo.xcprivacy")] ), .target( name: "FirebaseRemoteConfigSwift", @@ -1465,7 +1475,8 @@ func firestoreTargets() -> [Target] { ], sources: [ "Swift/Source/", - ] + ], + resources: [.process("Source/Resources/PrivacyInfo.xcprivacy")] ), ] } @@ -1513,6 +1524,7 @@ func firestoreTargets() -> [Target] { "FirebaseSharedSwift", ], path: "Firestore/Swift/Source", + resources: [.process("Resources/PrivacyInfo.xcprivacy")], linkerSettings: [ .linkedFramework("SystemConfiguration", .when(platforms: [.iOS, .macOS, .tvOS])), .linkedFramework("UIKit", .when(platforms: [.iOS, .tvOS])),