<!--
{
  "availability" : [
    "iOS: 2.0.0 -",
    "iPadOS: 2.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.6.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreLocation",
  "identifier" : "/documentation/CoreLocation/CLLocationManager",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Core Location"
    ],
    "preciseIdentifier" : "c:objc(cs)CLLocationManager"
  },
  "title" : "CLLocationManager"
}
-->

# CLLocationManager

The object you use to start and stop the delivery of location-related events to your app.

```
class CLLocationManager
```

## Overview

A [`CLLocationManager`](/documentation/CoreLocation/CLLocationManager) object is the central place to manage your app’s location-related behaviors. Use a location-manager object to configure, start, and stop location services. You might use these services to:

- Track large or small changes in the user’s current location with a configurable degree of accuracy.
- Report heading changes from the onboard compass.
- Monitor geographical regions of interest and generate events when someone enters or leaves those regions.
- Report the range to nearby Bluetooth beacons.

Create one or more location-manager objects in your app and use them where you need location data. After you create a location-manager object, configure it so that Core Location knows how often to report location changes. In particular, configure the [`distanceFilter`](/documentation/CoreLocation/CLLocationManager/distanceFilter) and [`desiredAccuracy`](/documentation/CoreLocation/CLLocationManager/desiredAccuracy) properties with values that reflect your app’s needs.

