Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AuthorizationStatus for CLLocationManager is deprecated on iOS 14

I use this code to check if I have access to the user location or not

if CLLocationManager.locationServicesEnabled() {
    switch CLLocationManager.authorizationStatus() {
        case .restricted, .denied:
            hasPermission = false
        default:
            hasPermission = true
        }
    } else {
        print("Location services are not enabled")
    }
}

And Xcode(12) yells at me with this warning:

'authorizationStatus()' was deprecated in iOS 14.0

So what is the replacement?

like image 733
Ahmadreza Avatar asked Sep 26 '20 04:09

Ahmadreza


1 Answers

It is now a property of CLLocationManager, authorizationStatus. So, create a CLLocationManager instance:

let manager = CLLocationManager()

Then you can access the property from there:

switch manager.authorizationStatus {
case .restricted, .denied:
    ...
default:
    ...
}

There are a few location related changes in iOS 14. See WWDC 2020 What's new in location.


Needless to say, if you also need to support iOS versions prior to 14, then just add the #available check, e.g.:

let authorizationStatus: CLAuthorizationStatus

if #available(iOS 14, *) {
    authorizationStatus = manager.authorizationStatus
} else {
    authorizationStatus = CLLocationManager.authorizationStatus()
}

switch authorizationStatus {
case .restricted, .denied:
    ...
default:
    ...
}
like image 169
Rob Avatar answered Nov 04 '22 02:11

Rob