Apple 隐私清单
解决与 Apple 隐私清单和 Sentry React Native SDK 相关的常见问题。
本指南需要 @sentry/react-native@5.22.1 或更新版本。
Sentry 的 SDK 为在 Apple 设备上运行的移动应用程序提供错误和性能监控。为此,SDK 需要访问有关设备和应用程序的某些信息。其中一些 API 被 Apple 视为隐私相关。为了将应用程序提交到 App Store,Apple 要求所有应用程序及其使用的库提供隐私清单文件,说明在哪些允许的原因下使用了哪些 API。更多详情,请参阅 Apple 关于 描述必需原因 API 的使用 的指南。
本指南中的信息和步骤仍在完善中,可能会因为新工具或更新的 Apple 要求 而发生变化。
如果你使用的是动态链接框架,Apple 将自动处理 SDK 的隐私清单。如果你使用的是静态链接库(这是 React Native 应用程序的默认设置),你需要自己提供隐私清单。本指南将帮助你为 React Native 和 Expo 应用程序创建隐私清单。
请注意,应用程序隐私清单涵盖了 整个应用程序 和 所有包含的库 的所有数据使用情况(通过 NSPrivacyCollectedDataTypes
)和 API 使用情况(通过 NSPrivacyAccessedAPITypes
)。以下示例仅反映了当前对 Sentry SDK 的要求。如果你使用了其他访问隐私相关 API 的库,也需要将它们包含在隐私清单中。
首先,你需要在 Xcode 项目中创建一个隐私清单文件。该文件应命名为 PrivacyInfo.xcprivacy
,并放置在 Xcode 项目的根目录中。请按照 Apple 的 隐私清单文件 指南来创建该文件。
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>NSPrivacyCollectedDataTypes</key>
<array>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeCrashData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false />
<key>NSPrivacyCollectedDataTypeTracking</key>
<false />
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypePerformanceData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false />
<key>NSPrivacyCollectedDataTypeTracking</key>
<false />
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
<dict>
<key>NSPrivacyCollectedDataType</key>
<string>NSPrivacyCollectedDataTypeOtherDiagnosticData</string>
<key>NSPrivacyCollectedDataTypeLinked</key>
<false />
<key>NSPrivacyCollectedDataTypeTracking</key>
<false />
<key>NSPrivacyCollectedDataTypePurposes</key>
<array>
<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string>
</array>
</dict>
</array>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.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>
根据 Expo 应用程序的设置,如果你使用的是连续原生生成 (CNG),则可能需要将隐私清单添加到 app.json
文件中。否则,你可以使用 Xcode 添加隐私清单。
app.json
{
"expo": {
"name": "My App",
"slug": "my-app",
"ios": {
"privacyManifests": {
"NSPrivacyCollectedDataTypes": [
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypeCrashData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
},
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypePerformanceData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
},
{
"NSPrivacyCollectedDataType": "NSPrivacyCollectedDataTypeOtherDiagnosticData",
"NSPrivacyCollectedDataTypeLinked": false,
"NSPrivacyCollectedDataTypeTracking": false,
"NSPrivacyCollectedDataTypePurposes": [
"NSPrivacyCollectedDataTypePurposeAppFunctionality"
]
}
],
"NSPrivacyAccessedAPITypes": [
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryUserDefaults",
"NSPrivacyAccessedAPITypeReasons": ["CA92.1"]
},
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategorySystemBootTime",
"NSPrivacyAccessedAPITypeReasons": ["35F9.1"]
},
{
"NSPrivacyAccessedAPIType": "NSPrivacyAccessedAPICategoryFileTimestamp",
"NSPrivacyAccessedAPITypeReasons": ["C617.1"]
}
]
}
}
}
}
有关使用 Expo 生成隐私清单的更多信息,请阅读 Expo 的 隐私清单 指南。
列出的 API 是 SDK 正常运行所必需的,无法选择退出这些 API。
如果你使用的是较旧版本的 SDK,可能需要更新到版本 5.22.1 或更高版本,以便自动为动态链接框架包含隐私清单。
要验证隐私清单是否正确包含在你的应用程序中,可以构建并提交应用程序到 App Store 或 TestFlight 进行外部测试。如果清单缺失,你会收到 Apple 发送的主题为 "The uploaded build for YourAppName has one or more issues" 的电子邮件,其中列出了缺失的 API 声明。