Ios CoreMotion的主线程检测器警告,仅出现在2018款iPhone上

Ios CoreMotion的主线程检测器警告,仅出现在2018款iPhone上,ios,iphone,xcode,core-motion,Ios,Iphone,Xcode,Core Motion,以下是该问题的一个极其简化的版本: import UIKit import CoreMotion class ViewController: UIViewController { private let manager = CMMotionManager() private let interval = 0.01 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(

以下是该问题的一个极其简化的版本:

import UIKit
import CoreMotion

class ViewController: UIViewController {
    private let manager = CMMotionManager()
    private let interval = 0.01

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        startUpdates()
    }

    private func startUpdates() {
        let queue = OperationQueue()
        queue.name = "com.demo.motion"
        queue.qualityOfService = .userInteractive
        queue.maxConcurrentOperationCount = 1
        manager.accelerometerUpdateInterval = interval
        manager.startAccelerometerUpdates(to: queue) { _, _ in }
    }
}
当我在iPhone XR上运行此功能时,我将收到以下信息:

主线程检查器:在后台线程上调用的UI API: -[UIApplication applicationState]PID:1237,TID:147763,线程名称:com.apple.CoreMotion.MotionThread,队列名称: com.apple.root.default-qos.overmit,qos:0

  • 我的设备正在运行最新的iOS版本12.3
  • 在各种iPad(2018年之前)、iPhone8、iPhone6S和其他较旧型号上运行此功能,问题并未出现
  • 更改
    服务质量
    对此没有影响(我的首选是使用
    实用程序
  • 出于好奇,我将整个
    startUpdates()
    函数包装在一个主调度中,但没有成功
基于队列名称以及发生这种情况时,我的假设是,与旧设备相比,这是XR中更快的处理器刚刚暴露的内部内容

使用iOS 13时的新答案

我刚刚在2018年的设备上测试了新发布的iOS 13版本(17A577),它不再产生线程错误

使用iOS 12时的上一个答案
这是一个已报告给的已知问题。

我遇到了相同的问题,并将方案更改为暂停处理主线程检查器问题。它在一个黑屏上暂停,显示了主线程检查器的返回地址。嗨,你能用这个问题运行单元测试吗?在我的例子中,测试失败就是因为这个原因。