ITMS-91053 Missing API declaration 解决方法

解决iTunes Connect上传应用时遇到的ITMS-91053警告——缺失API声明的方法。指出警告是由于应用使用了涉及用户隐私的API未提供说明,解决方式是添加App Privacy文件到项目中,然后在文件中指定Privacy Accessed API Types及其使用原因,确保隐私选项与实际用途相对应。

在这里插入图片描述
基本上就是因为缺少隐私描述,但是我根本就没用第三方SDK啊,仔细一看发现是:
NSPrivacyAccessedAPICategoryUserDefaults //用于存储用户的配置
NSPrivacyAccessedAPICategoryFileTimestamp //获取文件的时间戳
NSPrivacyAccessedAPICategoryDiskSpace
NSPrivacyAccessedAPICategorySystemBootTime

添加隐私文件

在这里插入图片描述
添加App Privacy文件
在这里插入图片描述
Targets勾选所有的项目
在这里插入图片描述

这样我们就添加成功一个隐私文件啦
在这里插入图片描述

添加隐私说明选项

添加隐私类型Privacy Accessed API Types
在这里插入图片描述
在里面的item0中添加Privacy Accessed API Type和Privacy Accessed API Reasons

Privacy Accessed API Type是用于告诉Apple这个API是什么API。

Privacy Accessed API Reasons是告诉Apple你用这个API拿来干什么了。

我的例子中一个是userdefaults,那我们添加一下。将邮件中的API类型粘贴到里面。
在这里插入图片描述
在这里插入图片描述
然后我们在API Reasons中点击右侧的箭头,选择你将这个API用在哪里了。
在这里插入图片描述
如果用的不止一项,可以再在Privacy Accessed API Reasons中继续添加新的item。
如果涉及到第三方SDK,还需要添加更多的用途。

也可以直接复制粘贴下面的内容

<?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>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>E174.1</string>
            </array>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryDiskSpace</string>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>35F9.1</string>
            </array>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategorySystemBootTime</string>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
        </dict>
        <dict>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>C617.1</string>
            </array>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
        </dict>
    </array>
</dict>
</plist>

具体原因如何选择

1、File timestamp APIs(获取文件时间戳相关的 API)

项目中用到以下接口的都要申明:

creationDate
modificationDate
fileModificationDate
contentModificationDateKey
creationDateKey
getattrlist(::::: )
getattrlistbulk(::::: )
fgetattrlist(::::: )
stat
fstat(:: )
fstatat(:::: )
lstat(:: )
getattrlistat(:::::: )

声明的key 和 reason:

声明的key:NSPrivacyAccessedAPICategoryFileTimestamp
对应的原因类型NSPrivacyAccessedAPITypeReasons 有三种,选择其中的一种或者多种:

  • DDA9.1

声明此原因是为了向使用该设备的人显示文件时间戳。出于此原因访问的信息或任何派生信息不得发送至设备外。

  • C617.1

声明此原因以访问应用容器、应用组容器或应用的CloudKit容器中的文件的时间戳。

  • 3B52.1

声明此原因以访问用户明确授权访问的文件或目录的时间戳,例如使用文档选择器视图控制器。

  • 0A2A.1

如果您的第三方 SDK 为应用使用的文件时间戳 API 提供了一个封装函数,并且仅在应用调用您的封装函数时访问文件时间戳 API,请声明此原因。只有第三方 SDK 可以声明此原因。如果您的第三方 SDK 主要是为了封装必需的原因 API 而创建的,则不得声明此原因。出于此原因访问的信息或任何派生信息不得用于您的第三方 SDK 自身的目的或由您的第三方 SDK 发送至设备外。

2、System boot time APIs(获取文件时间戳相关的 API)

项目中用到以下接口的都要申明:

systemUptime
mach_absolute_time()

声明的key 和 reason:

声明的key:NSPrivacyAccessedAPICategorySystemBootTime
对应的原因类型NSPrivacyAccessedAPITypeReasons ,选择其中的一种或者多种:

  • 8FFB.1

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

  • 3D61.1

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

  • 35F9.1

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

3、 Disk space APIs(磁盘空间 API)

项目中用到以下接口的都要申明:

volumeAvailableCapacityKey
volumeAvailableCapacityForImportantUsageKey
volumeAvailableCapacityForOpportunisticUsageKey
volumeTotalCapacityKey
systemFreeSize
systemSize
statfs(: : )
statvfs(: : )
fstatfs( : : )
fstatvfs( : : )
getattrlist(: : : : : )
fgetattrlist(: : : : : )
getattrlistat(: : : : : : )

声明的key 和 reason:

声明的key:NSPrivacyAccessedAPICategoryDiskSpace
对应的原因类型NSPrivacyAccessedAPITypeReasons ,选择其中的一种或者多种:

  • 85F4.1

声明此原因以向使用设备的个人显示磁盘空间信息。磁盘空间可以以信息单位(如字节)或时间单位(如高清视频分钟)显

  • E174.1

声明此原因以检查是否有足够的磁盘空间来写入文件,或检查磁盘空间是否不足以使应用程序在磁盘空间不足时删除文件。应用程序必须根据磁盘空间的情况以一种用户可观察的方式进行不同的操作。

  • 7D9E.1

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

  • B728.1

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

4、Active keyboard APIs(活动键盘 API)

项目中用到以下接口的都要申明:

activeInputModes

声明的key 和 reason:

声明的key:NSPrivacyAccessedAPICategoryActiveKeyboards
对应的原因类型NSPrivacyAccessedAPITypeReasons ,选择其中的一种或者多种:

  • 3EC4.1

如果您的应用程序是自定义键盘应用程序,并且您访问此API类别以确定设备上处于活动状态的键盘,那么向用户提供系统范围的自定义键盘必须是应用程序的主要功能。

  • 54BD.1

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

5、User defaults APIs(NSUserdefaults 相关 API)

项目中用到以下接口的都要申明:

UserDefaults

声明的key 和 reason:

声明的key:NSPrivacyAccessedAPICategoryUserDefaults
对应的原因类型NSPrivacyAccessedAPITypeReasons ,选择其中的一种或者多种:

  • CA92.1

声明此原因以访问用户默认设置,以读取和写入仅对应用程序本身可访问的信息。这不允许读取其他应用程序或系统写入的信息,或写入其他应用程序可以访问的信息。

  • 1C8F.1

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

  • C56D.1

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

  • AC6B.1

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

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值