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?
Réponses
Trop de publicités?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/
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é.
-(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
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.