NSLocationAlwaysUsageDescription和NSLocationWhenInUseUsageDescription被忽略

时间:2016-11-20 17:31:23

标签: swift3 cllocationmanager xcode8

Xcode 8.2 beta 8C30a,Swift 3,iPhone 5s。

我正在编写一个想要使用iPhone手机位置的天气应用程序。要获得授权,我已设置(全部)以下This app has attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSLocationWhenInUseUsageDescription key with a string value explaining to the user how the app uses this data

<ul>
  <li>1200</li>
  <li>1300
    <ul>
      <li>1301</li>
    </ul>
  <li>
</ul>

然而,当我调用LocationManager.requestWhenInUseAuthorization()时,我收到以下错误:

<ul>
  <li>-200</li>
  <li>-450
    <ul>
      <li>-451</li>
    </ul>
  </li>
</ul>

关键在那里,但没有被人看到。手机的设置菜单中没有该应用的条目(也不在隐私下)。毫无疑问,我错过了一些简单的事情。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我刚刚遇到一个特定应用程序的同样问题,我有几个具有相同结构的应用程序在我请求位置服务授权时工作正常。

在所有情况下,我都已对应用程序进行了本地化,因此我的XCode项目中有几个Info.plist文件(例如,一个用于Base语言,即英语,另一个用于法语等)。

我总是手动编辑我的Info.plist文件(将它们视为“源代码”)并添加NSLocationWhenInUseUsageDescription字段。

但是在这个特定App的情况下,我注意到当我在Project的目标列表中选择了App Target然后点击了“Info”选项卡时,XCode没有显示NSLocationWhenInUsageDescription字段。这很奇怪,因为当我检查其他XCode项目中的“信息”选项卡时,会在此处显示对基本语言的Info.plist文件所做的编辑。因此,我手动将NSLocationWhenInUseUsageDescription字段添加到此“信息”UI,突然我的新应用程序正常工作,请求用户在使用时访问位置服务的权限。

我建议您检查已添加到Info.plist文件中的所有字段是否都反映在“目标/信息”屏幕中。如果不是,您可能会遇到类似的问题,在这种情况下,相同的修复可能对您有用。

我猜测问题的根本原因是本地化过程中的一个错误。我记得在选择Info.plist文件作为我的一个本地化文件后,我在构建时从XCode收到错误,抱怨它缺少一个Info.plist文件(它已将Info.plist从base.lproj文件夹中移出en.lproj当它“本地化”文件时)。我恢复了XCode从base.lproj文件夹移动到en.lproj文件夹的文件,这似乎使XCode再次开心。但我认为它失去了刷新自身的能力,因此Info.plist文件的后续添加不会在他们需要的任何地方应用。)