A [`CLLocationManager`](/documentation/CoreLocation/CLLocationManager) object reports all location-related updates to its [`delegate`](/documentation/CoreLocation/CLLocationManager/delegate) object, which is an object that conforms to the [`CLLocationManagerDelegate`](/documentation/CoreLocation/CLLocationManagerDelegate) protocol. Assign the delegate immediately when you configure your location manager, because the system reports the app’s authorization status to the delegate’s [`locationManagerDidChangeAuthorization(_:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManagerDidChangeAuthorization(_:)) method after the location manager finishes initializing itself.  Core Location calls the methods of your delegate object using the <doc://com.apple.documentation/documentation/Foundation/RunLoop> of the thread on which you initialized the [`CLLocationManager`](/documentation/CoreLocation/CLLocationManager) object. That thread must itself have an active <doc://com.apple.documentation/documentation/Foundation/RunLoop>, like the one found in your app’s main thread.

For more information, see [Configuring your app to use location services](/documentation/CoreLocation/configuring-your-app-to-use-location-services).

## Topics

### Determining the availability of services

[`+  significantLocationChangeMonitoringAvailable`](/documentation/CoreLocation/CLLocationManager/significantLocationChangeMonitoringAvailable())

Returns a Boolean value indicating whether the significant-change location service is available on the device.

[`+  headingAvailable`](/documentation/CoreLocation/CLLocationManager/headingAvailable())

Returns a Boolean value indicating whether the location manager is able to generate heading-related events.

[`authorizedForWidgetUpdates`](/documentation/CoreLocation/CLLocationManager/isAuthorizedForWidgetUpdates)

A Boolean value that indicates whether a widget is eligible to receive location updates.

[`accuracyAuthorization`](/documentation/CoreLocation/CLLocationManager/accuracyAuthorization)

A value that indicates the level of location accuracy the app has permission to use.

[`+  isMonitoringAvailableForClass:`](/documentation/CoreLocation/CLLocationManager/isMonitoringAvailable(for:))

Returns a Boolean value indicating whether the device supports region monitoring using the specified class.

[`+  isRangingAvailable`](/documentation/CoreLocation/CLLocationManager/isRangingAvailable())

Returns a Boolean value indicating whether the device supports ranging of beacons that use the iBeacon protocol.

[`+  locationServicesEnabled`](/documentation/CoreLocation/CLLocationManager/locationServicesEnabled())

Returns a Boolean value indicating whether location services are enabled on the device.

### Receiving data from location services

[`delegate`](/documentation/CoreLocation/CLLocationManager/delegate)

The delegate object to receive update events.

[`CLLocationManagerDelegate`](/documentation/CoreLocation/CLLocationManagerDelegate)

The methods you use to receive events from an associated location-manager object.

### Requesting authorization for location services

[`-  requestWhenInUseAuthorization`](/documentation/CoreLocation/CLLocationManager/requestWhenInUseAuthorization())

Requests the user’s permission to use location services while the app is in use.

[`-  requestAlwaysAuthorization`](/documentation/CoreLocation/CLLocationManager/requestAlwaysAuthorization())

Requests the user’s permission to use location services regardless of whether the app is in use.

[`-  requestTemporaryFullAccuracyAuthorizationWithPurposeKey:completion:`](/documentation/CoreLocation/CLLocationManager/requestTemporaryFullAccuracyAuthorization(withPurposeKey:completion:))

Requests permission to temporarily use location services with full accuracy and reports the results to the provided completion handler.

[`-  requestTemporaryFullAccuracyAuthorizationWithPurposeKey:`](/documentation/CoreLocation/CLLocationManager/requestTemporaryFullAccuracyAuthorization(withPurposeKey:))

Requests permission to temporarily use location services with full accuracy.

[`authorizationStatus`](/documentation/CoreLocation/CLLocationManager/authorizationStatus-swift.property)

The current authorization status for the app.

[`CLAuthorizationStatus`](/documentation/CoreLocation/CLAuthorizationStatus)

Constants that indicate the app’s authorization to use location services.

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/NSLocationDefaultAccuracyReduced>

  <doc://com.apple.documentation/documentation/BundleResources/Information-Property-List/NSLocationAlwaysAndWhenInUseUsageDescription>

### Specifying distance and accuracy

[`distanceFilter`](/documentation/CoreLocation/CLLocationManager/distanceFilter)

The minimum distance in meters the device must move horizontally before an update event is generated.

[`CLLocationDistanceMax`](/documentation/CoreLocation/CLLocationDistanceMax)

A constant indicating the maximum distance.

[`kCLDistanceFilterNone`](/documentation/CoreLocation/kCLDistanceFilterNone)

A constant indicating that all movement should be reported.

[`CLLocationDistance`](/documentation/CoreLocation/CLLocationDistance)

A distance in meters from an existing location.

[`desiredAccuracy`](/documentation/CoreLocation/CLLocationManager/desiredAccuracy)

The accuracy of the location data that your app wants to receive.

[`CLLocationAccuracy`](/documentation/CoreLocation/CLLocationAccuracy)

The accuracy of a geographical coordinate.

### Running the standard location service

[`-  startUpdatingLocation`](/documentation/CoreLocation/CLLocationManager/startUpdatingLocation())

Starts the generation of updates that report the user’s current location.

[`-  stopUpdatingLocation`](/documentation/CoreLocation/CLLocationManager/stopUpdatingLocation())

Stops the generation of location updates.

[`-  requestLocation`](/documentation/CoreLocation/CLLocationManager/requestLocation())

Requests the one-time delivery of the user’s current location.

[`pausesLocationUpdatesAutomatically`](/documentation/CoreLocation/CLLocationManager/pausesLocationUpdatesAutomatically)

A Boolean value that indicates whether the location-manager object may pause location updates.

[`allowsBackgroundLocationUpdates`](/documentation/CoreLocation/CLLocationManager/allowsBackgroundLocationUpdates)

A Boolean value that indicates whether the app receives location updates when running in the background.

[`showsBackgroundLocationIndicator`](/documentation/CoreLocation/CLLocationManager/showsBackgroundLocationIndicator)

A Boolean value that indicates whether the status bar changes its appearance when an app uses location services in the background.

[`activityType`](/documentation/CoreLocation/CLLocationManager/activityType)

The type of activity the app expects the user to typically perform while in the app’s location session.

[`CLActivityType`](/documentation/CoreLocation/CLActivityType)

Constants that indicate the type of activity associated with location updates.

### Running the significant change location service

[`-  startMonitoringSignificantLocationChanges`](/documentation/CoreLocation/CLLocationManager/startMonitoringSignificantLocationChanges())

Starts the generation of updates based on significant location changes.

[`-  stopMonitoringSignificantLocationChanges`](/documentation/CoreLocation/CLLocationManager/stopMonitoringSignificantLocationChanges())

Stops the delivery of location events based on significant location changes.

### Running the visits location service

[`-  startMonitoringVisits`](/documentation/CoreLocation/CLLocationManager/startMonitoringVisits())

Starts the delivery of visit-related events.

[`-  stopMonitoringVisits`](/documentation/CoreLocation/CLLocationManager/stopMonitoringVisits())

Stops the delivery of visit-related events.

### Running the heading service

[`-  startUpdatingHeading`](/documentation/CoreLocation/CLLocationManager/startUpdatingHeading())

Starts the generation of updates that report the user’s current heading.

[`-  stopUpdatingHeading`](/documentation/CoreLocation/CLLocationManager/stopUpdatingHeading())

Stops the generation of heading updates.

[`-  dismissHeadingCalibrationDisplay`](/documentation/CoreLocation/CLLocationManager/dismissHeadingCalibrationDisplay())

Dismisses the heading calibration view from the screen immediately.

[`headingFilter`](/documentation/CoreLocation/CLLocationManager/headingFilter)

The minimum angular change in degrees required to generate new heading events.

[`kCLHeadingFilterNone`](/documentation/CoreLocation/kCLHeadingFilterNone)

A constant indicating that all header values should be reported.

[`CLLocationDegrees`](/documentation/CoreLocation/CLLocationDegrees)

A latitude or longitude value specified in degrees.

[`headingOrientation`](/documentation/CoreLocation/CLLocationManager/headingOrientation)

The device orientation to use when computing heading values.

[`CLDeviceOrientation`](/documentation/CoreLocation/CLDeviceOrientation)

Constants indicating the physical orientation of the device.

### Running the region-monitoring service

[`monitoredRegions`](/documentation/CoreLocation/CLLocationManager/monitoredRegions)

The set of shared regions monitored by all location-manager objects.

[`maximumRegionMonitoringDistance`](/documentation/CoreLocation/CLLocationManager/maximumRegionMonitoringDistance)

The largest boundary distance that can be assigned to a region.

### Performing beacon ranging

[`-  startRangingBeaconsSatisfyingConstraint:`](/documentation/CoreLocation/CLLocationManager/startRangingBeacons(satisfying:))

Starts the delivery of notifications for the specified beacon constraints.

[`-  stopRangingBeaconsSatisfyingConstraint:`](/documentation/CoreLocation/CLLocationManager/stopRangingBeacons(satisfying:))

Stops the delivery of notifications for the specified beacon constraints.

[`rangedBeaconConstraints`](/documentation/CoreLocation/CLLocationManager/rangedBeaconConstraints)

The set of beacon constraints currently being tracked using ranging.

### Monitoring location push notifications

[`-  startMonitoringLocationPushesWithCompletion:`](/documentation/CoreLocation/CLLocationManager/startMonitoringLocationPushes(completion:))

Starts monitoring for the delivery of Apple Push Notification service (APNs) location pushes, and provides a device-specific token for sending pushes.

[`-  stopMonitoringLocationPushes`](/documentation/CoreLocation/CLLocationManager/stopMonitoringLocationPushes())

Stops monitoring for Apple Push Notification service (APNs) location pushes.

### Getting recent location and heading data

[`location`](/documentation/CoreLocation/CLLocationManager/location)

The most recently retrieved user location.

[`heading`](/documentation/CoreLocation/CLLocationManager/heading)

The most recently reported heading.

### Deferring location updates

[`CLTimeIntervalMax`](/documentation/CoreLocation/CLTimeIntervalMax)

A value representing an unlimited amount of time.

### Deprecated

[Deprecated symbols](/documentation/CoreLocation/deprecated-symbols)

Review unsupported symbols and their replacements.

### Instance Methods

[`-  requestHistoricalLocationsWithPurposeKey:sampleCount:completionHandler:`](/documentation/CoreLocation/CLLocationManager/requestHistoricalLocations(purposeKey:sampleCount:completionHandler:))

## Relationships

### Conforms To

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`CVarArg`](/documentation/Swift/CVarArg)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

[`Hashable`](/documentation/Swift/Hashable)

[`Equatable`](/documentation/Swift/Equatable)

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)