CMMotionActivityManager reports inaccurate motion activity in iOS 16.4 Beta

Our App has a feature that needs to determine if the phone was stationary during the last 10 seconds. For the past several years, we have been using CMMotionActivityManager for this feature and it has worked very reliably. We query motion activity for the past 10 seconds (using queryActivityStarting(from:to:to:) method) and check for any events where the stationary property is false.

However, the behavior of CMMotionActivityManager has changed in iOS 16.4 Beta: CMMotionActivityManager no longer reports motion as it did on iOS 16.3 and earlier versions. With iOS 16.4 Beta, CMMotionActivityManager will falsely return events where the stationary property is true (or return no events) even though the phone was in motion during the query interval.

There are times when it does return motion events correctly, but that only happens if the phone is in constant motion for a sustained period of time. This behavior is drastically different from previous iOS versions where even the slightest bit of movement would generate motion events.

i'm really hoping this is an issue in the beta and will be sorted out soon.

Feedback Filed: FB12005598

Post not yet marked as solved Up vote post of nokey4 Down vote post of nokey4
1.1k views

Replies

Did you get any feedback on this?

I am seeing similar strangeness with CoreMotion that I do not recognize from before. We have also been relying heavily on the sensitive motion detection in CoreMotion for the functionality of our app.

I am still investigating and have limited access to phones but two thing I have not noticed before are that:

  1. While my iPhone 11 behaves as always, the iPhone 12 Pro never reports any motion events with confidence level 1
  2. It takes forever to detect walking on the 12 Pro. While my iPhone 11 only requires a couple of steps, the 12 Pro now requires me to walk for several minutes to detect walking.

Unfortunately, the changes you are seeing are permanent. We had no choice but to remove the feature that relied on CoreMotion from our Apps.