苹果上传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
解决方案:
创建一个文件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
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类型,代码中包含以下函数或者方法:
getattrlist(_:_:_:_:_:)
getattrlistbulk(_:_:_:_:_:)
fgetattrlist(_:_:_:_:_:)
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类型,代码中包含以下函数或者方法:
mach_absolute_time()
NSPrivacyAccessedAPITypeReasons设置为以下:35F9.1、8FFB.1、3D61.1
35F9.1
声明此原因以访问系统启动时间,以便测量应用程序内发生的事件之间经过的时间量或执行计算以启用计时器。
出于此原因访问的信息或任何派生信息可能不会发送到设备外。有关应用程序内发生的事件之间经过的时间量的信息有一个例外,该信息可能会发送到设备外。
8FFB.1
声明此原因以访问系统启动时间,以计算应用程序内发生的事件的绝对时间戳,例如与UIKit或AVFAudio框架相关的事件。
您的应用内发生的事件的绝对时间戳可能会发送到设备外。出于此原因访问的系统启动时间或从系统启动时间导出的任何其他信息可能不会发送到设备外。
3D61.1
声明此原因以在使用设备的人选择提交的可选错误报告中包含系统启动时间信息。系统启动时间信息必须作为报告的一部分显着地向人员显示。
仅在用户肯定选择提交包括系统启动时间信息的特定错误报告之后,并且仅出于调查或响应错误报告的目的,才可以将出于此原因访问的信息或任何派生信息发送到设备外。
NSPrivacyAccessedAPICategoryUserDefaults类型,代码中包含以下函数或者方法:
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类型,代码中包含以下函数或者方法:
NSPrivacyAccessedAPITypeReasons设置为以下:3EC4.1、54BD.1
3EC4.1
如果您的应用程序是自定义键盘应用程序,并且您访问此 API 类别以确定设备上处于活动状态的键盘,请声明此原因。
为用户提供系统范围的自定义键盘必须是应用程序的主要功能。
出于此原因访问的信息或任何派生信息可能不会发送到设备外。
54BD.1
声明此原因以访问活动键盘信息,以便向使用该设备的人员呈现正确的自定义用户界面。应用程序必须具有用于输入或编辑文本的文本字段,并且必须以用户可观察到的方式根据活动键盘采取不同的行为。
出于此原因访问的信息或任何派生信息可能不会发送到设备外。