La simulación de location de Xcode 6 / iOS 8 no funciona

Acabo de actualizar a Xcode 6 / iOS 8 SDK y mi simulación de service de location en el simulador comenzó a no funcionar. Estaba bien antes de actualizar (actualmente no puedo probar en un dispositivo real). Ahora, cuando selecciono una location para la simulación, no pasa nada. Delegado -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations no se llama al método de -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations . He reiniciado Xcode, limpié la carpeta de construcción, nada cambió. ¿Por qué puede suceder esto?

Desde el IOS 8 debe solicitar autorización antes de iniciar CLLocationManager.

¿Estás llamando a uno de estos methods?

 [self.locationManager requestWhenInUseAuthorization]; // For foreground access [self.locationManager requestAlwaysAuthorization]; // For background access 

Si ha creado el proyecto antes de XCode 6, probablemente también necesite agregar la input info.plist para el nuevo permiso.

Para get más detalles, consulte esta publicación: Servicios de location que no funcionan en iOS 8

Agregue el código debajo de su método

 if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { [self.locationManager requestWhenInUseAuthorization]; } 

También agregue Below line en su file info.plist

Clave: NSLocationWhenInUseUsageDescription value: usa la location actual

Utilizando Xcode 6.3.1, he tenido que detener la actualización de la selección de location. La solución era ejecutar otro proyecto, seleccionar "Simular location> No simular location" y luego build el proyecto original nuevamente para reanudar la configuration de location normal.

 - (void)startLocationUpdates{ geocoder = [[CLGeocoder alloc] init]; locationManager = [[CLLocationManager alloc] init]; locationManager.delegate = self; locationManager.distanceFilter = kCLDistanceFilterNone; locationManager.desinetworkingAccuracy = kCLLocationAccuracyBest; if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) [locationManager requestWhenInUseAuthorization]; [locationManager startUpdatingLocation]; } - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ CLLocation *currentLocation = newLocation; if (currentLocation != nil) { } // Reverse Geocoding [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { if (error == nil && [placemarks count] > 0) { placemark = [placemarks lastObject]; fullAddress = [NSString stringWithFormat:@"%@,%@,%@,%@", placemark.thoroughfare, placemark.locality, placemark.administrativeArea, placemark.country]; subtitleLocation = [NSString stringWithFormat:@"PostalCode::%@", placemark.postalCode]; } else { // NSLog(@"%@", error.debugDescription); } } ]; } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{ NSLog(@"Cannot find the location."); } 

Las otras respuestas son correctas, pero también tuve que reiniciar el simulador antes de que pudiera get una location, mientras que funcionaba bien en un dispositivo. La aplicación se instaló inicialmente en ese simulador antes de iOS 8.

Para restablecer tu simulador:

https://stackoverflow.com/a/16195931