ITMS-91053: Missing API declaration隐私协议问题

苹果上传ipa包收到一个邮件

one or more issues with a recent submission for App Store review for the following app:

Although submission for App Store review was successful, you may want to correct the following issues in your next submission for App Store review. Once you've corrected the issues, upload a new binary to App Store Connect.

ITMS-91053: Missing API declaration - Your app’s code in the “xxxxx” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryDiskSpace. 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.

ITMS-91053: Missing API declaration - Your app’s code in the “xxxxx” file references one or more APIs that require reasons, including the following API categories: 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.

ITMS-91053: Missing API declaration - Your app’s code in the “xxxxx” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategorySystemBootTime. 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.

ITMS-91053: Missing API declaration - Your app’s code in the “xxxxx” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryUserDefaults. 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.

Apple Developer Relations

参考官方文档:https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api?language=objc

解决方案:

创建一个文件App Privacy,生成PrivacyInfo.xcprivacy文件,就是个plist配置文件

点击+号,key为Privacy Accessed API Types,value格式为Array

点击Privacy Accessed API Types处+号,展开item,点击+号,key为Privacy Accessed API Type,value根据苹果的反馈选择对应的选项

点击Privacy Accessed API Type处+号,key为Privacy Accessed API Reasons,value为Array,展开Privacy Accessed API Reasons

点击+号,item0右侧选择对应的原因

大体创建好的格式如下


注意这个位置一定要勾选上,否则相当于没编译进ipa包中

官方文档参考如下

NSPrivacyAccessedAPICategoryDiskSpace类型,代码中包含以下函数或者方法:

NSURLVolumeAvailableCapacityKey

NSURLVolumeAvailableCapacityForImportantUsageKey

NSURLVolumeAvailableCapacityForOpportunisticUsageKey

NSURLVolumeTotalCapacityKey

NSFileSystemFreeSize

NSFileSystemSize

statfs(_:_:)

statvfs(_:_:)

fstatfs(_:_:)

fstatvfs(_:_:)

getattrlist(_:_:_:_:_:)

fgetattrlist(_:_:_:_:_:)

getattrlistat(_:_:_:_:_:_:)

NSPrivacyAccessedAPITypeReasons设置为以下:85F4.1、E174.1、7D9E.1、B728.1

85F4.1

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

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

E174.1

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

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

7D9E.1

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

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

B728.1

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

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

NSPrivacyAccessedAPICategoryFileTimestamp类型,代码中包含以下函数或者方法:

creationDate

modificationDate

fileModificationDate

contentModificationDateKey

creationDateKey

getattrlist(_:_:_:_:_:)

getattrlistbulk(_:_:_:_:_:)

fgetattrlist(_:_:_:_:_:)

stat

fstat(_:_:)

fstatat(_:_:_:_:)

lstat(_:_:)

getattrlistat(_:_:_:_:_:_:)

NSPrivacyAccessedAPITypeReasons设置为以下:DDA9.1、C617.1、3B52.1、0A2A.1

DDA9.1

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

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

C617.1

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

3B52.1

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

0A2A.1

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

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

NSPrivacyAccessedAPICategorySystemBootTime类型,代码中包含以下函数或者方法:

systemUptime

mach_absolute_time()

NSPrivacyAccessedAPITypeReasons设置为以下:35F9.1、8FFB.1、3D61.1

35F9.1

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

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

8FFB.1

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

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

3D61.1

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

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

NSPrivacyAccessedAPICategoryUserDefaults类型,代码中包含以下函数或者方法:

UserDefaults

NSPrivacyAccessedAPITypeReasons设置为以下:CA92.1、1C8F.1、C56D.1、AC6B.1

CA92.1

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

此原因不允许读取其他应用程序或系统写入的信息,或写入可由其他应用程序访问的信息。

1C8F.1

声明此原因以访问用户默认值以读取和写入仅可由与应用程序本身属于同一应用程序组的成员的应用程序、应用程序扩展和应用程序剪辑访问的信息。

此原因不允许读取由同一应用程序组外部的应用程序、应用程序扩展或应用程序剪辑或系统写入的信息。如果系统提供来自全局域的信息,则您的应用程序不承担责任,因为当您的应用程序尝试读取应用程序的应用程序组中的应用程序、应用程序扩展或应用程序剪辑写入的信息时,您请求的域中不存在密钥。

此原因也不允许写入可由同一应用程序组外部的应用程序、应用程序扩展或应用程序剪辑访问的信息。

C56D.1

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

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

AC6B.1

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

NSPrivacyAccessedAPICategoryActiveKeyboards类型,代码中包含以下函数或者方法:

activeInputModes

NSPrivacyAccessedAPITypeReasons设置为以下:3EC4.1、54BD.1

3EC4.1

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

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

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

54BD.1

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容