[iOS 26] CLHeading's magneticHeading and trueHeading return travel direction instead of device orientation when user is in motion

Problem Description

I am using CLLocationManager to obtain the device's compass heading (direction), and I have encountered an abnormal behavior:

When the user is stationary: After calling startUpdatingHeading(), the CLHeading object returned in the locationManager(_:didUpdateHeading:) callback correctly reflects the device’s actual physical orientation (i.e., the direction the top of the device is pointing) in terms of magnetic north / true north, via the magneticHeading and trueHeading properties. When I rotate the device, the heading values change accordingly — this is the expected behavior.

But when the user is in motion (e.g., driving a car): Even if I rotate the device, the values of magneticHeading and trueHeading no longer reflect the device’s actual orientation. Instead, they consistently return what appears to be the user's or vehicle's travel direction (forward direction). In other words, the compass behaves as if it is reporting the direction of motion rather than the device’s actual facing direction.

Only after the user has completely stopped moving, does rotating the device again result in magneticHeading and trueHeading reflecting the actual device orientation as expected.

However, on another device running iOS 16 (iPhone XR), this behavior does not occur — everything works normally.

Expected Behavior

I expect that regardless of whether the user is moving or not, the CLHeading values returned by CLLocationManager should always represent the physical orientation of the device itself (i.e., which direction the top of the device is pointing), as a standard compass should.

Actual Behavior

User is stationary, rotating the device: magneticHeading / trueHeading change properly according to the device’s actual orientation User is in motion (e.g., driving):magneticHeading / trueHeading remain fixed to the direction of motion (travel direction), and do not change when the device is rotated User stops moving, then rotates the device:Compass behaves normally again, reflecting the actual device orientation

Environment Information

iOS Version: iOS 26.0.1 Device Models: iPhone 15 Pro / iPhone 17 Pro Xcode Version: Xcode 26.0.1 Language: Objective-C

Questions

  1. Is this a known issue in iOS? Are there any related radars or official documentation about it?
  2. Have other developers encountered similar issues, especially where CLHeading behaves incorrectly when the user is in motion?
  3. Do I need to set any specific parameters in CLLocationManager (such as headingOrientation) to resolve or work around this issue?

🙏 Thank you for your help — any insights, experiences, or official feedback regarding this issue would be greatly appreciated!

[iOS 26] CLHeading's magneticHeading and trueHeading return travel direction instead of device orientation when user is in motion
 
 
Q