【问题标题】:What makes NSCalendarsUsageDescription required?是什么让 NSCalendarsUsageDescription 成为必需的?
【发布时间】:2017-02-02 06:09:42
【问题描述】:

当我上传到 iTunes Connect 时,我的应用程序收到未提供 NSCalendarsUsageDescription 隐私的错误。我知道此信息现在是强制性的,但我不知道我的应用在什么地方以及在哪里使用了需要此隐私使用说明的内容。

我的应用在做什么/使用它需要NSCalendarsUsageDescription

Dear developer,

We have discovered one or more issues with your recent delivery for "MyApp". To process your delivery, the following issues must be corrected:

This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCalendarsUsageDescription key with a string value explaining to the user how the app uses this data.

Once these issues have been corrected, you can then redeliver the corrected binary.

Regards,

The App Store team

编辑:不是重复的,因为解决方案不起作用,因为我已经对第一个答案发表了评论,并且可能的重复实际上并没有回答问题是什么(通常)需要使用此使用说明.

【问题讨论】:

标签: app-store-connect xcode8


【解决方案1】:

根据苹果文档:

NSCalendarsUsageDescription (String - iOS) 此键可让您描述您的应用访问用户日历的原因。当系统提示用户允许访问时,此字符串会显示为警报的一部分。

然后继续解释如何实现它:

重要提示:为保护用户隐私,在 iOS 10.0 或之后链接并访问用户日历的 iOS 应用程序必须静态声明这样做的意图。在应用的 Info.plist 文件中包含 NSCalendarsUsageDescription 键,并为此键提供用途字符串。如果您的应用尝试在没有相应用途字符串的情况下访问用户的日历,则您的应用将退出。

基本上只需将其插入到您的info.plist 文件中

 <key>NSCalendarsUsageDescription</key>
<string>purpose for using calendar</string>

您可以阅读有关可可键的更多信息 here

【讨论】:

  • 当我问这个问题时,这很清楚 - 毕竟它作为谷歌的第一个搜索结果弹出。我对实际需要使用说明的特定框架或功能更感兴趣,例如 EventKit 或 NSCalendar。
  • EventKit 正是它所需要的
  • 当您的应用请求访问您手机中的日历时,描述键会在警报视图中弹出
  • 其他然后出现在警报视图中,我认为它没有任何用途。
  • 它只是用来通知用户为什么你的应用需要访问他们的日历
【解决方案2】:

您可以尝试使用 nm 工具在您的框架二进制文件中查找 EventKit 特定符号,例如:

nm YourFramework.framework/YourFramework | grep EK # EK is a prefix for EventKit classes

或单行(寻找没有扩展名的文件,也忽略 CodeResources 以减少不相关的输出):

find YourApp/Frameworks ! -name '*CodeResources*' -type f ! -name "*.*" -exec nm -o -- {} + | grep EK

如果有,你会看到类似:

0000000000003fdb t -[ClusterPrePermissions EKEquivalentEventType:]
                 U _OBJC_CLASS_$_EKEventStore

要了解有关nm 的更多信息,请在终端中运行man nm

当您想查看给定二进制文件包含哪些符号时,nm 工具非常有用。您可以为nm 提供很多选项,但大多数情况下,无需任何参数即可运行它来回答以下问题:符号 X 是否存在于给定的二进制文件中?

【讨论】:

  • 这个 nm 工具是什么?我可以获得它的文档的链接吗?或者至少我们在哪里使用它?
【解决方案3】:

更新到新版 AdMob SDK 解决了我的问题。

【讨论】:

    【解决方案4】:

    通过添加基于您的拒绝邮件或错误日志的权限来更新您的Info.plist文件。

    NSCameraUsageDescription

    <key>NSCameraUsageDescription</key>
        <string>$(PRODUCT_NAME) camera use.</string>
    

    NSContactsUsageDescription

    <key>NSContactsUsageDescription</key>
        <string>$(PRODUCT_NAME) contacts use.</string>
    

    NSPhotoLibraryUsageDescription

    <key>NSPhotoLibraryUsageDescription</key>
        <string>$(PRODUCT_NAME) photos and video use.</string>
    

    NSBluetoothPeripheralUsageDescription

    <key>NSBluetoothPeripheralUsageDescription</key>
        <string>$(PRODUCT_NAME) bluetooth use.</string>
    

    NSMicrophoneUsageDescription

    <key>NSMicrophoneUsageDescription</key>
        <string>$(PRODUCT_NAME) microphone use.</string>
    

    NSMotionUsageDescription

    <key>NSMotionUsageDescription</key>
        <string>$(PRODUCT_NAME) motion use.</string>
    

    NSLocationAlwaysUsageDescription

    <key>NSLocationAlwaysUsageDescription</key>
        <string>$(PRODUCT_NAME) location use.</string>
    

    NSLocationUsageDescription

    <key>NSLocationUsageDescription</key>
        <string>$(PRODUCT_NAME) location use.</string>
    

    NSLocationWhenInUseUsageDescription

    <key>NSLocationWhenInUseUsageDescription</key>
        <string>$(PRODUCT_NAME) location use.</string>
    

    NSRemindersUsageDescription

    <key>NSRemindersUsageDescription</key>
        <string>$(PRODUCT_NAME) reminders use.</string>
    

    NSSiriUsageDescription

    <key>NSSiriUsageDescription</key>
        <string>$(PRODUCT_NAME) siri use.</string>
    

    NSVideoSubscriberAccountUsageDescription

    <key>NSVideoSubscriberAccountUsageDescription</key>
        <string>$(PRODUCT_NAME) video use.</string>
    

    NSSpeechRecognitionUsageDescription

    <key>NSSpeechRecognitionUsageDescription</key>
        <string>$(PRODUCT_NAME) speech recognition use.</string>
    

    NSCalendarsUsageDescription

    <key>NSCalendarsUsageDescription</key>
        <string>$(PRODUCT_NAME) user your calendar.</string>
    

    解决隐私敏感数据应用拒绝

    https://developer.apple.com/library/content/qa/qa1937/_index.html

    【讨论】:

      【解决方案5】:

      对于任何想知道为什么您的应用现在突然拥有所有这些权限设置的人,这可能是因为 CocoaPods 或 Carthage - 他们为所有这些权限设置了挂钩。我刚刚升级了我的应用程序以使用 cordova-plugin-firebasex,它具有广泛的 Cocoapods(和依赖项)安装。您可以在将 cocoapods 安装到项目中之前关闭这些权限,方法是在项目的根目录中添加 PermissionsConfiguration.xcconfig - 您可以在此处阅读更多信息:https://cocoapods.org/pods/Permission#installation

      当我的应用程序的新版本因 Info.plist 文件中缺少 7 个权限 key/string 被拒绝时,这一切都让我感到惊讶。然后我不得不深入研究我的项目以找出导致这种情况的原因,因为我的应用不需要或使用任何这些权限(从来没有)。

      它可能存在,但目前我找不到在 pod 集成后删除权限的方法......必须在不重新开始我的项目的情况下挖掘如何做到这一点。

      【讨论】:

        猜你喜欢
        • 2020-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-05
        • 1970-01-01
        • 2018-04-13
        • 1970-01-01
        • 2021-04-11
        相关资源
        最近更新 更多