HBuilderX 4.08正式版本2024年4月24日更新云端打包机支持 uni-app 项目配置隐私清单
HBuilderX 4.13及以上版本开始支持 uni-app x 项目配置隐私清单

# 什么是隐私清单?

在 2023 年 6 月的全球开发者大会(WWDC23)上,Apple 宣布了一系列关于 App Store 提交隐私更新的新政策。这些更新旨在增强应用程序在用户数据收集和使用方面的透明度,从而更好地保护用户的隐私权益。

政策主要包含以下关键点:

  • 必要理由的API(use of required reason API):Apple 引入了一种新的机制,要求开发者在使用某些可能影响用户隐私的 API 时,必须提供使用这些 API 的必要理由。
  • 隐私数据使用描述(data use in privacy manifests):在你的应用程序或第三方SDK的隐私清单中添加收集关于用户的数据类别,以及收集数据的原因。
  • 第三方 SDK 隐私清单和签名:SDK 提供者需要对清单进行签名,以证明其内容的真实性和准确性。(详情见下文中xcframework格式的SDK库配置隐私清单

简单的说隐私清单是一个属性列表,记录您的应用程序或第三方SDK使用的API的原因以及使用/收集的隐私数据类型。

从2024年5月1日开始,任何未在隐私清单文件中描述 必要理由API(use of required reason API) 使用情况的应用程序,都将无法通过 App Store Connect 的审核,而隐私数据使用描述(data use in privacy manifests)目前不会触发审核问题,但建议开发者以及插件作者尽早适配隐私清单,如实填写数据使用描述

# uni-app/uni-app x如何配置隐私清单

通常情况你无需额外配置隐私清单,uni-app/uni-app x 框架中涉及隐私清单的功能模块 DCloud 会根据应用配置自动生成,更新到HBuilderX到最新版本重新提交云端打包即可。
在以下情况可能需要你补充隐私清单:

  • 应用代码中包含并非三方SDK提供的收集用户信息相关的功能,比如:获取用户联系方式,信用卡信息,敏感信息、健康信息、浏览历史记录等等
  • 使用的原生语言插件uts插件未支持隐私清单,且提交审核时因隐私清单相关问题被拒

这时需要你根据实际情况制作补充隐私清单文件PrivacyInfo.xcprivacy,详情可参考制作隐私清单文件PrivacyInfo.xcprivacy
将制作的隐私清单文件PrivacyInfo.xcprivacy保存在项目的 nativeResources/ios 目录,详情如下:

添加或编辑隐私清单文件PrivacyInfo.xcprivacy后需提交云端打包后才能生效

# 原生语言插件及UTS插件如何配置隐私清单

仅插件作者需关心此章节内容,插件使用者可跳过此章节

原生语言插件UTS插件作者应该根据根据插件的实际情况配置好隐私清单,避免插件使用者手动补充隐私清单,配置后云端打包会自动合并处理隐私清单。

插件依赖的 xcframework 格式SDK库涉及的隐私清单可以通过签名内置 PrivacyInfo.xcprivacy 文件,而其它格式的SDK库(如.framework、.a等)或插件源码涉及的隐私清单需要在插件包里内置PrivacyInfo.xcprivacy 文件

# 原生语言插件及UTS插件配置PrivacyInfo.xcprivacy文件

  • 原生语言插件
    ios 目录下添加 PrivacyInfo.xcprivacy 文件,详情如下:

  • UTS插件
    utssdk/app-ios 目录下添加 PrivacyInfo.xcprivacy 文件,详情如下:

# xcframework格式的SDK库配置隐私清单

xcframework库需在 xcode 环境中进行配置:

  • 在SDK原生工程内创建PrivacyInfo.xcprivacy文件,创建方法:
    在Xcode 15以上版本中,创建新文件 -> Resource -> PrivacyInfo.xcprivacy,并根据制作隐私清单文件PrivacyInfo.xcprivacy编辑隐私清单
  • 通过xcodebuild命令将SDK制作成xcframework的形式:
xcodebuild -create-xcframework -framework <第一个库的路径> -framework <第二个库的路径> -output <输出路径/库名称.xcframework>
  • 通过codesign命令行给xcframework签名:
codesign --timestamp -v --sign "证书名称" SDK名称.xcframework

# 制作隐私清单文件PrivacyInfo.xcprivacy

隐私清单文件PrivacyInfo.xcprivacy是 PropertyList 格式文件,建议在XCode中创建并编辑,完成后保存使用。

# 隐私清单文件中键值对说明

Key 说明
NSPrivacyTracking 布尔值,指示您的应用程序或第三方SDK是否使用应用程序跟踪透明度框架下定义的数据进行跟踪
NSPrivacyTrackingDomains 一组字符串,列出您的应用程序或第三方SDK连接到的参与跟踪的互联网域。如果用户未通过应用程序跟踪透明度框架授予跟踪权限,则对这些域的网络请求将失败,您的应用程序将收到错误. 如果将NSPrivacyTracking设置为true,则需要在NSPrivaceTrackingDomains中至少提供一个internet域
NSPrivacyCollectedDataTypes 隐私数据使用描述,用于描述应用程序或第三方SDK隐私数据采集的数据类型。有关要在字典中使用的键和值的信息,请参阅data use in privacy manifests
NSPrivacyAccessedAPITypes 必要理由API,使用了苹果需要说明原因的API时需要填写,具体API的列表和原因请参阅use of required reason API

# NSPrivacyAccessedAPITypes必要理由API的示例

如应用中用到了UserDefaults相关的API则按如下示例填写:

# NSPrivacyCollectedDataTypes隐私数据采集的示例

如应用中需要用户输入手机号则按如下示例填写:

更多制作隐私清单文件参考文档:

# 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>
    <!-- 描述应用或SDK收集的数据类型 -->
	<key>NSPrivacyCollectedDataTypes</key>
	<array>
		<dict>
			<key>NSPrivacyCollectedDataType</key>
			<string>NSPrivacyCollectedDataTypePhoneNumber</string> <!-- 用于标识应用或SDK收集的数据类型 -->
			<key>NSPrivacyCollectedDataTypeLinked</key>
			<true/> <!-- 应用程序或SDK是否将此数据类型链接到用户的身份 -->
			<key>NSPrivacyCollectedDataTypeTracking</key>
			<false/> <!-- 应用程序或SDK是否使用此数据类型进行跟踪 -->
			<key>NSPrivacyCollectedDataTypePurposes</key>
			<array>
				<string>NSPrivacyCollectedDataTypePurposeAppFunctionality</string> <!-- 收集数据的原因/目的 -->
			</array>
		</dict>
	</array>
	<!-- 描述应用或SDK访问的API类型及使用原因 -->
	<key>NSPrivacyAccessedAPITypes</key>
	<array>
		<dict>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>CA92.1</string> <!-- 使用API的原因代码 -->
			</array>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryUserDefaults</string> <!-- 标记应用程序必要理由的API类型 ->
		</dict>
	</array>
	<!-- 指示应用或SDK是否使用应用跟踪透明度框架下定义的数据进行跟踪 -->
	<key>NSPrivacyTracking</key>
	<false/>
</dict>
</plist>

# 小程序SDK/离线SDK如何支持隐私清单

HBuilderX 4.13版本开始我们在原生示例工程里内置了默认的PrivacyInfo.xcprivacy 文件,开发者可根据自身项目情况编辑后重新出包 参考:uniMPSDK隐私清单离线SDK隐私清单