<!--
{
  "availability" : [
    "iOS: 3.0.0 -",
    "iPadOS: 3.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.15.0 -",
    "watchOS: 2.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreLocation",
  "identifier" : "/documentation/CoreLocation/CLLocationManager/startUpdatingHeading()",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "Core Location"
    ],
    "preciseIdentifier" : "c:objc(cs)CLLocationManager(im)startUpdatingHeading"
  },
  "title" : "startUpdatingHeading()"
}
-->

# startUpdatingHeading()

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

```
func startUpdatingHeading()
```

## Discussion

This method returns immediately. Calling this method when the receiver is stopped causes it to obtain an initial heading and notify your delegate. After that, the receiver generates update events when the value in the [`headingFilter`](/documentation/CoreLocation/CLLocationManager/headingFilter) property is exceeded.

Before calling this method, you should always check the [`headingAvailable`](/documentation/CoreLocation/CLLocationManager/headingAvailable-swift.property) property to see whether heading information is supported on the current device. If heading information is not supported, calling this method has no effect and does not result in the delivery of events to your delegate.

Calling this method several times in succession does not automatically result in new events being generated. Calling [`stopUpdatingHeading()`](/documentation/CoreLocation/CLLocationManager/stopUpdatingHeading()) in between, however, does cause a new initial event to be sent the next time you call this method.

If you start this service and your app is suspended, the system stops the delivery of events until your app starts running again (either in the foreground or background). If your app is terminated, the delivery of new heading events stops altogether and must be restarted by your code when the app is relaunched.

Heading events are delivered to the [`locationManager(_:didUpdateHeading:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didUpdateHeading:)) method of your delegate. If there is an error, the location manager calls the [`locationManager(_:didFailWithError:)`](/documentation/CoreLocation/CLLocationManagerDelegate/locationManager(_:didFailWithError:)) method of your delegate instead.

If a compatible iPad or iPhone app calls this method when running in visionOS, the method does nothing.

## Topics

### Related Documentation

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

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



---

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)