前言

本月18号开端将打包的ipa文件提交到Appstore后,会收到一份来自App Store Connect 的正告邮件。大致内容如下:

Hello,
We noticed one or more issues with a recent submission for App Store review for the following app:
ITMS-91053: Missing API declaration
- Your app’s code in the “xxxxxx” file references one or more APIs that require reasons, including the following APIcategories:NSPrivacyAccessedAPICategoryFileTimestamp. 
While no action is required at this time, starting May 1, 2024, when you upload a 
new app or app update, you must include a NSPrivacyAccessedAPITypes array in your
app’s privacy manifest to provide approved reasons for these APIs used by your 
app’s code. For more details about this policy, including a list of required 
reason APIs and approved reasons for usage, 
visit:https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

啥意思呢?

从2024年5月1日开端,当您上传一个新运用或运用更新,你有必要在你的运用程序的隐私清单,为您的用户运用这些api供给批准的运用程序的代码。

这种操作相当于在国内安卓市场上架App的时分,在隐私政策里标明运用了哪些第三方SDK,而且附带第三方SDK所对应的隐私政策地址。

起点是由于苹果爸爸发现有一小部分 API 或许被开发者玩坏了,经过信息指纹搜集有关用户设备的信息。

早在去年6月的 WWDC23 上苹果就宣布,开发人员需求在其运用程序的隐私清单中声明运用某些 API 的原因,目前正式放出了这份需求声明的 API 列表。

公告原文地址:developer.apple.com/news/?id=z6…

需求声明的 API 对照表 详见文末

配置措施

1.创立Privacy文件

选中当时的项目,Command + N,查找privacy -> 挑选App Privacy,输入称号PrivacyInfo.xcprivacy,如下图,挑选要增加的Target,然后点击完结。

叮!App Store审阅的运用程序又出新规了Missing API declaration

2.增加对应Key值

叮!App Store审阅的运用程序又出新规了Missing API declaration

3.以User Defults 示例

值得注意的是我们完全不必担心内容如何挑选,由于对照的内容都是有可挑选项的,所以只需依照本身产品需求对照增加即可。

叮!App Store审阅的运用程序又出新规了Missing API declaration

大厂供给的参阅

腾讯云IM

cloud.tencent.com/document/pr…

需求声明的API对照表

文件时刻戳 API

以下用于拜访文件时刻戳的 API 需求运用原因。运用该字符串作为字典中键的值。NSPrivacyAccessedAPICategoryFileTimestamp``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

在您的数组中,供给此列表中的相关值。NSPrivacyAccessedAPITypeReasons

  • DDA9.1

    声明此原因以向运用该设备的人员显现文件时刻戳。

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。

  • C617.1

    声明此原因以拜访运用程序容器、运用程序组容器或运用程序的 CloudKit 容器内的文件的时刻戳、大小或其他元数据。

  • 3B52.1

    声明此原因以拜访用户明确颁发拜访权限的文件或目录的时刻戳、大小或其他元数据,例如运用文档挑选器视图控制器。

  • 0A2A.1

    如果您的第三方 SDK 供给文件时刻戳 API 的包装函数供运用程序运用,而且您仅在运用程序调用您的包装函数时拜访文件时刻戳 API,请声明此原因。此原因只能由第三方 SDK 声明。如果您的第三方 SDK 首要是为了包装所需的原因 API 而创立的,则或许不会声明此原因。

    出于此原因拜访的信息或任何派生信息不得用于第三方 SDK 本身的意图,也不得由第三方 SDK 发送至设备外。

体系启动时刻API

以下用于拜访体系启动时刻的 API 需求运用理由。运用该字符串作为字典中键的值。NSPrivacyAccessedAPICategorySystemBootTime``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

在您的数组中,供给下面列表中的相关值。NSPrivacyAccessedAPITypeReasons

  • 35F9.1

    声明此原因以拜访体系启动时刻,以便测量运用程序内产生的事情之间经过的时刻量或执行计算以启用计时器

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。有关运用程序内产生的事情之间经过的时刻量的信息有一个破例,该信息或许会发送到设备外。

  • 8FFB.1

    声明此原因以拜访体系启动时刻,以计算运用程序内产生的事情的绝对时刻戳,例如与UIKitAVFAudio框架相关的事情。

    您的运用内产生的事情的绝对时刻戳或许会发送到设备外。出于此原因拜访的体系启动时刻或从体系启动时刻派生的任何其他信息或许不会发送到设备外。

  • 3D61.1

    声明此原因以在运用设备的人挑选提交的可选错误报告中包含体系启动时刻信息。体系启动时刻信息有必要作为报告的一部分显着地向人员显现。

    仅在用户肯定挑选提交包含体系启动时刻信息的特定错误报告之后,而且仅出于查询或呼应错误报告的意图,才能够将出于此原因拜访的信息或任何派生信息发送到设备外。

