Search code examples
swiftlocationios14

Checking user location permission status on iOS 14


So I wanted to check if I have access to the user location on iOS14 or not & I found this code but XCode(12) yells at me with this:

'authorizationStatus()' was deprecated in iOS 14.0

And here is the code:

func hasLocationPermission() -> Bool {
       var hasPermission = false
       if CLLocationManager.locationServicesEnabled() {
           switch CLLocationManager.authorizationStatus() { // <= 'authorizationStatus()' was deprecated in iOS 14.0
           case .notDetermined, .restricted, .denied:
               hasPermission = false
           case .authorizedAlways, .authorizedWhenInUse:
               hasPermission = true
           @unknown default:
               hasPermission = false
             }
       } else {
            hasPermission = false
       }
        return hasPermission
}

So what should I use instead?


Solution

  • In iOS 14 'authorizationStatus()' is deprecated :

    https://developer.apple.com/documentation/corelocation/cllocationmanager/1423523-authorizationstatus

    You should use locationManagerDidChangeAuthorization instead:

    func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
    
            switch manager.authorizationStatus {
                case .authorizedAlways , .authorizedWhenInUse:
                    break
                case .notDetermined , .denied , .restricted:
                    break
                default:
                    break
            }
            
            switch manager.accuracyAuthorization {
                case .fullAccuracy:
                    break
                case .reducedAccuracy:
                    break
                default:
                    break
            }
    }