<!--
{
  "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.

[`isAuthorizedForWidgetUpdates`](/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.

[`isMonitoringAvailable(for:)`](/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.

[`requestTemporaryFullAccuracyAuthorization(withPurposeKey: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.

[`requestTemporaryFullAccuracyAuthorization(withPurposeKey:)`](/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

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

Starts the delivery of notifications for the specified beacon constraints.

[`stopRangingBeacons(satisfying:)`](/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

[`startMonitoringLocationPushes(completion:)`](/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

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



---

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)