Начиная с iOS 13, Apple заменяет «Всегда разрешать» на «Всегда один раз» на экране разрешений и перемещает «Всегда разрешать» в настройках.
Если пользователь выбирает «Всегда один раз», приложение будет запрашивать местоположениеэкран разрешений каждый раз, когда пользователь запускает приложение.
Если пользователь выбирает «В процессе использования», приложение не будет запрашивать экран разрешений в следующий раз, когда пользователю явно потребуется перейти к настройкам и дать разрешение.
Также у меня работает обновление местоположения от переключения с «При использовании приложения» на «Всегда разрешать» из настроек.
Вот свойства, которые я указываю
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.delegate = self
.
.
.
extension AppDelegate: CLLocationManagerDelegate {
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
case .authorizedAlways, .authorizedWhenInUse:
locationManager.startUpdatingLocation()
case .denied:
print("Location permission denied")
case .restricted:
print("Location permission restricted")
case .notDetermined:
print("Location permission notDetermined")
@unknown default:
fatalError()
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
print("Location Update = \(String(describing: locations.first))")
}
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) {
print("Location Error = \(error.localizedDescription)")
}
}