コードに問題はありません。これはApple内部のログメッセージであり、レーダーを提出する必要があります。
これがおそらくAppleのコードであることを示す2つのヒントがあります。
メソッド名の先頭にあるアンダースコア_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
は、メソッドが宣言されているクラスのプライベート/内部であることを示す規則です(このコメントを参照してください)。
の2文字のプレフィックスFBSSceneSnapshotAction
はFrontBoardの省略形であると推測するのが妥当です。これは、「iOS 9ウィッシュリスト:ゲストモード」のRene Ritchieによると、アプリの起動に関連するソフトウェアファミリー全体の一部です。
iOS 8で、AppleはシステムマネージャーのSpringBoardをいくつかのより小さく、より焦点を絞ったコンポーネントにリファクタリングしました。バックグラウンドタスクを処理するためにすでにスピンオフされていたBackBoardに加えて、フォアグラウンドタスク用のFrontboardを追加しました。また、安全な暗号化された条件下でロック画面を処理するためにPreBoardを追加しました。[...]
のBS
プレフィックスが何のためにあるのかわかりませんBSSettings
が、
BS
はの省略形でありBackBoard Settings
、このログメッセージの分析は、それがあなたがしたことではないことを示します。ログメッセージを再現する手順をレーダーに提出する必要があります。
スタックトレースを取得しようとする場合は、ここにリンクされているカテゴリを実装できます。プライベートAPIをオーバーライドすることは悪い考えであると主張する人もいますが、この場合、スタックトレースを取得するための一時的な注入はそれほど有害ではありません。
編集:
しかし、私たちはまだこの行動が何であるかを知りたいです。そこで、ブレークポイントを設定し-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
てレジスタ値の出力を開始しFBSceneImpl
、アプリケーションに関する大量の情報を含むというクラスを見つけました。
次に呼び出されるプライベートメソッドを見つけることができます(プログラムカウンタ、命令ポインタ、レジスタ15に格納されます)。
FBSceneSnapshotAction
ログで未処理の参照を見つけようとしましたが、サイコロはありませんでした。次に、UIApplicationをサブクラス化し、オーバーライドしました_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
。今では直接行動を起こすことができましたが、それでもそれが何であるかはわかりません。
次に、FBSceneSnapshotActionをもう一度確認しました。と呼ばれるスーパークラスがあることがわかりましたBSAction
。
次に、RuntimeBrowserに似たツールを作成し、BSActionのすべてのサブクラスを検索しました。それらのかなりのリストがあることがわかります:
私たちが持っている2つのメソッド名(1つはログから、もう1つはデバイスのプログラムカウンターから)は、これらのアクションがシステム全体にアクションを渡すために内部で使用されていることを示しています。
一部のアクションはおそらくアプリデリゲートのコールバックに送信されますが、他のアクションは内部で処理されます。
ここで起こっていることは、正しく処理されなかったアクションがあり、システムがそれを認識しているということです。どうやら、私たちはそれを見るはずがなかった。