Géolocalisation et cartes en Swift (iOS/macOS) : Core Location et MapKit
Le développement d'applications modernes pour iOS et macOS nécessite souvent de travailler avec la géolocalisation et les cartes. Dans l'écosystème Apple, deux frameworks puissants existent à cet effet : Core Location (obtention de données géographiques) et MapKit (affichage de cartes, annotations, itinéraires). Dans cet article, nous allons détailler leurs fonctionnalités, fournir des exemples pratiques en Swift et montrer comment intégrer la géolocalisation dans votre application.
1. Core Location : Détermination de la position
Core Location est un framework permettant d'obtenir des informations géographiques : coordonnées, altitude, direction du déplacement, ainsi que la surveillance de géozones (geofencing). Il fonctionne avec le GPS, le Wi-Fi, les antennes relais et iBeacon.
1.1. Configuration des autorisations
Pour utiliser la géolocalisation, vous devez demander l'autorisation à l'utilisateur. Dans le fichier Info.plist, ajoutez l'une des clés suivantes :
NSLocationWhenInUseUsageDescription— pour obtenir des données uniquement lorsque l'application est activement utilisée.NSLocationAlwaysAndWhenInUseUsageDescription— pour une surveillance en arrière-plan (nécessite une explication supplémentaire).
1.2. Obtention des coordonnées actuelles
import CoreLocation
class LocationManager: NSObject, CLLocationManagerDelegate { private let manager = CLLocationManager() var onLocationUpdate: ((CLLocation) -> Void)?
override init() { super.init() manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest }
func requestLocation() { manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() }
// MARK: - CLLocationManagerDelegate func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } onLocationUpdate?(location) manager.stopUpdatingLocation() // Arrête les mises à jour si une seule valeur est nécessaire }
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Erreur d'obtention de la position : \\(error.localizedDescription)") }}
// Utilisationlet locationManager = LocationManager()locationManager.onLocationUpdate = { location in print("Latitude : \\(location.coordinate.latitude), Longitude : \\(location.coordinate.longitude)")}locationManager.requestLocation()2. MapKit : Affichage des cartes et annotations
MapKit permet d'intégrer des cartes interactives Apple Maps dans les applications. La classe principale est MKMapView.
2.1. Création d'une carte dans Storyboard/XIB
Ajoutez MKMapView sur la scène et créez un IBOutlet dans le contrôleur. Assurez-vous que MapKit est importé.
2.2. Création programmatique d'une carte et ajout d'une annotation
import MapKit
class MapViewController: UIViewController { var mapView: MKMapView!
override func viewDidLoad() { super.viewDidLoad() setupMap() addAnnotation() }
private func setupMap() { mapView = MKMapView(frame: view.bounds) mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight] view.addSubview(mapView)
// Définit la région (Moscou) let center = CLLocationCoordinate2D(latitude: 55.751244, longitude: 37.618423) let span = MKCoordinateSpan(latitudeDelta: 0.05, longitudeDelta: 0.05) let region = MKCoordinateRegion(center: center, span: span) mapView.setRegion(region, animated: true) }
private func addAnnotation() { let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2D(latitude: 55.751244, longitude: 37.618423) annotation.title = "Moscou" annotation.s