关于App隐私清单[PrivacyInfo]

339 阅读5分钟

背景

开发者应对自己 App 中包含的所有代码负责。

在 WWDC23 上,苹果宣布了针对常用第三方 SDK 的新隐私清单和签名,并宣布开发者将需要在其 App 的隐私清单中声明使用一组API的批准原因。这些变更有助于开发者更好地了解第三方 SDK 如何使用数据、保护软件依赖项并为用户提供额外的隐私保护。

自 3 月 13 日起:如果你上传新 App 或更新 App 到 App Store Connect,且该 App 使用了需要声明批准原因的 API,但你未在 App 的隐私清单中提供批准原因,苹果会通过电子邮件告知你。这是对 App Store Connect 中现有通知的补充。见下图:

自 5 月 1 日起:你需要就你的 App 代码使用的所列 API 提供批准原因,才能将新 App 或更新 App 上传到 App Store Connect。如果你没有合理的原因使用某个 API,请寻找替代的方案。如果你添加了常用第三方 SDK 列表中所列的新版第三方 SDK,那么这些 API、隐私清单和签名要求将应用于该 SDK。请务必使用包含其隐私清单的 SDK 版本,并注意在将该 SDK 添加为二进制依赖项时也需要提供签名。

问题分析

如苹果的更新公告,从3月份开始我提审App,提审之后就会收到App Store ConnectITMS-91053: Missing API declaration错误提醒邮件,如下图: image.png 收到这个邮件说明,苹果检测到我们有使用更新公告中说的那几类API,但是却没有隐私清单描述这些API的调用情况。那我们来看看都有哪些API

NSPrivacyAccessedAPITypesAPI说明NSPrivacyAccessedAPITypeReasons
File timestamp APIs获取文件时间戳相关的 APIDDA9​.1、C617​.1、3B52​.1、0A2A​.1
System boot time APIs获取系统启动时间的 API35F9​.1、8FFB​.1、3D61​.1
Disk space APIs获取磁盘空间的 API85F4​.1、E174​.1、7D9E​.1、B728​.1
Active keyboard APIs获取活动键盘的 API3EC4​.1、54BD​.1
User defaults APIs调用User defaults APICA92​.1、1C8F​.1、C56D​.1、AC6B​.1

本次更新公告涉及到的API 类型就是商标所示的类型,每个隐私访问类型代码都代表了一种访问原因,原因描述可以参考文档: Describing use of required reason API

我们收到的错误提醒邮件会列出我们所使用到的API类型,我们可以根据错误提示,来进行隐私清单的创建和内容补充。

创建隐私清单

如果你已有 PrivacyInfo 隐私清单,那只需按照错误提醒,进行API类型和访问原因的补充即可,如果没有,那我们可以创建一个PrivacyInfo,如图:

image.png

这里注意,创建的 PrivacyInfo文件要关联到对应的target,有时候我们的工程可能有多个target,如一些Extension或者Watch,这些都需要创建一个PrivacyInfo文件,并补充API类型和访问原因内容。

当我们创建好 PrivacyInfo 文件,可以看到,我们可以选择四项内容

image.png

App 隐私配置描述处理
Privacy Tracking Enabled隐私跟踪是否启用这个类型只需要配置true/false, 如果有隐私跟踪域的配置内容,那这里就配置true,如果没有就配置false
Privacy Tracking Domains隐私跟踪域有则填写,无则不配置
Privacy Nutrition Label Types隐私内容标签类型这个配置类型,所配置的内容,意思就是我们收集的用户隐私数据类型,我们按照自己App的实际情况填写,跟我们在 AppStore Connect中配置的 App 隐私内容保持一致就好,如下图所示:
Privacy Accessed API Types访问隐私内容的API类型根据工程内调用相关API的实际情况填写

image.png

本次更新公告针对Privacy Accessed API Types 对于一些三方SDK做了通告,意味这些SDK调用了访问隐私内容的API类型,这些SDK中有一部分已经新增了自己的PrivacyInfo文件,来描述调用情况,还有一部分,截止现在也没有更新,那本着开发者自己负责的情况,我们需要进行排查,并在自己工程的PrivacyInfo中补充上

有些帖子说 xcode会自动合并各SDK的 PrivacyInfo 内容,我这边使用pods集成SDK,构建并不会合并SDK的 PrivacyInfo,所以我在自己工程中补充了SDK对于Privacy Accessed API Types的内容。

我们使用 Xcode 构建,可以导出App的隐私清单的pdf文件

image.png

我们可以在这里再次排查,隐私清单是否对应,有没有配置错误的情况

image.png 我们可以看看 pdf中所显示的 PrivacyInfo.xcprivacy 文件路径,是否和 App Store Connect报错邮件中所指向的路径一致。

至此,整个PrivacyInfo 配置就算完成了。我们再提审,就不会再收到报错邮件了。

总结

这次关于隐私清单的更新公告,是继 App Store Connect 隐私内容 和 App ICP 备案之后 苹果推出的又一个在App 隐私合规方面的举措,App 隐私合规以及数据安全是一个大方向,我们在开发迭代过程中,需要养成隐私合规和数据安全的意识。