CoreLocation pour Swift : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Qu'est-ce que CoreLocation et pourquoi l'utiliser ?

CoreLocation est un framework intégré d'Apple pour les plateformes iOS, macOS, watchOS et tvOS. Il donne aux développeurs un accès aux composants matériels et logiciels de localisation de l'appareil. Contrairement aux bibliothèques tierces, CoreLocation ne nécessite aucune installation via des gestionnaires de paquets (CocoaPods, SPM) — il fait partie du SDK standard.

Principales fonctionnalités du framework :

  • Détermination des coordonnées géographiques actuelles (latitude et longitude).
  • Suivi en temps réel des changements de position.
  • Géorepérage (Geofencing) — réception de notifications lors de l'entrée ou de la sortie d'une zone définie.
  • Détection de la direction (boussole) et de la vitesse de déplacement.
  • Géocodage inverse (conversion de coordonnées en adresse) et géocodage direct (adresse en coordonnées).

Ce framework est indispensable pour les applications de navigation, les services de livraison, les trackers de fitness, les réseaux sociaux avec géolocalisation, et toute autre application nécessitant la position de l'utilisateur.

Installation de CoreLocation

CoreLocation faisant partie intégrante du système d'exploitation, il n'est pas nécessaire de l'installer via pip ou npm. Il suffit d'importer le module dans votre code.

Important : Pour utiliser la géolocalisation, vous devez ajouter une description d'utilisation dans le fichier Info.plist de votre projet. Sans cela, l'application plantera lors de la demande d'autorisation.

Ajoutez l'une des clés suivantes (selon le moment où vous avez besoin de la localisation) :

  • NSLocationWhenInUseUsageDescription — pour un accès uniquement lorsque l'application est active.
  • NSLocationAlwaysAndWhenInUseUsageDescription — pour un accès permanent (même en arrière-plan).

Comme valeur, saisissez le texte qui sera affiché à l'utilisateur dans la boîte de dialogue de demande d'autorisation (par exemple : "L'application a besoin d'accéder à votre position pour afficher les cafés à proximité").

Démarrage rapide avec un exemple de code

Voici un exemple minimal pour obtenir les coordonnées actuelles de l'utilisateur.

import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
    }

    // MARK: - CLLocationManagerDelegate
    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        guard let location = locations.last else { return }
        print("Latitude : \(location.coordinate.latitude)")
        print("Longitude : \(location.coordinate.longitude)")
        // Arrêter la mise à jour pour économiser la batterie
        locationManager.stopUpdatingLocation()
    }

    func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
        print("Erreur de localisation : \(error.localizedDescription)")
    }
}

Ce code crée un gestionnaire, demande l'autorisation à l'utilisateur et commence le suivi. Dès que les coordonnées sont obtenues, elles sont affichées dans la console.

Principales méthodes/fonctions de CoreLocation

Voici les méthodes et propriétés essentielles de la classe CLLocationManager, ainsi que des classes auxiliaires.

1. requestWhenInUseAuthorization()

Description : Demande à l'utilisateur l'autorisation d'accéder à la géolocalisation uniquement lorsque l'application est utilisée (application active à l'écran).

Paramètres : Aucun.

Exemple :

let manager = CLLocationManager()
manager.requestWhenInUseAuthorization()

2. requestAlwaysAuthorization()

Description : Demande à l'utilisateur l'autorisation d'accéder à la géolocalisation en permanence (même en arrière-plan).

Paramètres : Aucun.

Exemple :

let manager = CLLocationManager()
manager.requestAlwaysAuthorization()

3. startUpdatingLocation()

Description : Démarre la génération d'événements de localisation. Le gestionnaire appelle la méthode du délégué didUpdateLocations à chaque nouvelle position disponible.

Paramètres : Aucun.

Exemple :

manager.startUpdatingLocation()

4. stopUpdatingLocation()

Description : Arrête la génération d'événements de localisation. Utilisez cette méthode pour économiser la batterie lorsque vous n'avez plus besoin de la position.

Paramètres : Aucun.

Exemple :

manager.stopUpdatingLocation()

5. startMonitoring(for:)

Description : Commence la surveillance d'une région géographique (geofence). Le délégué est notifié lorsque l'utilisateur entre ou sort de la zone définie.

Paramètres : Un objet CLRegion (par exemple, CLCircularRegion).

Exemple :

let region = CLCircularRegion(center: CLLocationCoordinate2D(latitude: 48.8566, longitude: 2.3522), radius: 1000, identifier: "Paris")
manager.startMonitoring(for: region)

6. requestLocation()

Description : Demande une seule mise à jour de la position de l'utilisateur. Idéal pour les cas où vous n'avez besoin de la position qu'une seule fois, sans suivi continu.

Paramètres : Aucun.

Exemple :

manager.requestLocation()

7. locationManager(_:didUpdateLocations:)

Description : Méthode du délégué appelée lorsque de nouvelles données de localisation sont disponibles. Le tableau locations contient les objets CLLocation triés par ordre chronologique.

Paramètres : locations — un tableau d'objets CLLocation.

Exemple :

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if let location = locations.last {
        print("Coordonnées : \(location.coordinate.latitude), \(location.coordinate.longitude)")
    }
}

8. locationManager(_:didFailWithError:)

Description : Méthode du délégué appelée en cas d'erreur de localisation. Permet de gérer les cas où la position n'est pas disponible (ex. : services désactivés, absence de permission).

Paramètres : error — un objet Error décrivant le problème.

Exemple :

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
    print("Erreur : \(error.localizedDescription)")
}

9. locationManagerDidChangeAuthorization(_:)

Description : Méthode du délégué appelée lorsque l'état d'autorisation de localisation change. Utile pour réagir à une modification des permissions par l'utilisateur.

Paramètres : manager — l'instance de CLLocationManager.

Exemple :

func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
    switch manager.authorizationStatus {
    case .authorizedWhenInUse:
        print("Autorisation accordée lors de l'utilisation")
    case .authorizedAlways:
        print("Autorisation permanente accordée")
    case .denied:
        print("Autorisation refusée")
    default:
        break
    }
}

10. distance(from:) (méthode de CLLocation)

Description : Calcule la distance en mètres entre deux objets CLLocation. Utilise la formule de la distance orthodromique (grand cercle).

Paramètres : location — un autre objet CLLocation.

Exemple :

let paris = CLLocation(latitude: 48.8566, longitude: 2.3522)
let lyon = CLLocation(latitude: 45.7640, longitude: 4.8357)
let distance = paris.distance(from: lyon)
print("Distance Paris-Lyon : \(distance) mètres")

Recommendations