My Swift-iOS app is meant to show the user's location on a map. However, the XCode debug console tells me I need to ask permission to show the user's location. I think, I do that but the dialog never comes up.
Here is the error message, and below the ViewController where I call CLLocationManager::requestWhenInUseAuthorization()
Error:
2014-06-30 21:25:13.927 RowingTracker2[17642:1608253] Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
ViewController:
import UIKit
import MapKit
import CoreLocation
class ViewController: UIViewController, MKMapViewDelegate {
@IBOutlet var mapview: MKMapView = nil
var locationmgr : CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
locationmgr = CLLocationManager()
locationmgr.requestWhenInUseAuthorization()
mapview.showsUserLocation = true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
How do I request authorization to use the location? You can find the complete project here.(Commit)
Info
Even making ViewController inherit from CLLocationManagerDelegate
and setting the delegate to self
as indicated here doesn't help.
As of iOS 8 you have to call one of the request... functions and add the appropriate entry to your Info.plist file, either
NSLocationWhenInUseUsageDescription
orNSLocationAlwaysUsageDescription
.For more information, see the reference here
Update
Make sure that
Debug > Location
.Debug Area:
I use
NSLocationAlwaysUsageDescription
with the value as the text that will pop up when asking for permission, such asI would also add
NSLocationWhenInUseUsageDescription
with the value as the message.You need to use requestWhenInUseAuthorization and also need to create a value at yourapp-Info.plist named NSLocationWhenInUseUsageDescription