Geolocation and Maps in Swift for iOS/macOS: A Complete Guide

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Geolocation and Maps in Swift (iOS/macOS): Core Location and MapKit



Developing mobile and desktop applications for the Apple ecosystem often requires integrating geolocation functionality and map display. In Swift, two powerful frameworks are used for these purposes: Core Location (for determining location) and MapKit (for working with maps). In this article, we will thoroughly examine their capabilities, provide practical code examples, and explain how to effectively use these tools in your projects.



1. Core Location: Obtaining Coordinates and Working with Geodata



Core Location is a framework that provides access to hardware and software means of determining the device's location. It supports GPS, Wi-Fi, cellular towers, and iBeacon. Main features:



  • Determining current coordinates (latitude, longitude)
  • Monitoring significant location changes
  • Geofences (regions) — entering/exiting a specified area
  • Determining direction and speed of movement
  • Reverse geocoding (address from coordinates)


1.1. Configuring Permissions



To work with geolocation, you need to request permission from the user. Add the following keys to Info.plist:



  • NSLocationWhenInUseUsageDescription — for use only when the app is active
  • NSLocationAlwaysAndWhenInUseUsageDescription — for background monitoring


1.2. Example: Getting the Current Location



Let's create a simple location manager:



import CoreLocation

class LocationManager: NSObject, CLLocationManagerDelegate { let manager = CLLocationManager() var currentLocation: CLLocation? override init() { super.init() manager.delegate = self manager.desiredAccuracy = kCLLocationAccuracyBest manager.requestWhenInUseAuthorization() manager.startUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { guard let location = locations.last else { return } currentLocation = location print("Latitude: \\(location.coordinate.latitude)") print("Longitude: \\(location.coordinate.longitude)") manager.stopUpdatingLocation() } func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { print("Error: \\(error.localizedDescription)") }}


2. MapKit: Displaying Maps and Working with Annotations



MapKit allows embedding Apple Maps into applications. It supports:



  • Displaying standard, satellite, and hybrid maps
  • Adding annotations (pins, custom markers)
  • Route planning (driving, walking, public transit)
  • Tracking the user's location on the map


2.1. Basic MKMapView Setup



Add an MKMapView to a storyboard or create it programmatically:



import MapKit

class MapViewController: UIViewController { @IBOutlet weak var mapView: MKMapView! override func viewDidLoad() { super.viewDidLoad() mapView.mapType = .standard mapView.showsUserLocation = true mapView.delegate = self }}


2.2. Adding Annotations



Let's create a custom annotation:



class CustomAnnotation: NSObject, MKAnnotation {    var coordinate: CLLocationCoordinate2D    var title: String?    var subtitle: String?        init(coordinate: CLLocationCoordinate2D, title: String, subtitle: String) {        self.coordinate = coordinate        self.title = title        self.subtitle = subtitle    }}

// Adding to the maplet annotation = CustomAnnotation

Recommendations