错误:iOS9中的_handleNonLaunchSpecificActions

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

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

有没有其他人遇到这个错误或它的影响? 哪里不对?

你的代码没有问题。 这是苹果内部的日志消息,你应该提供一个关于它的信息。

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

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

  2. 猜测FBSSceneSnapshotAction中的双字母前缀是FBSSceneSnapshotAction的简写是合理的,根据Rene Ritchie在“ iOS 9愿望清单:访客模式”中所述,是与启动应用相关的整个软件家族的一部分:

在iOS 8中,苹果公司将其系统pipe理器SpringBoard重组为几个更小,更集中的组件。 除了已经分离出来处理后台任务的BackBoard之外,他们还为前台任务添加了Frontboard。 他们还增加了PreBoard来处理安全,encryption条件下的锁屏。 […]

我不知道BSSettingsBS前缀是什么,但是对这个日志消息的分析表明它不是你所做的任何事情,你应该向雷达提供步骤来重现日志消息。

如果你想尝试抓取一个堆栈跟踪,你可以实现链接到这里的类别 。 有人会认为重写私有API是一个坏主意,但在这种情况下,暂时注入来获取堆栈跟踪不会太有害。

编辑:

但是,我们仍然想知道这个动作是什么。 所以我把一个断点放在-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]并开始打印出寄存器值,并find一个名为FBSceneImpl的类,这个类FBSceneImpl了我的应用程序的大量信息:

现场

我们可以找出下一个被调用的私有方法(存储在程序计数器中,寄存器15)

程序计数器

我试图find日志中引用的未处理的FBSceneSnapshotAction ,但没有骰子。 然后,我分类UIApplication,并覆盖_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion 。 现在我可以直接得到这个动作,但是我们仍然不知道它是什么。

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

然后我写了一个类似于RuntimeBrowser 的工具 ,查找了BSAction的所有子类。 事实certificate,有相当多的列表:

动作列表

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

有些操作可能发送到应用程序委托的callback,而其他操作是内部处理的。

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