iOS 隐私清单和三方SDK签名适配

苹果在2023年发布了关于隐私的重大更新,包括隐私清单和SDK签名。自2024年春季起,这些新要求将影响到所有iOS应用的提交和审核过程。以下是如何适配隐私清单和三方SDK签名的详细信息和步骤:

一、背景

  1. 隐私更新新闻
    • 2023/06/05:苹果推出了隐私清单和SDK签名的新功能。
    • 2023/12/07:从2024年春季开始,应用需要在App Store中声明第三方SDK的隐私清单,并提供SDK签名。
    • 2024/02/29:自3月13日起,如果App使用了需要说明原因的API但未在隐私清单中提供原因,将通过电子邮件通知。自5月1日起,提交的新应用或更新必须在隐私清单中提供所有相关API的批准原因。

二、隐私清单和SDK签名

2.1 隐私清单是什么?

隐私清单是一种文件,要求开发者列出和描述应用程序及其第三方SDK收集的数据和使用的需要说明原因的API。它有助于提升数据隐私透明度,确保用户了解他们的数据如何被使用。

  • 隐私清单文件:通过Xcode 15创建。
  • 清单文件包含的键值对
    • NSPrivacyTracking:布尔值,指示应用程序或SDK是否使用应用程序跟踪透明度框架进行数据跟踪。
    • NSPrivacyTrackingDomains:列出与跟踪相关的互联网域名。
    • NSPrivacyCollectedDataTypes:描述收集的数据类型。
    • NSPrivacyAccessedAPITypes:列出需要说明原因的API类型。
  • 需要说明原因的API示例
    • File timestamp APIs
    • System boot time APIs
    • Disk space APIs
    • Active keyboard APIs
    • User defaults APIs

2.2 隐私清单文件填写

  1. 使用Xcode 15创建隐私清单文件
    • 打开Xcode,选择您的项目。
    • 创建一个新的隐私清单文件,并填写相关的键值对。
    • 确保从已有选项中选择正确的值。
  2. 填写关键内容
    • 确保NSPrivacyTracking设置正确。
    • NSPrivacyTrackingDomains中列出相关的互联网域名(如果需要)。
    • 填写NSPrivacyCollectedDataTypesNSPrivacyAccessedAPITypes,以说明应用程序或SDK收集的数据类型和使用的API。

2.3 SDK 签名

对于提供二进制版本的第三方SDK,必须包含签名以提高软件供应链的完整性。签名分为Apple Developer Program签名和自签名。

  • 签名步骤
    1. 搜索签名目录:bash复制代码find . -name "_CodeSignature" -type d
    2. 列出代码签名证书:bash复制代码security find-identity -v -p codesigning
    3. 对SDK进行签名:bash复制代码codesign --timestamp -v --sign "Your Certificate Name" /path/to/SDK.framework
    4. 验证签名:bash复制代码codesign -dvvv /path/to/SDK.framework

2.4 SDK 签名的目的

签名SDK确保应用在使用SDK时,SDK的版本和开发者身份不会发生变化。如果SDK签名不匹配,Xcode会发出警告并可能导致编译失败。这种签名机制有助于防止恶意代码注入和确保SDK的完整性。

三、适配后的苹果审核过程

  1. 隐私清单的使用
    • 提交应用时,开发者需要在Xcode中合并第三方SDK的隐私清单,然后导出一个PDF报告。
    • 在App Store提交审核时,填写隐私标签可以参考这个报告。
    • 用户下载页面的隐私标签将展示您在隐私清单中填写的信息。
  2. 需要说明原因的API
    • 自3月13日起,如果应用使用了需要说明原因的API但未在隐私清单中提供原因,苹果将通过电子邮件通知开发者。
    • 自5月1日起,提交的新应用或更新必须在隐私清单中提供使用的API的批准原因,才能上传到App Store Connect。

总结

为了确保符合苹果的隐私政策,开发者需要适配隐私清单并确保第三方SDK的签名。隐私清单帮助开发者明确定义应用程序和SDK的数据收集和使用情况,而SDK签名则保证了应用的安全性和完整性。通过遵循这些要求,可以提高应用的透明度并顺利通过苹果的审核。