如何解决 ITMS-91053:缺少 NSPrivacyAccessedAPICategoryUserDefaults 的 API 声明并声明我的应用程序使用 UserDefaults 的原因?

问题描述 投票:0回答:1

我正准备在 iOS 商店上分发我的第一个应用程序。我的应用程序使用 UserDefaults 来保存应用程序重新启动时的一些变量。

我听说我需要声明我使用 UserDefaults 的原因,但我不知道应该在哪里这样做。在 App Store Connect 上,UserDefaults 未在“功能”下列出。我认为这可能在 Xcode 的构建设置的 plist 中,但我完全迷失了。有什么建议吗?

编辑01:这是我听说我需要声明原因的地方(最后一段):https://www.hackingwithswift.com/books/ios-swiftui/storing-user-settings-with-userdefaults

ios xcode app-store app-store-connect
1个回答
7
投票

从 Apple 的隐私清单文件文档开始。您需要创建一个隐私清单文件。

要将隐私清单添加到 Xcode 中的应用程序,请选择“文件”>“新建文件”,然后向下滚动到“资源”部分。选择应用程序隐私文件类型,单击下一步,然后单击创建。默认情况下,该文件名为PrivacyInfo.xcprivacy;不要更改文件名。在此属性列表文件的顶层,将以下键添加到字典中。

出于 UserDefaults 隐私原因,您需要密钥

NSPrivacyAccessedAPITypes
。上面的文档对此进行了描述:

一组字典,描述您的应用或第三方 SDK 访问的 API 类型,这些类型已被指定为需要访问原因的 API。有关字典中要使用的键和值的信息,请参阅描述所需原因 API 的使用

可以在此处找到 UserDefaults 特定部分。

以下显示了一个最小示例,用于指示您仅在 UserDefaults 中使用特定于应用程序的值:

该 plist 对应的 XML 如下所示:

<?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>CA92.1</string>
            </array>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
        </dict>
    </array>
</dict>
</plist>

在 Xcode 中将其创建为 plist 而不是 XML 更容易,因为 Xcode 允许您仅选择相关的键和值。

我的示例将 UserDefaults 原因显示为

CA92.1
。当然,您必须提供适合您的应用程序的值。

我的示例也仅显示了 UserDefaults API 的最低限度。请参阅链接文档,了解您还需要的其他顶级密钥以及您的应用程序可能需要提供的其他 API。

© www.soinside.com 2019 - 2024. All rights reserved.