ubicaciĆ³n ubicacion sistema servicios puedo por localizacion exacta desactivar buscar alertas activar ios swift iphone ios11 location-services

ubicacion - servicios de sistema ios 11



Los servicios de ubicaciĆ³n no funcionan en iOS 11 (8)

Sigue estos pasos:

Me encontré con el mismo problema con una aplicación que necesitaba "Autorización siempre", y la resolví siguiendo estos pasos:

1. Agregue la clave Info.plist a Info.plist

2. Agregue NSLocationAlwaysAndWhenInUseUsageDescription a Info.plist

3. Agregue NSLocationAlwaysUsageDescription a Info.plist (para admitir <iOS 11)

4. Llame a requestWhenInUseAuthorization() ANTES de requestAlwaysAuthorization( )

No puede ejecutar requestAlwaysAuthorization () antes de requestWhenInUseAuthorization (). Debe escalar a ese nivel de permiso. Una vez que hice estos cambios, las actualizaciones de ubicación comenzaron a funcionar correctamente nuevamente.

Más detalles se pueden encontrar aquí:

https://developer.apple.com/documentation/corelocation/choosing_the_authorization_level_for_location_services/requesting_always_authorization

Acabo de reconstruir mi aplicación con el SDK de iOS 11 en un intento de eliminar el blue banner que ahora siempre aparece. Pensé: "Brillante, eso funcionó", solo para descubrir que los servicios de ubicación ahora no funcionan en absoluto.

La aplicación solía funcionar con iOS 10: ¿alguien ha escuchado algo?


Parece que Apple ha agregado otra característica de privacidad. El usuario ahora puede anular nuestra requestAlwaysAuthorization y rebajarla a requestWhenInUseAuthorization , lo que significa que como desarrollador ahora tenemos que proporcionar ambas descripciones en la Info.plist

Descubrí que han agregado una nueva clave NSLocationAlwaysAndWhenInUseUsageDescription

/* * Either the NSLocationAlwaysAndWhenInUseUsageDescription key or both the * NSLocationAlwaysUsageDescription and NSLocationWhenInUseUsageDescription * keys must be specified in your Info.plist; otherwise, this method will do * nothing, as your app will be assumed not to support Always authorization. */

Sin embargo, al usar esta nueva clave, el servicio de ubicación aún no funcionaba, al seguir buscando encontré esta joya mezclada con toda la información adicional de depuración:

Esta aplicación ha intentado acceder a datos sensibles a la privacidad sin una descripción de uso. El Info.plist de la aplicación debe contener las claves NSLocationAlwaysAndWhenInUseUsageDescription y NSLocationWhenInUseUsageDescription con valores de cadena que explican al usuario cómo la aplicación usa estos datos

Lo que contradice directamente el comentario que encontré en el archivo CLLocationManager.h actualizado. Entonces he creado un radar.

Buenas noticias, si sigues los consejos de la consola de depuración, IE. agregue la nueva clave NSLocationAlwaysAndWhenInUseUsageDescription y una de las claves antiguas NSLocationWhenInUseUsageDescription , los servicios de ubicación comenzarán a funcionar nuevamente.


Probado en iOS 12.2 con Swift 5

Paso 1. debe agregar los siguientes permisos de privacidad en el archivo plist

<key>NSLocationWhenInUseUsageDescription</key> <string>Description</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>Description</string> <key>NSLocationAlwaysUsageDescription</key> <string>Description</string>

Paso 2. asegúrese de tener el siguiente código rápido para obtener las ubicaciones actuales

