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

发布于:2024-04-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

前言

本月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 列表。

公告原文地址:

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

配置措施

1.创建Privacy文件

选中当前的项目,Command + N,搜索privacy -> 选择App Privacy,输入名称PrivacyInfo.xcprivacy,如下图,选择要添加的Target,然后点击完成。

image.png

2.添加对应Key值

image.png

3.以User Defults 示例

值得注意的是大家完全不用担心内容如何选择,因为对照的内容都是有可选择项的,所以只要按照自身产品需要对照添加即可。

image.png

大厂提供的参考

腾讯云IM

需要声明的API对照表

以下用于访问文件时间戳的 API 需要使用原因。使用该字符串作为字典中键的值。NSPrivacyAccessedAPICategoryFileTimestamp``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

  • getattrlist(_:_:_:_:_:)
  • getattrlistbulk(_:_:_:_:_:)
  • fgetattrlist(_:_:_:_:_:)
  • fstat(_:_:)
  • fstatat(_:_:_:_:)
  • lstat(_:_:)
  • getattrlistat(_:_:_:_:_:_:)

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

  • DDA9.1

    声明此原因以向使用该设备的人员显示文件时间戳。

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

  • C617.1

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

  • 3B52.1

    声明此原因以访问用户明确授予访问权限的文件或目录的时间戳、大小或其他元数据,例如使用文档选择器视图控制器。

  • 0A2A.1

    如果您的第三方 SDK 提供文件时间戳 API 的包装函数供应用程序使用,并且您仅在应用程序调用您的包装函数时访问文件时间戳 API,请声明此原因。此原因只能由第三方 SDK 声明。如果您的第三方 SDK 主要是为了包装所需的原因 API 而创建的,则可能不会声明此原因。

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

以下用于访问系统启动时间的 API 需要使用理由。使用该字符串作为字典中键的值。NSPrivacyAccessedAPICategorySystemBootTime``NSPrivacyAccessedAPIType``NSPrivacyAccessedAPITypes

  • mach_absolute_time()

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

  • 35F9.1

    声明此原因以访问系统启动时间,以便测量应用程序内发生的事件之间经过的时间量或执行计算以启用计时器。

    出于此原因访问的信息或任何派生信息可能不会发送到设备外。有关应用程序内发生的事件之间经过的时间量的信息有一个例外,该信息可能会发送到设备外。

  • 8FFB.1

    声明此原因以访问系统启动时间,以计算应用程序内发生的事件的绝对时间戳,例如与或框架相关的事件。

    您的应用内发生的事件的绝对时间戳可能会发送到设备外。出于此原因访问的系统启动时间或从系统启动时间派生的任何其他信息可能不会发送到设备外。

  • 3D61.1

    声明此原因以在使用设备的人选择提交的可选错误报告中包含系统启动时间信息。系统启动时间信息必须作为报告的一部分显着地向人员显示。

    仅在用户肯定选择提交包括系统启动时间信息的特定错误报告之后,并且仅出于调查或响应错误报告的目的,才可以将出于此原因访问的信息或任何派生信息发送到设备外。

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

  • statfs(_:_:)
  • statvfs(_:_:)
  • fstatfs(_:_:)
  • fstatvfs(_:_:)
  • getattrlist(_:_:_:_:_:)
  • fgetattrlist(_:_:_:_:_:)
  • getattrlistat(_:_:_:_:_:_:)

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

  • 85F4.1

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

    出于此原因访问的信息或任何派生信息可能不会发送到设备外。有一个例外,允许应用程序通过本地网络将磁盘空间信息发送到同一个人操作的另一台设备,仅用于显示该设备上的磁盘空间信息;此例外仅适用于用户明确允许发送磁盘空间信息的情况,并且该信息不得通过 Internet 发送。

  • E174.1

    声明此原因是为了检查是否有足够的磁盘空间来写入文件,或者检查磁盘空间是否不足,以便应用程序可以在磁盘空间不足时删除文件。应用程序必须根据磁盘空间以用户可观察到的方式表现不同。

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

  • 7D9E.1

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

    仅在用户明确选择提交包括磁盘空间信息的特定错误报告之后,并且仅出于调查或响应错误报告的目的,因此访问的信息或任何派生信息才可以发送到设备外。

  • B728.1

    如果您的应用程序是健康研究应用程序,并且您访问此 API 类别来检测并通知研究参与者磁盘空间不足影响研究数据收集,请声明此原因。

    您的应用程序必须符合。除了提供有关健康研究的信息并允许人们参与健康研究之外,您的应用程序不得提供任何其他功能。

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

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

  • 3EC4.1

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

    为用户提供系统范围的自定义键盘必须是应用程序的主要功能。

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

  • 54BD.1

    声明此原因以访问活动键盘信息,以便向使用该设备的人员呈现正确的自定义用户界面。应用程序必须具有用于输入或编辑文本的文本字段,并且必须以用户可观察到的方式根据活动键盘采取不同的行为。

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

以下用于访问用户默认值的 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