核心位置不要求许可

时间:2014-11-05 00:13:29

标签: ios swift core-location

问题:

出于某种原因,我正在处理的应用程序并不是要求使用位置服务的许可。以前这曾经工作过。另外,我创建了一个新项目,我按照下面描述的步骤完成了这项工作。

一个区别是我知道我正在处理的主应用程序中的授权状态是.Denied,它在测试项目中是.NotDetermined。

我在堆栈溢出时读到了这个问题:

Core Location not requesting user permission ' 没有多少人知道这一点,但在卸载应用程序后,该应用程序的文档和首选项仍存储在设备上,此处:

/ var / mobile / Library / Safe Harbor / myappidentifier / Container / 在我看来,这不是苹果的明智之举,因为这可能会带来安全隐患,就像你上面解释过的那样。

如果重新安装了某个应用,iOS会自动将这些首选项复制回相应的文件夹中。这就是你所看到的行为的原因。 ' 这可以解释它,因为我确实重新安装了应用程序,但它没有说明如何解决它。

谢谢

这是我在App中写的相关代码:

我在info.plist中设置了NSLocationAlwaysUsageDescription键

我导入了核心位置:

import CoreLocation

实施了正确的协议:

CLLocationManagerDelegate

设置此属性:

var locationManager  = CLLocationManager()

在ViewDidLoad中设置委托

locationManager.delegate = self

并写了一个测试函数来测试这个:

        if CLLocationManager.locationServicesEnabled() {
println("Location Services Enabled")
        if CLLocationManager.authorizationStatus() == .Authorized {
            println("Location Services Authorized")
        } else if CLLocationManager.authorizationStatus() == .AuthorizedWhenInUse {
            println("Location Services Authorized WHEN IN USE")
        } else if CLLocationManager.authorizationStatus() == .NotDetermined {
            println("Location Services NOT Authorized: NOT DETERMINED")
        } else if CLLocationManager.authorizationStatus() == .Restricted {
            println("Location Services NOT Authorized: RESTRICTED")
        } else if CLLocationManager.authorizationStatus() == .Denied {
            println("Location Services NOT Authorized: DENIED")
        } else {
            println("Location Services NOT Authorized")
            locationManager.requestAlwaysAuthorization()
        }

    } else {
        println("!!! Location Services NOT Enabled !!!")
    }

控制台输出:

Location Services Enabled
Location Services NOT Authorized

1 个答案:

答案 0 :(得分:1)

您可以进入“设置”应用“常规”,然后重置“位置”和“放置位置”。隐私,以便再次获取应用的初始权限对话框。否则,iOS会保存第一个答案,而不会再问。