错误:iOS9中的_handleNonLaunchSpecificActions


157

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

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

还有其他人遇到此错误或其含义吗?怎么了?


6
仍在iOS9 beta版中。了解问题所在及其含义将是很好的。
罗迪2015年

11
我在运行应用程序时锁定iPhone时遇到相同的问题。iOS 9.0,XCode 7.0。
NKorotkov

5
这似乎是Apple的错误,因为使用Xcode 7创建的全新项目也存在此确切问题。
鸿飞2015年

12
在Apple开发人员论坛上是否讨论过任何优点?似乎任何类型的错误都被“ Apple不想让您这么做的原因”关闭了。是寻求解决问题时绝望的最后一站。
罗迪2015年

11
请参阅问题stackoverflow.com/questions/32658037/…-讨论了相同的问题。
iPhone Guy 2015年

Answers:


10

您的代码没有错。这是Apple内部的一条日志消息,您应该对此进行归档。

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

  1. 方法名称前的下划线_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion是一个约定,表示该方法在声明其的类中是私有的/内部的。(请参阅此注释。)

  2. 可以合理地猜测其中的两个字母前缀FBSSceneSnapshotAction是FrontBoard的简写,据Rene Ritchie在“ iOS 9愿望清单:访客模式”中所说,它是与启动应用程序有关的整个软件家族的一部分:

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

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

如果要尝试获取堆栈跟踪,可以实现链接到here的类别。有人会争辩说,重写私有API是一个坏主意,但是在这种情况下,临时注入来获取堆栈跟踪不会太有害。

编辑:

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

现场

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

程序计数器

我尝试FBSceneSnapshotAction在日志中找到未处理的引用,但没有骰子。然后,我将UIApplication子类化,并覆盖_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion。现在我可以直接采取行动了,但是,我们仍然不知道这是什么。

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

然后,我编写了一个类似于RuntimeBrowser 的工具,并查询了BSAction的所有子类。事实证明,其中有很多列表:

行动清单

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

有些动作可能会发送到应用程序委托的回调中,而其他动作则在内部处理。

这里发生的是,有一个动作未正确处理,系统已注意到该动作。显然,我们不应该看到它。


对不起,但这并不是真正的答案。更多以下评论。该代码很大程度上是Apple的内部错误,这不是问题。猜测不是真正的解决方案,并且提供的iOS8说明不相关,因为错误仅出现在iOS9中(在iOS8中不会发生)。
Roddy's

2
对“什么是错”的答案是,SpringBoard内部的某些内容尚未处理快照操作。这就是日志消息所说的。苹果之外的人几乎没有其他可以告诉您的。
Moshe

但是,此日志记录消息未出现在iOS 8上的事实并不重要。这是一个流浪记录消息,应与雷达一起归档。
Moshe

今天早上我确实注意到有人更新了我的问题,而这并不是我最初的要求,这就是为什么断开连接的原因。甚至都不知道其他人有可能更新问题。
罗迪

要回答您的原始问题:除了提出雷达要求外,没有其他影响。
Moshe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.