磁盘空间 API

以下用于拜访可用磁盘空间的 API 需求运用原因。运用该字符串作为字典中键的值。NSPrivacyAccessedAPICategoryDiskSpace``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

在您的数组中,供给下面列表中的相关值。NSPrivacyAccessedAPITypeReasons

  • 85F4.1

    声明此原因以向运用该设备的人员显现磁盘空间信息。磁盘空间能够以信息单位(例如字节)或与媒体类型结合的时刻单位(例如高清视频的分钟)来显现。

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。有一个破例,答应运用程序经过本地网络将磁盘空间信息发送到同一个人操作的另一台设备,仅用于显现该设备上的磁盘空间信息;此破例仅适用于用户明确答应发送磁盘空间信息的状况,而且该信息不得经过 Internet 发送。

  • E174.1

    声明此原因是为了查看是否有足够的磁盘空间来写入文件,或许查看磁盘空间是否缺乏,以便运用程序能够在磁盘空间缺乏时删除文件。运用程序有必要依据磁盘空间以用户可观察到的方法表现不同。

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。有一个破例,答应运用程序在磁盘空间缺乏时避免从服务器下载文件。

  • 7D9E.1

    声明此原因以在运用设备的人员挑选提交的可选错误报告中包含磁盘空间信息。磁盘空间信息有必要作为报告的一部分突出地显现给相关人员。

    仅在用户明确挑选提交包含磁盘空间信息的特定错误报告之后,而且仅出于查询或呼应错误报告的意图,因而拜访的信息或任何派生信息才能够发送到设备外。

  • B728.1

    如果您的运用程序是健康研讨运用程序,而且您拜访此 API 类别来检测并通知研讨参与者磁盘空间缺乏影响研讨数据搜集,请声明此原因。

    您的运用程序有必要契合运用程序商铺审阅攻略5.1.3。除了供给有关健康研讨的信息并答应人们参与健康研讨之外,您的运用程序不得供给任何其他功用。

活动键盘 API

以下用于拜访活动键盘列表的 API 需求运用原因。运用该字符串作为字典中键的值。NSPrivacyAccessedAPICategoryActiveKeyboards``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

在您的数组中,供给下面列表中的相关值。NSPrivacyAccessedAPITypeReasons

  • 3EC4.1

    如果您的运用程序是自定义键盘运用程序,而且您拜访此 API 类别以确认设备上处于活动状况的键盘,请声明此原因。

    为用户供给体系规模的自定义键盘有必要是运用程序的首要功用。

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。

  • 54BD.1

    声明此原因以拜访活动键盘信息,以便向运用该设备的人员出现正确的自定义用户界面。运用程序有必要具有用于输入或编辑文本的文本字段,而且有必要以用户可观察到的方法依据活动键盘采纳不同的行为。

    出于此原因拜访的信息或任何派生信息或许不会发送到设备外。

用户默许 API

以下用于拜访用户默许值的 API 需求运用原因。运用该字符串作为字典中键的值。NSPrivacyAccessedAPICategoryUserDefaults``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

在您的数组中,供给下面列表中的相关值。NSPrivacyAccessedAPITypeReasons

  • CA92.1

    声明此原因以拜访用户默许读取和写入只能由运用程序本身拜访的信息。

    此原因不答应读取其他运用程序或体系写入的信息,或写入可由其他运用程序拜访的信息。

  • 1C8F.1

    声明此原因以拜访用户默许值以读取和写入仅可由与运用程序本身属于同一运用程序组的成员的运用程序、运用程序扩展和运用程序编排拜访的信息。

    此原因不答应读取由同一运用程序组外部的运用程序、运用程序扩展或运用程序编排或体系写入的信息。如果体系供给来自全局域的信息,则您的运用程序不承当职责,由于当您的运用程序尝试读取运用程序的运用程序组中的运用程序、运用程序扩展或运用程序编排写入的信息时,您恳求的域中不存在密钥。

    此原因也不答应写入可由同一运用程序组外部的运用程序、运用程序扩展或运用程序编排拜访的信息。

  • C56D.1

    如果您的第三方 SDK 围绕用户默许 API 供给包装函数供运用程序运用,而且您仅在运用程序调用您的包装函数时才拜访用户默许 API,请声明此原因。此原因只能由第三方 SDK 声明。如果您的第三方 SDK 首要是为了包装所需的原因 API 而创立的,则或许不会声明此原因。

    出于此原因拜访的信息或任何派生信息不得用于第三方 SDK 本身的意图,也不得由第三方 SDK 发送至设备外。

  • AC6B.1

    声明此原因以拜访用户默许读取密钥以检索 MDM 设置的保管运用程序配置,或设置密钥以存储要经过 MDM 查询的反馈信息,如 Apple 移动设备管理协议参阅文档中所述。com.apple.configuration.managed``com.apple.feedback.managed