Geolocalización y mapas en Swift: Core Location y MapKit (iOS/macOS)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Geolocalización y mapas en Swift (iOS/macOS): Core Location y MapKit



El desarrollo de aplicaciones modernas para iOS y macOS a menudo requiere trabajar con geolocalización y mapas. En el ecosistema de Apple, existen dos potentes frameworks para estos fines: Core Location (obtención de datos geográficos) y MapKit (visualización de mapas, anotaciones, rutas). En este artículo, analizaremos en detalle sus capacidades, proporcionaremos ejemplos prácticos en Swift y mostraremos cómo integrar la geolocalización en tu aplicación.



1. Core Location: Determinación de la ubicación



Core Location es un framework para obtener información geográfica: coordenadas, altitud sobre el nivel del mar, dirección del movimiento, así como para monitorear geocercas (geofencing). Funciona con GPS, Wi-Fi, torres de telefonía móvil y iBeacon.



1.1. Configuración de permisos



Para usar la geolocalización, es necesario solicitar permiso al usuario. En el archivo Info.plist, agrega una de las siguientes claves:

  • NSLocationWhenInUseUsageDescription — para obtener datos solo cuando la aplicación está en uso activo.
  • NSLocationAlwaysAndWhenInUseUsageDescription — para monitoreo en segundo plano (requiere explicación adicional).


1.2. Obtención de coordenadas actuales



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() // Detenemos las actualizaciones si solo se necesita un valor }

func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Error al obtener la ubicación: \\(error.localizedDescription)") }}

// Usolet locationManager = LocationManager()locationManager.onLocationUpdate = { location in print("Latitud: \\(location.coordinate.latitude), Longitud: \\(location.coordinate.longitude)")}locationManager.requestLocation()


2. MapKit: Visualización de mapas y anotaciones



MapKit permite integrar mapas interactivos de Apple Maps en las aplicaciones. La clase principal es MKMapView.



2.1. Creación de un mapa en Storyboard/XIB



Agrega un MKMapView a la escena y crea un IBOutlet en el controlador. Asegúrate de haber importado MapKit.



2.2. Creación programática del mapa y adición de anotación



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)

// Establecemos la región (Moscú) 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 = "Moscú" annotation.s

Recommendations