AKTUALIZACJA: TO NIE JEST DUPLIKAT. Dodałem już wymagany klucz do pliku info.plist, jak podano w moim oryginalnym pytaniu, a problem pozostaje. Próbowałem wszystkich trzech kluczy w różnych kombinacjach.Nie jest wyświetlany monit o włączenie usług lokalizacyjnych w aplikacji
Zanim ktokolwiek się zdenerwuje, przeczytałem wiele postów na forum Apple Dev i stosów przepełnienia stosu i nie mogę się domyślić, dlaczego moja aplikacja nie zachęca użytkownika do zezwolenia na używanie w czasie użytkowania.
Dodałem następujący klucz do mojego pliku Info.plist
z towarzyszącym wartości String:
NSLocationWhenInUseUsageDescription
ja wtedy pisemnej (zarówno w Swift i obj-c) kod, który powinien monitować użytkownika:
@property CLLocationManager *location;
...
@synthesize location;
...
location = [[CLLocationManager alloc] init];
location.delegate = self;
location.desiredAccuracy = kCLLocationAccuracyBest;
location.distanceFilter = kCLDistanceFilterNone;
[location requestWhenInUseAuthorization];
[location startUpdatingLocation];
I'm using the following CLLocationManagerDelegate methods.
- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
- (void) locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
Zostało to w zasadzie skopiowane prosto z kodu przykładowego Apple "LocateMe".
Bez względu na różne sekwencje lub drobne zmiany, które próbuję, aplikacja nigdy nie prosi o autoryzację. Użyłem instrukcji switch do określenia stanu [CLLocationManager authorizationStatus]
, ale ciągle otrzymuję odpowiedź "Not Determined".
if ([CLLocationManager locationServicesEnabled]) {
switch ([CLLocationManager authorizationStatus]) {
case kCLAuthorizationStatusAuthorizedAlways:
NSLog(@"Always Authorized");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"Denied");
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
NSLog(@"Authorized in Use");
break;
case kCLAuthorizationStatusNotDetermined:
NSLog(@"Not Determined");
break;
case kCLAuthorizationStatusRestricted:
NSLog(@"Restricted");
break;
}
}
Każda pomoc zostanie bardzo doceniona. Używam Xcode 6.2 (6C101) z fizycznym urządzeniem iOS 8.1.2 i symulatorem iOS 8.2 (12D5452a) do testowania.
@ n00bProgrammer Nie widzę opcji resetowania dostępnej w zakładce Ustawienia> Reset na symulatorze. Napisałem również dwa programy, jeden w Swift i jeden w Obj-C, i oba robią to samo. Przetestowałem także urządzenie fizyczne i uzyskałem takie same wyniki. Nie próbowałem jeszcze resetować sprzętu. – Andrew