Ios CMotionManager在实例化时崩溃

Ios CMotionManager在实例化时崩溃,ios,swift,core-motion,ios12,Ios,Swift,Core Motion,Ios12,编辑:这似乎在iOS 13上得到了解决。保留以下所有原始细节 我在为核心运动实例化CMMotionManager对象时遇到崩溃。这是在运行iOS 12.0.1的iPhone Xs上实现的 我可以用一个视图应用程序,用下面的视图控制器,可靠地再现这一点 import UIKit import CoreMotion class ViewController: UIViewController { var motion: CMMotionManager? override func

编辑:这似乎在iOS 13上得到了解决。保留以下所有原始细节

我在为核心运动实例化CMMotionManager对象时遇到崩溃。这是在运行iOS 12.0.1的iPhone Xs上实现的

我可以用一个视图应用程序,用下面的视图控制器,可靠地再现这一点

import UIKit
import CoreMotion

class ViewController: UIViewController {
    var motion: CMMotionManager?
    override func viewDidLoad() {
        super.viewDidLoad()

        // This causes a crash on iPhone Xs, iOS 12.0.1
        self.motion = CMMotionManager()
    }
}
完整样本项目位于

当运行上面的程序时,我在调试器中得到了一个带有以下输出的线程上的错误

=================================================================
Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: 3634, TID: 630341, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4   libobjc.A.dylib                     0x000000019b0d3894 <redacted> + 56
5   CoreMotion                          0x00000001a19337a4 CoreMotion + 305060
6   CoreMotion                          0x00000001a1933cd8 CoreMotion + 306392
7   CoreMotion                          0x00000001a1933be8 CoreMotion + 306152
8   CoreMotion                          0x00000001a19653cc CoreMotion + 508876
9   CoreMotion                          0x00000001a196542c CoreMotion + 508972
10  CoreFoundation                      0x000000019be6c888 <redacted> + 28
11  CoreFoundation                      0x000000019be6c16c <redacted> + 276
12  CoreFoundation                      0x000000019be67470 <redacted> + 2324
13  CoreFoundation                      0x000000019be66844 CFRunLoopRunSpecific + 452
14  CoreFoundation                      0x000000019be675a8 CFRunLoopRun + 84
15  CoreMotion                          0x00000001a1964d64 CoreMotion + 507236
16  libsystem_pthread.dylib             0x000000019bae1a04 <redacted> + 132
17  libsystem_pthread.dylib             0x000000019bae1960 _pthread_start + 52
18  libsystem_pthread.dylib             0x000000019bae9df4 thread_start + 4
2018-10-24 16:19:31.423680-0700 motiontest[3634:630341] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication applicationState]
PID: 3634, TID: 630341, Thread name: com.apple.CoreMotion.MotionThread, Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4   libobjc.A.dylib                     0x000000019b0d3894 <redacted> + 56
5   CoreMotion                          0x00000001a19337a4 CoreMotion + 305060
6   CoreMotion                          0x00000001a1933cd8 CoreMotion + 306392
7   CoreMotion                          0x00000001a1933be8 CoreMotion + 306152
8   CoreMotion                          0x00000001a19653cc CoreMotion + 508876
9   CoreMotion                          0x00000001a196542c CoreMotion + 508972
10  CoreFoundation                      0x000000019be6c888 <redacted> + 28
11  CoreFoundation                      0x000000019be6c16c <redacted> + 276
12  CoreFoundation                      0x000000019be67470 <redacted> + 2324
13  CoreFoundation                      0x000000019be66844 CFRunLoopRunSpecific + 452
14  CoreFoundation                      0x000000019be675a8 CFRunLoopRun + 84
15  CoreMotion                          0x00000001a1964d64 CoreMotion + 507236
16  libsystem_pthread.dylib             0x000000019bae1a04 <redacted> + 132
17  libsystem_pthread.dylib             0x000000019bae1960 _pthread_start + 52
18  libsystem_pthread.dylib             0x000000019bae9df4 thread_start + 4
(lldb) 
=================================================================
主线程检查器:在后台线程上调用的UI API:-[UIApplication applicationState]
PID:3634,TID:630341,线程名称:com.apple.CoreMotion.MotionThread,队列名称:com.apple.root.default-qos.overmit,qos:0
回溯:
4 libobjc.A.dylib 0x000000019b0d3894+56
5 CoreMotion 0x00000001a19337a4 CoreMotion+305060
6 CoreMotion 0x00000001a1933cd8 CoreMotion+306392
7 CoreMotion 0x00000001a1933be8 CoreMotion+306152
8 CoreMotion 0x00000001a19653cc CoreMotion+508876
9 CoreMotion 0x00000001a196542c CoreMotion+508972
10芯基础0x000000019be6c888+28
11核心基础0x000000019be6c16c+276
12 CoreFoundation 0x000000019be67470+2324
13 CoreFoundation 0x000000019be66844 CFRunLoopRunSpecific+452
14 CoreFoundation 0x000000019be675a8 CFRunLoopRun+84
15 CoreMotion 0x00000001a1964d64 CoreMotion+507236
16 libsystem_pthread.dylib 0x000000019bae1a04+132
17 libsystem_pthread.dylib 0x000000019bae1960_pthread_start+52
18 libsystem_pthread.dylib 0x000000019bae9df4 thread_start+4
2018-10-24 16:19:31.423680-0700运动测试[3634:630341][报告]主线程检查程序:在后台线程上调用的UI API:-[UIApplication applicationState]
PID:3634,TID:630341,线程名称:com.apple.CoreMotion.MotionThread,队列名称:com.apple.root.default-qos.overmit,qos:0
回溯:
4 libobjc.A.dylib 0x000000019b0d3894+56
5 CoreMotion 0x00000001a19337a4 CoreMotion+305060
6 CoreMotion 0x00000001a1933cd8 CoreMotion+306392
7 CoreMotion 0x00000001a1933be8 CoreMotion+306152
8 CoreMotion 0x00000001a19653cc CoreMotion+508876
9 CoreMotion 0x00000001a196542c CoreMotion+508972
10芯基础0x000000019be6c888+28
11核心基础0x000000019be6c16c+276
12 CoreFoundation 0x000000019be67470+2324
13 CoreFoundation 0x000000019be66844 CFRunLoopRunSpecific+452
14 CoreFoundation 0x000000019be675a8 CFRunLoopRun+84
15 CoreMotion 0x00000001a1964d64 CoreMotion+507236
16 libsystem_pthread.dylib 0x000000019bae1a04+132
17 libsystem_pthread.dylib 0x000000019bae1960_pthread_start+52
18 libsystem_pthread.dylib 0x000000019bae9df4 thread_start+4
(lldb)

