Ответ
Да, работал с Core Location для решения задач, связанных с геолокацией.
Основные возможности фреймворка, которые использовал:
- Запрос разрешений:
requestWhenInUseAuthorization()иrequestAlwaysAuthorization(). - Получение текущего местоположения: Разовое или отслеживание с различной точностью (
kCLLocationAccuracyBest). - Фоновое отслеживание: Включение
allowsBackgroundLocationUpdatesс соответствующей настройкойCapabilitiesпроекта. - Геокодирование: Преобразование координат в адрес (прямое геокодирование) и адреса в координаты (обратное) с помощью
CLGeocoder. - Мониторинг регионов: Отслеживание входа/выхода из заданной географической области (
CLCircularRegion) с помощьюstartMonitoring(for:).
Пример базовой реализации менеджера локации:
import CoreLocation
class LocationService: NSObject, CLLocationManagerDelegate {
static let shared = LocationService()
private let locationManager = CLLocationManager()
private var locationUpdateHandler: ((CLLocation) -> Void)?
private override init() {
super.init()
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
}
// Запрос локации однократно
func requestCurrentLocation(completion: @escaping (CLLocation) -> Void) {
self.locationUpdateHandler = { location in
completion(location)
self.locationUpdateHandler = nil // Останавливаем после получения
self.locationManager.stopUpdatingLocation()
}
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
}
// CLLocationManagerDelegate
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
guard let latestLocation = locations.last else { return }
locationUpdateHandler?(latestLocation)
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location update failed: (error.localizedDescription)")
}
}
Важные аспекты: Всегда необходимо учитывать оптимизацию энергопотребления (использовать activityType), корректно обрабатывать ошибки и статусы разрешений, а также предоставлять понятное описание использования локации в Info.plist (NSLocationWhenInUseUsageDescription).