错误:iOS9 中的 _handleNonLaunchSpecificActions

Posted

技术标签:

【中文标题】错误:iOS9 中的 _handleNonLaunchSpecificActions【英文标题】:Error: _handleNonLaunchSpecificActions in iOS9 【发布时间】:2015-11-27 10:13:46 【问题描述】:

我在 ios 9 上收到以下错误:

    -[UIApplication_handleNonLaunchSpecificActions:
      forScene:
      withTransitionContext:
      completion:] unhandled action -> 
      <FBSSceneSnapshotAction: 0x150b2aef0> 
       
            handler          = remote;
            info = <BSSettings: 0x15333f650> 
            
                (1) = 5;
            ;
        

有没有其他人遇到过这个错误或它的含义?怎么了?

【问题讨论】:

仍处于 iOS9 后 beta 版本中。了解问题所在及其影响会很好。 在我的应用程序运行时锁定我的 iPhone 时,我遇到了同样的问题。 iOS 9.0,XCode 7.0。 这似乎是 Apple 的错误,因为使用 Xcode 7 创建的全新项目也存在这个问题。 Apple 开发者论坛上讨论过什么有价值的东西吗?似乎任何类型的错误都会被“如果Apple不想让你这样做,你为什么要这样做?”而被关闭。是寻求解决问题时绝望的最后一站。 参考问题***.com/questions/32658037/… - 这讨论了同样的问题。 【参考方案1】:

您的代码没有任何问题。这是 Apple 内部的一条日志消息,您应该提交有关它的雷达。

有两个提示表明这是可能苹果的代码:

    方法名称前的下划线_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion 是一个约定,表示该方法是私有的/在其声明的类中是内部的。(参见this comment。)

    有理由猜测FBSSceneSnapshotAction 中的两个字母前缀是 FrontBoard 的简写,根据 Rene Ritchie 在“iOS 9 wish-list: Guest Mode" 是与启动应用程序相关的整个软件系列的一部分:

在 iOS 8 中,Apple 将其系统管理器 SpringBoard 重构为几个更小、更集中的组件。除了已经分拆来处理后台任务的 BackBoard 之外,他们还为前台任务添加了 Frontboard。他们还添加了 PreBoard 以在安全、加密的条件下处理锁定屏幕。 [...]

我不知道BSSettings 中的BS 前缀是做什么用的,但是对此日志消息的分析表明这不是您所做的任何事情,您应该向雷达提交重现日志消息的步骤。

如果你想尝试获取堆栈跟踪,你可以实现the category linked to here。有些人会争辩说,覆盖私有 API 是个坏主意,但在这种情况下,临时注入来获取堆栈跟踪不会太有害。

编辑:

但是,我们仍然想知道这个动作是什么。所以我在-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion] 上设置了一个断点并开始打印寄存器值,并找到了一个名为FBSceneImpl 的类,其中包含有关我的应用程序的大量信息:

我们能够找出接下来调用哪个私有方法(存储在程序计数器,寄存器 15 中。)

我试图找到日志中引用的未处理的FBSceneSnapshotAction,但没有骰子。然后,我继承了 UIApplication,并覆盖了_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion。现在我能够直接了解动作,但我们仍然不知道它是什么。

然后,我再次查看了 FBSceneSnapshotAction。原来它有一个名为BSAction 的超类。

然后我写了类似于RuntimeBrowser 的a tool 并查找了BSAction 的所有子类。事实证明,它们的列表相当多:

我们拥有的两个方法名称(一个来自日志,一个来自设备上的程序计数器)表明这些操作在后台用于在系统中传递操作。

一些操作可能会发送到应用代理的回调,而其他操作则在内部处理。

这里发生的情况是有一个操作未正确处理,系统正在记录它。显然,我们不应该看到它。

【讨论】:

抱歉,这不是一个真正的答案;更多以下评论。该代码很大程度上是Apple的内部错误,这是没有问题的。猜测并不是真正的解决方案,并且提供的 iOS8 解释不相关,因为该错误仅出现在 iOS9 中(这在 iOS8 中不会发生)。 “出了什么问题”的答案是 SpringBoard 内部的某些东西没有处理快照操作。这就是日志消息所说的。 Apple 以外的任何人都无法告诉您。 这个日志消息没有出现在 iOS 8 上的事实并不真正相关。这是一条应使用雷达归档的杂散记录消息。 我今天早上确实注意到有人更新了我的问题,这不是我最初提出的问题,这就是为什么会有一点脱节。甚至不知道其他人可以更新问题。 回答您的原始问题:除了请提交雷达之外没有其他任何影响。

以上是关于错误:iOS9 中的 _handleNonLaunchSpecificActions的主要内容,如果未能解决你的问题,请参考以下文章

ios9 Safari错误计算总和

总结iOS9中的新的方法

iOS 9 中的 autoreleasePool 有啥不同?

iOS9 PayPal SDK - “发生 SSL 错误......”

NSURLSession 的 IOS9 SSL 错误

代码签名错误,iOS9 [重复]