Mit iOS 8 hat sich der Zugriff auf den Standort des Benutzers wieder mal geändert, die Berechtigung teilt sich jetzt in ständige Erlaubnis zur Standortabfrage ( NSLocationAlwaysUsageDescription ) und in die Erlaubnis nur bei App-Betrieb ( NSLocationWhenInUseUsageDescription ). Will man den Standort bestimmen, bekommt man folgende Meldung:
Trying to start MapKit location updates without prompting for location authorization.Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
Um dies zu beheben, geht man wie folgt vor: 1. In der AppName-Info.plist müssen einer oder beide Einträge manuelle angelegt werden, da es noch keine Vorgaben in den Selectboxen gibt, also rechter Mausklick auf die Info.plist > Open as Source Code und folgende Einträge ergänzen:
<key>NSLocationWhenInUseUsageDescription</key>
<string>${PRODUCT_NAME} möchte auf Ihren aktuellen Standort zugreifen.</string>
und/oder
<key>NSLocationAlwaysUsageDescription</key>
<string>${PRODUCT_NAME} möchte auf Ihren aktuellen Standort zugreifen.</string>
2. Die zugehörige Berechtigung holt man sich in der App dann mit
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestAlwaysAuthorization];
Wichtig: Ohne die Einträge in der Info.plist erscheint trotz Abfrage kein Alert und der Zugriffstatus [CLLocationManager authorizationStatus] bleibt weiterhin undefiniert, es erscheint auch kein Eintrag in den App-Einstellungen oder unter Datenschutz. Auch das Aktivieren des Benutzerstandorts einer MapView mit self.mapView.showsUserLocation = YES funktioniert dann nicht.