Ios 为什么是';模拟背景提取';从Xcode 8开始导致崩溃(libsystem_kernel.dylib`mach_msg_trap)?

Ios 为什么是';模拟背景提取';从Xcode 8开始导致崩溃(libsystem_kernel.dylib`mach_msg_trap)?,ios,xcode8,Ios,Xcode8,我使用的是macOS Sierra,Xcode 8,每当我试图在实际的iOS 10设备上模拟后台抓取时就会崩溃。使用模拟器时不会发生这种情况。这发生在所有项目中,包括新创建的项目 libsystem_kernel.dylib`mach_msg_trap: 0x18cfec164 <+0>: movn x16, #0x1e 0x18cfec168 <+4>: svc #0x80 -> 0x18cfec16c <+8>:

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

    libsystem_kernel.dylib`mach_msg_trap:
    0x18cfec164 <+0>: movn   x16, #0x1e
    0x18cfec168 <+4>: svc    #0x80
->  0x18cfec16c <+8>: ret   (Thread 1: signal SIGSTOP)
libsystem\u kernel.dylib`mach\u msg\u陷阱:
0x18cfec164:movn x16,#0x1e
0x18cfec168:svc#0x80
->0x18cfec16c:ret(线程1:信号SIGSTOP)

我没有任何其他iOS设备可供测试;还有其他人经历过这种情况吗?

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

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

我进入Debug>Continue,它按预期进行

目标->间隙->背景模式->打开

并检查[音频、播放和画中画]


它对我起了作用。

它没有崩溃,有东西发出了暂停应用程序执行的信号。在不知道模拟抓取是如何发生的情况下,我只能猜测原因——这可能是模拟的一部分,也可能是应用程序处理方式的副作用。Xcode过去支持永久禁用信号中断(SIGPIPE一直是我的祸根),但现在已经有好几个版本无法使用了。

我刚刚遇到了这个问题,它与从后端提取数据和强制类型有关

如果您不熟悉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


正如其他人指出的那样。它不是崩溃,而是由系统触发的自动断点。正如爱斯基摩人所解释的:

那么,为什么它会停在mach_msg_陷阱中?目标是给你一个 在后台获取处理代码中设置断点的机会,因此 Xcode强制你的应用程序停止,就像你点击暂停按钮一样 按钮(调试>暂停)。它停在mach_msg_陷阱中,因为这是 应用程序挂起时主线程所在的位置 背景。简而言之,当您执行调试>模拟后台提取时 然后停在mach_msg_陷阱中:

  • 这是意料之中的行为
  • 这不是任何问题的迹象
  • 您可以通过调试>继续安全地继续执行

  • 就我个人而言,我认为它更像是一个bug,而不是一个特性。

    在我的例子中,xcode只是在该点暂停执行。我注意到,如果你告诉它继续执行,后台提取确实是模拟的。这很好。By radar最近也被标记为复制品,所以至少我们知道苹果意识到了这个问题。@user3034715是对的,看起来这不是一个bug,但苹果改变了xcode的工作方式,只需在xcode 8.0上点击播放按钮就可以解决这个问题。你有一个openradar我可以复制吗?我也在8.2.1中看到了这一点。继续之后,它看起来很好,有人确定这是否应该被忽略吗?没有,在xcode 8.1中仍然是borken,我们知道这不会在生产中发生吗它只是一个调试器吗?对我来说,它不会发生在prod中,如果它是一个断点,这是有意义的
     photoObj.imagePrice = jsonPhoto?["price"] as? Double ?? 0.00 //fixed error