跳到主要内容

Apple 隐私清单文件

警告

如果您未在隐私清单中正确声明 API 的使用和数据处理的原因,您可能会收到 ITMS-91053 Missing API declaration 的警告。从 2024 年 5 月 1 日起,未包含这些声明的应用程序将 无法上传或更新

在 2024 年 3 月 13 日之后向 App Store 提交新的应用程序版本或更新现有版本,请注意 Apple 的隐私政策更新。根据最新要求,开发者在提交应用程序时,必须提供隐私清单文件PrivacyInfo.xcprivacy),详细说明应用程序如何使用用户数据。更多信息,查看关于 App Store 提交的隐私更新

这些变化强调了 Apple 对于隐私保护的承诺,同时也给开发者提出了新的挑战,要求他们在设计和开发应用程序时更加关注用户隐私。开发者需要确保他们的应用程序和集成的第三方 SDK 都符合新的隐私政策要求,以免影响应用程序在 App Store 上的发布和更新

为了避免这种情况,请按照 隐私清单配置指南 准备您的 PrivacyInfo.xcprivacy 文件。此文件应详细描述您的应用程序如何处理各种数据类型,并为每种数据使用提供合理的说明。

更多资料见:

Unity

  • 从 Unity 2021.3.35f12022.3.18f12023.2.7f1 开始,Unity 在导出 Xcode 工程时增加 新功能: 检测 Unity C# API,并会自动生成 所需的 Reason API 声明/UnityFramework/PrivacyInfo.xcprivacy
  • Unity 同时也支持自定义的 PrivacyInfo.xcprivacy,Unity 会搜索 Assets/Plugins目录,自动合并至 Xcode 工程的 /UnityFramework/PrivacyInfo.xcprivacy 中。

低版本 Unity 适配 Combo SDK

信息

此方案适用于 不能 升级新版本的 Unity 研发团队

1. 手动创建 PrivacyInfo.xcprivacy

2. 合并数数 SDK 隐私清单

因为低版本 Unity 不支持自动合并 Plugins/PrivacyInfo.xcprivacy,所以需要将 com.seayoo.sdk/ThinkingData/Plugins/iOS/PrivacyInfo.xcprivacy 的内容 手动 合并到游戏研发创建的 PrivacyInfo.xcprivacy 中。

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>

3. Xcode 添加 PrivacyInfo.xcprivacy

Unity 导出到 Xcode 工程后,手动将 PrivacyInfo.xcprivacy 文件添加到 Xcode 工程

img

提示

推荐使用 Unity PostBuild,可以将 Unity 目录的 PrivacyInfo.xcprivacy 添加至 Xcode Project

Combo SDK 的隐私清单

Combo SDK 所有 xcframework 均已提供隐私清单文件,接入 Combo SDK 时无需做额外处理按原来的方式集成即可,如果想要查看 Combo SDK 的隐私清单,可以自行查看 xcframework 内的 PrivacyInfo.xcprivacy

查看隐私清单报告

隐私清单报告可以帮助开发者了解其如何使用隐私数据及相关API。开发者可以在Xcode 将第三方 SDK 中的隐私清单合并,然后导出一个 PDF 报告汇总,在向 App Store 提交审核时,填写隐私标签时可以参考报告,可通过 Xcode 15 生成隐私报告,验证是否符合预期。

img

隐私清单报告示例

img

延伸阅读

其他 SDK 厂商

FAQ

使用 Unity 支持 Privacy 的版本,还需要适配 Combo SDK 吗?

答:不需要做任何适配

若游戏中使用了其他第三方 SDK,应该怎么处理隐私清单?

答: 可以按照第三方 SDK 文档说明进行处理

提示
  • 如果第三方依赖是 .a 文件,需要手动将三方的 .xcprivacy 合并
  • 如果第三方依赖是 frameworkxcframework,且没有通过 embed 到 Xcode,需要手动将三方提供的 .xcprivacy 合并
  • 其它的 frameworkxcframeworkbundle 内如果包含 .xcprivacy Xcode 会自行合并