import UIKit import MapKit import CoreLocation class ViewController: UIViewController, CLLocationManagerDelegate { // MARK: Variables declearations @IBOutlet weak var mapView: MKMapView! var locationManager: CLLocationManager! // MARK: View Controller life cycle methods override func viewDidLoad() { super.viewDidLoad() //TODO: Make user you must add following three privacy permissions in plist //NSLocationWhenInUseUsageDescription //NSLocationAlwaysAndWhenInUseUsageDescription //NSLocationAlwaysUsageDescription getCurrentLocation() } func getCurrentLocation() { if (CLLocationManager.locationServicesEnabled()) { locationManager = CLLocationManager() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestAlwaysAuthorization() locationManager.startUpdatingLocation() } } // MARK: Location Manager Delegate methods func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { let locationsObj = locations.last! as CLLocation print("Current location lat-long is = /(locationsObj.coordinate.latitude) /(locationsObj.coordinate.longitude)") showOnMap(location: locationsObj) } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Get Location failed") } func showOnMap(location: CLLocation ) { let center = CLLocationCoordinate2D(latitude: location.coordinate.latitude, longitude: location.coordinate.longitude) let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)) mapView.setRegion(region, animated: true) } }


Solo para agregar los pasos para solucionar esto:

2 formas de hacerlo:

A) La manera fácil: seleccione su archivo Info.plist, agregue las propiedades, tenga en cuenta que comienzan con PRIVACIDAD en lugar de UBICACIÓN ... por lo tanto, los nombres exactos de estas variables comienzan con "Privacidad - Ubicación ...", etc., agregue cada uno aquí, y describa cómo el usuario vería esto en la advertencia.

B) La forma difícil / interesante / programática (me gusta más de esta manera):

Haga clic derecho en su Info.plist para su aplicación, y luego seleccione "Ver código fuente", debería verlo todo en XML,

Siga el otro formato ...... y agregue estas propiedades de la siguiente manera:

<key>NSLocationAlwaysUsageDescription</key> <string>Program requires GPS to track cars and job orders</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>Program requires GPS to track cars and job orders</string> <key>NSLocationWhenInUseUsageDescription</key> <string>Program requires GPS to track cars and job orders</string> <key>NSMicrophoneUsageDescription</key> <string>This app uses your Microphone to allow Voice over IP communication with the Program Admin system</string>

Guarde, y luego haga clic derecho en el archivo info.plist, y luego seleccione Lista de propiedades, esto debería volver a ver el archivo en la vista predeterminada.

EDITAR:

Otro miembro solicitó el código, aquí está:

1) En su archivo .H, agregue:

@property (strong, nonatomic) CLLocationManager *LocationManager;

2) En su archivo .M, agregue bajo la función ViewDidAppear ():

_LocationManager = [[CLLocationManager alloc] init]; [_LocationManager setDelegate:self]; _LocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; _LocationManager.pausesLocationUpdatesAutomatically = NO; [_LocationManager requestAlwaysAuthorization]; _LocationManager.headingFilter = 5; _LocationManager.distanceFilter = 0; [_LocationManager startUpdatingLocation]; [_LocationManager startUpdatingHeading];

Esto es lo que funciona bien para mí, espero que el código también funcione para usted.

Saludos

Heider


trabajando bajo iOS11 descubrí que Info.plist necesita al menos NSLocationAlwaysAndWhenInUseUsageDescription en Info.plist:

Por extraño que parezca, cuando su aplicación es multilingüe, las versiones localizadas de sus cadenas necesitan las tres claves mencionadas en esta publicación, de lo contrario requestAlwaysAuthorization() y locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) fallarán en silencio.

Plano que muestra la traducción al alemán como ejemplo:

Espero que esto te ahorre tiempo cuando te topes.


Mejor prevenir que curar ... En iOS 11: agregue lo siguiente y estará bien.

<key>NSLocationWhenInUseUsageDescription</key> <string>Description</string> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>Description</string> <key>NSLocationAlwaysUsageDescription</key> <string>Description</string>


Swift: 3 me he enfrentado al mismo problema. Estaba totalmente jodido encontrando la solución. Así es como solucioné el problema.

paso-1: archivo de proyecto> capacidades> modos de fondo> seleccione Actualización de ubicación

Paso 2: Agregue las claves NSLocationWhenInUseUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription a Info.plist

paso 3 :

manager.pausesLocationUpdatesAutomatically = false manager.allowsBackgroundLocationUpdates = true


Trabajando en Swift 4.0.3

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>Description</string> <key>NSLocationAlwaysUsageDescription</key> <string>Will you allow this app to always know your location?</string> <key>NSLocationWhenInUseUsageDescription</key> <string>Do you allow this app to know your current location?</string>