Depuis récemment, je suis dans les journaux Xcode beaucoup d'avertissements étranges du cadre coremotion, lié à la fonction getLocationForBundleID
:
[Client] {"msg":"#NullIsland Either the latitude or longitude was exactly 0! That's highly unlikely", "latIsZero":0, "lonIsZero":0}
[Client] {"msg":"#NullIsland Received a latitude or longitude from getLocationForBundleID that was exactly zero", "latIsZero":0, "lonIsZero":0, "location":'28 5B E0 D7 EB 7F 00 00'}
Je ne vois aucun dysfonctionnement de mon application. Donc, peut-être que ces journaux peuvent être ignorés, mais ils sont ennuyeux de toute façon.
Mes questions sont :
Comment puis-je corriger une erreur potentielle?
[.____] Comment puis-je arrêter ces avertissements?
Apparemment, ce message d'erreur est enregistré si la propriété location
d'un CLLocationManager
est lue, avant que le CLLocationManager
a livré le tout premier lieu.
Ma solution est la suivante:
[.____] J'utilise de toute façon une sous-classe de CLLocationManager
qui me permet de définir la propriété location
pour des tests par programme. Cela se fait comme suit:
private var _location: CLLocation?
@objc dynamic override var location: CLLocation? {
get {
let usedLocation = _location ?? super.location // Here the error is logged if no location has been delivered yet
return usedLocation
}
set {
_location = newValue
}
}
Cette sous-classe a maintenant une propriété supplémentaire
var anyLocationDelivered = false
qui est défini true
dans
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
locationManager.anyLocationDelivered = true
// …
}
et le getter est maintenant
get {
guard anyLocationDelivered else { return nil }
let usedLocation = _location ?? super.location
return usedLocation
}
Maintenant, ce message d'erreur n'est plus enregistré.
J'avais cette même erreur lorsque vous essayiez d'obtenir l'emplacement d'un utilisateur dans une application. Il y avait deux choses qui m'empêchent d'obtenir un lat/long valide. Le principal problème que j'avais eu était que j'utilisais un simulateur et j'avais dû régler la position manuellement. Si vous utilisez le simulateur, accédez à Xcode, cliquez sur Débogage -> Simulez l'emplacement et choisissez un emplacement. J'ai également dû s'assurer que les touches d'autorisation d'emplacement correctes ont été ajoutées à Info.Plist. Vous êtes également déjà déjà conscient, mais vous saurez si des clés sont manquantes à partir d'info.plist car un message d'erreur distinct imprimera à la console au-dessus ou au-dessous de ces messages d'erreur Lat/Long, et il vous indiquera quelle clé est manquant. Donc en gros:
Je ne sais pas si cela aidera du tout, mais j'espère que ça fait. Si vous avez déjà confirmé que ce ne sont pas des problèmes, je ne suis pas sûr de ce qui peut causer la question dans votre cas, mais en vous relevant que les parties de votre code responsables de la récupération de l'emplacement de l'utilisateur seraient probablement bénéfiques pour voir quel lien Le processus échoue.