618 votes

iOS 8: les services de localisation ne fonctionnent pas

Mon application qui fonctionne correctement dans iOS 7 ne fonctionne pas avec iOS 8 SDK.

CLLocationManager ne renvoie pas d'emplacement et je ne vois pas mon application sous Settings > Location Services non plus. J'ai fait une recherche Google sur le problème mais rien n'a été soulevé, qu'est-ce qui pourrait ne pas fonctionner?

1095voto

özg Points 7036

J'ai fini par résoudre mon problème.

Apparemment dans iOS 8 SDK, requestAlwaysAuthorization (pour l'arrière-plan de localisation) ou requestWhenInUseAuthorization (lieu seulement lors de l'avant-plan) appellent CLLocationManager est nécessaire avant de commencer l'emplacement des mises à jour.

Il doit également être NSLocationAlwaysUsageDescription ou NSLocationWhenInUseUsageDescription clé en Info.plist avec un message doit être affiché dans l'invite de commandes. L'ajout de ces résolu mon problème.

Espérons que cela aide quelqu'un d'autre.

EDIT: Pour de plus amples informations, consultez: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

318voto

Henry Points 1743

Je tirais mes cheveux avec le même problème. Xcode vous donne le message d'erreur:

En essayant de démarrer MapKit emplacement des mises à jour sans intervention de l'emplacement de l'autorisation. Devez appeler -[CLLocationManager requestWhenInUseAuthorization] ou -[CLLocationManager requestAlwaysAuthorization] première.

Mais même si vous mettez en œuvre l'une des méthodes ci-dessus, de ne pas inviter l'utilisateur, sauf s'il existe une entrée dans l'info.plist pour NSLocationAlwaysUsageDescription ou NSLocationWhenInUseUsageDescription.

Ajoutez les lignes suivantes à votre info.plist (évidemment avec le message que vous voulez que vos utilisateurs à voir :),

<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>

<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>

Je pense que ces entrées peuvent avoir été absent depuis que j'ai commencé ce projet dans Xcode 5. Je devine que Xcode 6 pourrait ajouter des entrées par défaut pour ces clés, mais n'ont pas confirmé.

105voto

Jacob Koko Points 741

Pour s’assurer que cela est compatible avec l’iOS 7, vous devez vérifier si l’utilisateur est en cours d’exécution iOS 8 ou iOS 7. Par exemple :

51voto

neo D1 Points 451
 -(void)statLocationManager
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; //whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
    [locationManager requestWhenInUseAuthorization]; // Add This Line


}
 

Et au fichier Info.plist entrez la description de l'image ici

30voto

metatheoretic Points 264

Selon l'Apple docs:

https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization

Comme d'iOS 8, la présence d'un NSLocationWhenInUseUsageDescription ou NSLocationAlwaysUsageDescription de la valeur de clé dans votre application Info.fichier plist est nécessaire. Il est également nécessaire de demander l'autorisation de l'utilisateur avant de vous inscrire pour l'emplacement des mises à jour, soit en appelant [self.myLocationManager requestWhenInUseAuthorization] ou [self.myLocationManager requestAlwaysAuthorization] selon votre besoin. La chaîne que vous avez entré dans le Info.plist seront alors affichés dans la boîte de dialogue qui s'ensuit.

Si l'utilisateur donne l'autorisation, comme d'habitude. S'ils refusent l'autorisation, puis le délégué n'est pas informé de l'emplacement des mises à jour.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X