以前是否有人遇到过这种情况,或者对如何解决崩溃有什么想法?

我对CoreMotion了解不多,但错误消息告诉您正在尝试在后台线程上调用UI操作。尝试将代码放入:

DispatchQueue.main.async {
    //your code here
}

您似乎还试图在
viewDidLoad()
中执行与UI相关的操作。从技术上讲,这很好,但请记住,某些视图在当时可能没有显示出来。

好吧,我已经测试了你的应用程序,包括物理iPhone 6SiPhone 7——显然是在iOS 12.0.1上。我还检查了您项目中的一些内容,根本无法重现您的问题-甚至在模拟器中也无法重现-我认为不可能下载具有特定修复(12.0.x)的模拟器,只需进行少量版本更新-因此12.1是下一个版本。这在iPhoneXS硬件上看起来非常具体,我建议您用以下内容来填充一个问题


编辑:我看到你已经在openradar上填写了一份bug报告。甚至引用了openradar mirror上的bug报告状态

,我希望这能像调出主线程的恶意UI一样简单:-p。无论是否在DispatchQueue.main.async块中,都会发生相同的错误。示例应用程序除了在视图控制器上调用viewDidLoad外,没有其他UI操作。显然,他没有在viewDidLoad中执行任何与UI相关的操作,只是实例化了一个CMMotionManager。您的意思是无法在其他设备上重现此问题吗?而且只能在XR上复制?在其他人的帮助下,我发现它可以在iPhone X和Xs上复制,但不能在iPhone SE、6S、7或iPad上复制(2017年)。这可能意味着它只适用于使用A11芯片或更高版本的设备。这是针对X系列iPhone的。我在Xs Max上遇到了相同的错误,在任何其他设备上都没有任何问题。即使核心运动的实例化在DispatchQueue.main.async块内,也会发生这种情况。这看起来像是一个苹果的bug。这个bug仍然存在于iPhone XS iOS12.1.2测试版上。我仍然在iPhone XR上看到这个运行iOS12.3.1的行为很奇怪。如果我在调试模式下启动应用程序,堆栈轨迹将显示为发生了崩溃,但应用程序继续运行,没有任何问题。但是,如果我运行UI测试,相同的CoreMotion事件会触发相同的堆栈跟踪,并合法地使应用程序崩溃,从而阻止测试运行。感谢您检查这两个设备。我还可以确认iPhone SE和iPad(2017款)都不错。然而,iPhoneX和Xs是d