背景
开发者应对自己 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 Connect的ITMS-91053: Missing API declaration错误提醒邮件,如下图:
收到这个邮件说明,苹果检测到我们有使用更新公告中说的那几类API,但是却没有隐私清单描述这些API的调用情况。那我们来看看都有哪些API
NSPrivacyAccessedAPITypes | API说明 | NSPrivacyAccessedAPITypeReasons |
---|---|---|
File timestamp APIs | 获取文件时间戳相关的 API | DDA9.1、C617.1、3B52.1、0A2A.1 |
System boot time APIs | 获取系统启动时间的 API | 35F9.1、8FFB.1、3D61.1 |
Disk space APIs | 获取磁盘空间的 API | 85F4.1、E174.1、7D9E.1、B728.1 |
Active keyboard APIs | 获取活动键盘的 API | 3EC4.1、54BD.1 |
User defaults APIs | 调用User defaults API | CA92.1、1C8F.1、C56D.1、AC6B.1 |
本次更新公告涉及到的API 类型就是商标所示的类型,每个隐私访问类型代码都代表了一种访问原因,原因描述可以参考文档: Describing use of required reason API
我们收到的错误提醒邮件会列出我们所使用到的API类型,我们可以根据错误提示,来进行隐私清单的创建和内容补充。
创建隐私清单
如果你已有 PrivacyInfo 隐私清单,那只需按照错误提醒,进行API类型和访问原因的补充即可,如果没有,那我们可以创建一个PrivacyInfo,如图:
这里注意,创建的 PrivacyInfo文件要关联到对应的target,有时候我们的工程可能有多个target,如一些Extension或者Watch,这些都需要创建一个PrivacyInfo文件,并补充API类型和访问原因内容。
当我们创建好 PrivacyInfo 文件,可以看到,我们可以选择四项内容
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的实际情况填写 |
本次更新公告针对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文件
我们可以在这里再次排查,隐私清单是否对应,有没有配置错误的情况
我们可以看看 pdf中所显示的 PrivacyInfo.xcprivacy 文件路径,是否和 App Store Connect报错邮件中所指向的路径一致。
至此,整个PrivacyInfo 配置就算完成了。我们再提审,就不会再收到报错邮件了。
总结
这次关于隐私清单的更新公告,是继 App Store Connect 隐私内容 和 App ICP 备案之后 苹果推出的又一个在App 隐私合规方面的举措,App 隐私合规以及数据安全是一个大方向,我们在开发迭代过程中,需要养成隐私合规和数据安全的意识。