Der Herbst hält schön langsam Einzug in unsere Breitengrade und so wie sich das Laub mancherorts verfärbt, erblasst so mancher App Entwickler, wenn seine unter iOS 7 gebaute App unter iOS 8 nicht mehr ganz so tut wie gewollt.

Greift eine App unter iOS 7 auf die Location Services zu, so fragt sie von sich aus den Benutzer, ob er den Zugriff auf den Standort zulassen will. Einmal gewährt erhält die App auch nach dem Upgrade auf iOS 8 Zugriff auf den Standort.

Wird die App jedoch neu installiert, so wird der Benutzer weder nach seiner Zustimmung gefragt, noch wird der aktuelle Standort ermittelt. Kurzum: Die App tut nicht(s) mehr.

Wer sich das ganze aus XCode heraus ansieht, wird die folgende Fehlermeldung erblicken:

Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

Der Grund hierfür ist eine Neuerung in iOS 8, die nicht nur den Aufruf der in der Fehlermeldung referenzierten Methoden, sondern auch die Definition von NSLocationAlwaysUsageDescription und NSLocationWhenInUseUsageDescription verlangt. 

Definition von NSLocationWhenInUseUsageDescription und NSLocationAlwaysUsageDescription

Ich definiere diese Strings gleich in der Datei InfoPlist.strings mit z.B. folgenden Inhalt:

Dieser Text kann natürlich in alle notwendigen Sprachen übersetzt werden und wird in der Folge dem Benutzer als Text präsentiert, wenn er nach der Zustimmung zur Standortbewilligung gefragt wird.

Die Abfrage an den CLLocationManager

Auch wer nur einen MKMapView verwendet muss sich dieser Prozedur unterziehen. Ein geeigneter Ort für diese Überprüfung findet sich im AppDelegate.

Wichtig ist, dass der locationManager nicht lokal in didFinishLaunchingWithOptions definiert wird, da er aufgrund der asynchrone Abarbeitung der Benutzerabfrage seinen Scope verlüre, bevor der Benutzer überhaupt gefragt worden hätte werden können. Dieser vorvergangene Konjunktiv der Zustimmung eines Benutzers ist wahrscheinlich auch der Grund, wieso in diesem Fall die Abfrage erst gar nicht stattfindet.

Ebenso von Bedeutung ist die Abfrage nach der iOS Version, da die App sonst unter iOS 7 nicht mehr mehr lauffähig wäre.

Über den Autor

Geysir für Ideen. Für ihn gibt es keine Probleme, nur Herausforderungen. Mit Pragmatismus und Enthusiasmus ist für ihn fast alles machbar. Apple Fanboy. In seine Hosentasche kommt nur Tempo und iOS. In seiner Freizeit macht er Gemsen mit dem Mountainbike Konkurrenz.
1 Response

Kommentieren

%d Bloggern gefällt das: