Search code examples
iosswiftxcodelocation

Check if location services are enabled


I've been doing some research about CoreLocation. Recently, I encountered a problem that has been covered elsewhere, but in Objective C, and for iOS 8.

I feel kinda silly asking this, but how can you check if location services are enabled using swift, on iOS 9?

On iOS 7 (and maybe 8?) you could use locationServicesEnabled(), but that doesn't appear to be working when compiling for iOS 9.

So how would I accomplish this?

Thanks!


Solution

  • Add the CLLocationManagerDelegate to your class inheritance and then you can make this check:

    Import CoreLocation Framework

    import CoreLocation
    

    Swift 1.x - 2.x version:

    if CLLocationManager.locationServicesEnabled() {
        switch CLLocationManager.authorizationStatus() {
        case .NotDetermined, .Restricted, .Denied:
            print("No access")
        case .AuthorizedAlways, .AuthorizedWhenInUse:
            print("Access")
        }
    } else {
        print("Location services are not enabled")
    }
    

    Swift 4.x version:

    if CLLocationManager.locationServicesEnabled() {
         switch CLLocationManager.authorizationStatus() {
            case .notDetermined, .restricted, .denied:
                print("No access")
            case .authorizedAlways, .authorizedWhenInUse:
                print("Access")
         }
    } else {
        print("Location services are not enabled")
    }
    

    Swift 5.1 version

    if CLLocationManager.locationServicesEnabled() {
        switch CLLocationManager.authorizationStatus() {
            case .notDetermined, .restricted, .denied:
                print("No access")
            case .authorizedAlways, .authorizedWhenInUse:
                print("Access")
            @unknown default:
                break
        }
    } else {
        print("Location services are not enabled")
    }
    

    iOS 14.x

    In iOS 14 you will get the following error message: authorizationStatus() was deprecated in iOS 14.0

    To solve this, use the following:
    private let locationManager = CLLocationManager()
    
    if CLLocationManager.locationServicesEnabled() {
        switch locationManager.authorizationStatus {
            case .notDetermined, .restricted, .denied:
                print("No access")
            case .authorizedAlways, .authorizedWhenInUse:
                print("Access")
            @unknown default:
                break
        }
    } else {
        print("Location services are not enabled")
    }