【问题标题】:Not able to add "Privacy - Location Always and When in use usage description" in info.plist - Xcode 9 Beta无法在 info.plist - Xcode 9 Beta 中添加“隐私 - 始终位置和使用时的使用说明”
【发布时间】:2017-12-15 11:02:48
【问题描述】:

我在尝试向用户请求 Xcode 9 Beta 中位置的许可时收到以下错误。我尝试在 info.plist 中添加 “Privacy - Location When In Use Usage Description”“Privacy - Location Usage Description” 描述,但仍然出现相同的错误。

此应用试图在没有 使用说明。应用的 Info.plist 必须同时包含 NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription 键与字符串值解释 向用户展示应用如何使用这些数据

当我尝试添加 “隐私 - 始终位置和使用时的使用说明” 时,它会自动重命名为 “隐私 - 位置使用说明” in info.列表

【问题讨论】:

  • 看起来像一个错误 - 在源视图中打开 info.plist 并以这种方式添加密钥
  • 如何将条目添加到 info.plist 中?
  • 您是否正确复制了错误信息?根据developer.apple.com/library/content/qa/qa1937/_index.html,有 NSLocationAlwaysUsageDescription 和 NSLocationWhenInUseUsageDescription,但没有 NSLocationAlwaysAndWhenInUseUsageDescription。
  • @Paulw11 是的,看起来像一个错误。当我将它添加到源视图中的 plist 时,错误消失了。但是现在权限警报会在几秒钟内显示并消失,甚至在我选择一个之前 :(
  • @MartinR 是的,我正确复制了它。

标签: ios swift xcode plist core-location


【解决方案1】:

添加“NSLocationAlwaysAndWhenInUseUsageDescription”而不是“Privacy - Location Always and When in use description”。在当前的测试版中,它不会重命名为任何内容,但会显示适用于 iOS 11 的正确对话框。

【讨论】:

    【解决方案2】:

    https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/request_always_authorization?language=objc

    基本上它说您需要在应用的 Info.plist 文件中包含 NSLocationWhenInUseUsageDescription 和 NSLocationAlwaysAndWhenInUsageDescription 键。 (如果您的应用支持 iOS 10 及更早版本,则还需要 NSLocationAlwaysUsageDescription 键。)如果这些键不存在,授权请求将立即失败。

    我目前使用的是 Xcode 9.0 beta 5 (9M202q),它可以正常工作。

    【讨论】:

      【解决方案3】:

      重要提示:是

      NSLocationAlwaysAndWhenInUseUsageDescription,

      不是

      NSLocationAlwaysAndWhenInUsageDescription

      Apple 在他们的 Request Always Authorization 指南中打错了字(上次访问时间:2017 年 9 月 20 日)

      【讨论】:

        【解决方案4】:

        您需要以这种方式在Info.plist中添加NSLocationAlwaysAndWhenInUseUsageDescription

        <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
        <string>App_Name requires user’s location for better user experience.</string>
        
        <key>NSLocationAlwaysUsageDescription</key>
        <string>App_Name requires user’s location for better user experience.</string>
        
        <key>NSLocationWhenInUseUsageDescription</key>
        <string>App_Name requires user’s location for better user experience.</string>
        

        【讨论】:

        • NSLocationAlwaysUsageDescription 已弃用
        【解决方案5】:

        提醒一下,这不是 Hans 建议的错字,它是正确的。设置的格式令人困惑,但符合

        "[APIModule][设置][KeyType]"

        所以设置的模块是应用程序的“NSLocation”调用,该设置是关于用户位置首选项的“Always and When in Use”设置,KeyType 是“Usage Description”,因此结果键是

        NSLocationAlwaysAndWhenInUseUsageDescription

        或分离成复合词:

        NSLocationAlwaysAndWhenInUseUsageDescription

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-18
          • 1970-01-01
          • 2018-03-06
          相关资源
          最近更新 更多