Privacy manifest
Background
At WWDC23, Apple introduced a new privacy manifest policy. Starting from spring 2024, if your new app or app update adds a third-party SDK that is commonly used in apps on the App Store, you need to include the privacy manifest of that SDK.
Data collection SDK adaptation
The iOS data collection SDK provides a privacy manifest starting from v3.0.2-beta.2.
iOS integration
1. CocoaPods integration
Import the SDK directly. The privacy manifest is included automatically, so you don't need to handle it manually.
pod 'ThinkingSDK', '>= 3.0.2'
2. Framework integration
The .xcframework library of the iOS data collection SDK already contains the privacy manifest file, but the library isn't signed. If you need a signature, sign it yourself with an appropriate certificate.
- Download and unzip the iOS SDK
- Drag
ThinkingSDK.xcframeworkandThinkingDataCore.xcframeworkinto your XCode Project Workspace - Find Targets, and add
-ObjCto theOther linker flagsoption in the Build Settings menu
Game engine integration
Handle the privacy manifest file manually
-
The game engine editor automatically builds an Xcode project
-
In this Xcode project, create the privacy manifest file for your own project. For details, see Apple privacy manifest specification
-
Download the privacy manifest file of the ThinkingData data collection SDK (see the appendix)
-
Manually merge the data in the privacy manifest file of the ThinkingData data collection SDK into the privacy manifest of your project
- Copy each item under
NSPrivacyCollectedDataTypesin the appendix to the corresponding key in the PrivacyInfo.xcprivacy file of your app project - Copy each item under
NSPrivacyAccessedAPITypesto the corresponding key in the PrivacyInfo.xcprivacy file of your app project
- Copy each item under
Cross-platform framework integration
Handle the privacy manifest file manually
-
The editor of the cross-platform framework (for example, Flutter or RN) automatically builds an Xcode project
-
In this Xcode project, create the privacy manifest file for your own project. For details, see Apple privacy manifest specification
-
Download the privacy manifest file of the ThinkingData data collection SDK (see the appendix)
-
Manually merge the data in the privacy manifest file of the ThinkingData data collection SDK into the privacy manifest of your project
- Copy each item under
NSPrivacyCollectedDataTypesin the appendix to the corresponding key in the PrivacyInfo.xcprivacy file of your app project - Copy each item under
NSPrivacyAccessedAPITypesto the corresponding key in the PrivacyInfo.xcprivacy file of your app project
- Copy each item under
Appendix
Privacy manifest of the ThinkingData data collection SDK. The file name is PrivacyInfo.xcprivacy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeProductInteraction</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeCrashData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypePerformanceData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeCoarseLocation</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeUserID</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeDeviceID</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false/>
<key>NSPrivacyCollectedDataTypeTracking</key>
<false/>
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAnalytics</string>
</array>
</dict>
</array>
<key>NSPrivacyTrackingDomains</key>
<array/>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>1C8F.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>E174.1</string>
<string>7D9E.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>35F9.1</string>
</array>
</dict>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>C617.1</string>
</array>
</dict>
</array>
</dict>
</plist>

