From 442b683cfed431efd4e33a7fc4bd9654f2eec59e Mon Sep 17 00:00:00 2001 From: NachoSoto Date: Wed, 14 Jun 2023 12:22:35 -0700 Subject: [PATCH] Added `.xcprivacy` for Xcode 15 (#2619) Example generated report: ![Screenshot 2023-06-09 at 15 16 11](https://github.com/RevenueCat/purchases-ios/assets/685609/5b4265d5-4102-4938-9efa-1915678fc635) --- .../project.pbxproj | 4 ++++ .../Shared/PrivacyInfo.xcprivacy | 10 ++++++++ Package.swift | 8 ++++++- RevenueCat.xcodeproj/project.pbxproj | 4 ++++ Sources/PrivacyInfo.xcprivacy | 23 +++++++++++++++++++ .../PrivacyInfo.xcprivacy | 10 ++++++++ .../PurchaseTester.xcodeproj/project.pbxproj | 8 +++++-- 7 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 Examples/MagicWeatherSwiftUI/Shared/PrivacyInfo.xcprivacy create mode 100644 Sources/PrivacyInfo.xcprivacy create mode 100644 Tests/TestingApps/PurchaseTesterSwiftUI/PrivacyInfo.xcprivacy diff --git a/Examples/MagicWeatherSwiftUI/Magic Weather SwiftUI.xcodeproj/project.pbxproj b/Examples/MagicWeatherSwiftUI/Magic Weather SwiftUI.xcodeproj/project.pbxproj index 5bb67e13bc..3bb9fa93e3 100644 --- a/Examples/MagicWeatherSwiftUI/Magic Weather SwiftUI.xcodeproj/project.pbxproj +++ b/Examples/MagicWeatherSwiftUI/Magic Weather SwiftUI.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 4FDA13832A33D9B900C45CFE /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4FDA13822A33D86100C45CFE /* PrivacyInfo.xcprivacy */; }; 55413BE725B735AF00ECCA5A /* UserView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55413BE625B735AF00ECCA5A /* UserView.swift */; }; 55413BEC25B735C500ECCA5A /* WeatherView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55413BEB25B735C500ECCA5A /* WeatherView.swift */; }; 55413BF125B73A6F00ECCA5A /* PaywallView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 55413BF025B73A6F00ECCA5A /* PaywallView.swift */; }; @@ -37,6 +38,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 4FDA13822A33D86100C45CFE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 55413BE625B735AF00ECCA5A /* UserView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserView.swift; sourceTree = ""; }; 55413BEB25B735C500ECCA5A /* WeatherView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WeatherView.swift; sourceTree = ""; }; 55413BF025B73A6F00ECCA5A /* PaywallView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallView.swift; sourceTree = ""; }; @@ -99,6 +101,7 @@ children = ( 559779AB25B72D3200C33DFB /* Constants.swift */, 559779B125B72D4C00C33DFB /* Sources */, + 4FDA13822A33D86100C45CFE /* PrivacyInfo.xcprivacy */, 5597797925ACDC3E00C33DFB /* Assets.xcassets */, ); path = Shared; @@ -223,6 +226,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4FDA13832A33D9B900C45CFE /* PrivacyInfo.xcprivacy in Resources */, 5597798E25ACDC3E00C33DFB /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Examples/MagicWeatherSwiftUI/Shared/PrivacyInfo.xcprivacy b/Examples/MagicWeatherSwiftUI/Shared/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..fcfc9b9f63 --- /dev/null +++ b/Examples/MagicWeatherSwiftUI/Shared/PrivacyInfo.xcprivacy @@ -0,0 +1,10 @@ + + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/Package.swift b/Package.swift index a689599c34..fdf3f75d7e 100644 --- a/Package.swift +++ b/Package.swift @@ -36,10 +36,16 @@ let package = Package( targets: [ .target(name: "RevenueCat", path: "Sources", - exclude: ["Info.plist", "LocalReceiptParsing/ReceiptParser-only-files"]), + exclude: ["Info.plist", "LocalReceiptParsing/ReceiptParser-only-files"], + resources: [ + .copy("../Sources/PrivacyInfo.xcprivacy") + ]), .target(name: "RevenueCat_CustomEntitlementComputation", path: "CustomEntitlementComputation", exclude: ["Info.plist", "LocalReceiptParsing/ReceiptParser-only-files"], + resources: [ + .copy("PrivacyInfo.xcprivacy") + ], swiftSettings: [.define("ENABLE_CUSTOM_ENTITLEMENT_COMPUTATION")]), .target(name: "ReceiptParser", path: "LocalReceiptParsing"), diff --git a/RevenueCat.xcodeproj/project.pbxproj b/RevenueCat.xcodeproj/project.pbxproj index e1fcb1e93c..128287594f 100644 --- a/RevenueCat.xcodeproj/project.pbxproj +++ b/RevenueCat.xcodeproj/project.pbxproj @@ -246,6 +246,7 @@ 4FCEEA612A379CF9002C2112 /* DebugViewSwiftUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCEEA602A379CF9002C2112 /* DebugViewSwiftUITests.swift */; }; 4FCEEA632A37A2E9002C2112 /* ImageSnapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FCEEA622A37A2E9002C2112 /* ImageSnapshot.swift */; }; 4FD291BE2A1E9A2E0098D1B9 /* StoreKit2TransactionFetcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FD291BD2A1E9A2E0098D1B9 /* StoreKit2TransactionFetcherTests.swift */; }; + 4FDA13842A33D9BD00C45CFE /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4FDA13662A33D13700C45CFE /* PrivacyInfo.xcprivacy */; }; 4FE6669F2A2F95A1004EEAFC /* PaywallExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FE6669E2A2F95A1004EEAFC /* PaywallExtensions.swift */; }; 4FF8464D2A32554300617F00 /* DiagnosticsStrings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF8464C2A32554300617F00 /* DiagnosticsStrings.swift */; }; 57032ABF28C13CE4004FF47A /* StoreKit2SettingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 57032ABE28C13CE4004FF47A /* StoreKit2SettingTests.swift */; }; @@ -940,6 +941,7 @@ 4FCEEA602A379CF9002C2112 /* DebugViewSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DebugViewSwiftUITests.swift; sourceTree = ""; }; 4FCEEA622A37A2E9002C2112 /* ImageSnapshot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageSnapshot.swift; sourceTree = ""; }; 4FD291BD2A1E9A2E0098D1B9 /* StoreKit2TransactionFetcherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreKit2TransactionFetcherTests.swift; sourceTree = ""; }; + 4FDA13662A33D13700C45CFE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 4FE6669E2A2F95A1004EEAFC /* PaywallExtensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaywallExtensions.swift; sourceTree = ""; }; 4FF8464C2A32554300617F00 /* DiagnosticsStrings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticsStrings.swift; sourceTree = ""; }; 57032ABE28C13CE4004FF47A /* StoreKit2SettingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StoreKit2SettingTests.swift; sourceTree = ""; }; @@ -1563,6 +1565,7 @@ 35E840C1270FB45600899AE2 /* Support */, 2DC5621924EC63430031F69B /* Info.plist */, 2DC5621824EC63430031F69B /* RevenueCat.h */, + 4FDA13662A33D13700C45CFE /* PrivacyInfo.xcprivacy */, ); path = Sources; sourceTree = ""; @@ -2903,6 +2906,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4FDA13842A33D9BD00C45CFE /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Sources/PrivacyInfo.xcprivacy b/Sources/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..31e4852920 --- /dev/null +++ b/Sources/PrivacyInfo.xcprivacy @@ -0,0 +1,23 @@ + + + + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypePurchaseHistory + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + + + + NSPrivacyTracking + + + diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/PrivacyInfo.xcprivacy b/Tests/TestingApps/PurchaseTesterSwiftUI/PrivacyInfo.xcprivacy new file mode 100644 index 0000000000..fcfc9b9f63 --- /dev/null +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/PrivacyInfo.xcprivacy @@ -0,0 +1,10 @@ + + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + + diff --git a/Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester.xcodeproj/project.pbxproj b/Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester.xcodeproj/project.pbxproj index 1e29405832..a522761c43 100644 --- a/Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester.xcodeproj/project.pbxproj +++ b/Tests/TestingApps/PurchaseTesterSwiftUI/PurchaseTester.xcodeproj/project.pbxproj @@ -22,10 +22,11 @@ 2CF428692863EEAC007E6A78 /* Package+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CF428682863EEAC007E6A78 /* Package+Extensions.swift */; }; 2DD2CBB129831A09004A3A6A /* ReceiptInspector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD2CBB029831A09004A3A6A /* ReceiptInspector.swift */; }; 2DD2CBB329831A22004A3A6A /* ReceiptVerifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2DD2CBB229831A22004A3A6A /* ReceiptVerifier.swift */; }; - 4F4F782F2A18542200689BAA /* LocalizedAlertError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F782E2A18542200689BAA /* LocalizedAlertError.swift */; }; 4F1F5E992A18124500C4EB88 /* ProxyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F1F5E982A18124500C4EB88 /* ProxyManager.swift */; }; 4F1F5E9B2A18124C00C4EB88 /* ProxyViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F1F5E9A2A18124C00C4EB88 /* ProxyViewModel.swift */; }; 4F1F5E9D2A1814EF00C4EB88 /* ProxyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F1F5E9C2A1814EF00C4EB88 /* ProxyView.swift */; }; + 4F4F782F2A18542200689BAA /* LocalizedAlertError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4F782E2A18542200689BAA /* LocalizedAlertError.swift */; }; + 4FDA13872A33DBE300C45CFE /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 4FDA13862A33DBE300C45CFE /* PrivacyInfo.xcprivacy */; }; 575642A4290C7A2700719219 /* LoggerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575642A3290C7A2700719219 /* LoggerView.swift */; }; 575642A6290C7D3100719219 /* Windows.swift in Sources */ = {isa = PBXBuildFile; fileRef = 575642A5290C7D3100719219 /* Windows.swift */; }; 5759B472296F9B3B002472D5 /* LocalReceiptView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5759B471296F9B3B002472D5 /* LocalReceiptView.swift */; }; @@ -136,10 +137,11 @@ 2CF428682863EEAC007E6A78 /* Package+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Package+Extensions.swift"; sourceTree = ""; }; 2DD2CBB029831A09004A3A6A /* ReceiptInspector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiptInspector.swift; sourceTree = ""; }; 2DD2CBB229831A22004A3A6A /* ReceiptVerifier.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReceiptVerifier.swift; sourceTree = ""; }; - 4F4F782E2A18542200689BAA /* LocalizedAlertError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizedAlertError.swift; sourceTree = ""; }; 4F1F5E982A18124500C4EB88 /* ProxyManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyManager.swift; sourceTree = ""; }; 4F1F5E9A2A18124C00C4EB88 /* ProxyViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyViewModel.swift; sourceTree = ""; }; 4F1F5E9C2A1814EF00C4EB88 /* ProxyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProxyView.swift; sourceTree = ""; }; + 4F4F782E2A18542200689BAA /* LocalizedAlertError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizedAlertError.swift; sourceTree = ""; }; + 4FDA13862A33DBE300C45CFE /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PrivacyInfo.xcprivacy; sourceTree = ""; }; 575642A1290C78DD00719219 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; 575642A3290C7A2700719219 /* LoggerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoggerView.swift; sourceTree = ""; }; 575642A5290C7D3100719219 /* Windows.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Windows.swift; sourceTree = ""; }; @@ -234,6 +236,7 @@ 2CD2C4E8278C9B01005D1CC2 = { isa = PBXGroup; children = ( + 4FDA13862A33DBE300C45CFE /* PrivacyInfo.xcprivacy */, 57FA0F7C2908503B00E9EA1B /* PurchaseTester.entitlements */, 2C8C610D27CEBEF200F86F21 /* PurchaseTester-Info.plist */, 57E9CF08290B0BE500EE12D1 /* AppIcon.xcassets */, @@ -466,6 +469,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4FDA13872A33DBE300C45CFE /* PrivacyInfo.xcprivacy in Resources */, 2CD2C51A278C9B02005D1CC2 /* Assets.xcassets in Resources */, 57E9CF09290B0E0600EE12D1 /* AppIcon.xcassets in Resources */, );