为什么“模拟后台获取”导致崩溃(libsystem_kernel.dylib`mach_msg_trap),因为Xcode 8?

我在macOS Sierra,Xcode 8上,每当我尝试在实际的iOS 10设备上模拟背景提取时就会崩溃。 使用模拟器时不会发生这种情况。 这发生在所有项目中,包括刚刚创建的项目。

libsystem_kernel.dylib`mach_msg_trap: 0x18cfec164 : movn x16, #0x1e 0x18cfec168 : svc #0x80 -> 0x18cfec16c : ret (Thread 1: signal SIGSTOP) 

我没有任何其他iOS设备可供测试; 是其他人经历过这个吗?

你并不孤单 – 我也遇到过这种情况。 真烦人 我刚刚提交了一个错误。

我正在运行带有设备的Xcode 8.1 – 它没有崩溃,但是它遇到了一个你无法找到/编辑/删除的断点。

我转到Debug> Continue,它按预期继续。

正如其他人所指出的那样。 它不是崩溃,而是由系统触发的自动断点。 如eskimo所述:

那么,为什么它会在mach_msg_trap中停止? 目标是让您有机会在后台获取处理代码中设置断点,因此Xcode会强制您的应用停止,就像您点击暂停按钮(Debug> Pause)一样。 它在mach_msg_trap中停止,因为当你的应用程序在后台暂停时,这就是你的主线程所在的位置。 简而言之,当您执行Debug> Simulate Background Fetch并在mach_msg_trap中停止时:

  1. 这是预期的行为
  2. 这不是任何问题的迹象
  3. 您可以通过Debug> Continue安全地继续执行

就个人而言,我认为它更像是一个错误,而不是一个function。

它没有崩溃,有些东西正在发出停止执行应用程序的信号。 在不知道模拟获取是如何发生的情况下,我只能猜测为什么 – 它可能是模拟的一部分或应用程序处理它的方式的副作用。 Xcode用于支持永久禁用信号中断(SIGPIPE总是我的祸根),但现在几个版本都没有用。

目标 – >能力 – >背景模式 – >开启

并检查[音频,AirPlay和画中画]

它对我有用。

我刚刚遇到这个问题,它与从我的后端和一个转换类型中提取数据有关。

如果您不熟悉firebase,请查看最后两行。 如果你是,我在这里修理它。 我的数据看起来像这样

 "Node" : { "SubNode" : { "-KoB8OMIO0PLiTs8fUkJ" : { "ImageName" : "DSC05833-2.jpg", "price" : 100, }, "-KoB8Rh9PtSMaMUlaD91" : { "ImageName" : "DSC05780-2.jpg", "price" : 0, }, 

我的代码拉。

 ref.child("Node").child("SubNode").child(uniqueidID).observeSingleEvent(of: DataEventType.value, with: { (snapshot) in if snapshot.childrenCount > 0 { let jsonPhoto = snapshot.value as? [String: AnyObject] let mageName = jsonPhoto?["ImageName"] as! String photoObj.imagePrice = jsonPhoto?["price"] as! Double //error, Swift didn't catch, just froze my app } }) 

如果值为100 – > Double,它会起作用,然后由于某种原因,当我输出0 – > Double时,firebase失败了

所以我修好了我的表现方式

我原来有这个:

 photoObj.imagePrice = jsonPhoto?["price"] as! Double // caused error 

至..

  photoObj.imagePrice = jsonPhoto?["price"] as? Double ?? 0.00 //fixed error