iOS9ストーリーボード未処理のアクション(handleNonLaunchSpecificActions)とは何ですか?


84

ストーリーボードを使用しているときにiOS9でアプリを実行すると、コンソールに次のエラーが表示されることに気付きました。xCode7を使用しています。これは私が心配する必要があるものですか?

-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion:] ** unhandled action -> <FBSSceneSnapshotAction: 0x176bfb20> {
    handler = remote;
    info = <BSSettings: 0x176a5d90> {
        (1) = 5;
    };
}

AppleはiOS9は安定性についてだと言っているので、心配する必要はないと思います;-) PS私も同じ問題を抱えており、他の開発者もstackoverflow.com/questions/32344082/…–
Roma

11
ストーリーボードに関連しているかどうかはわかりませんが、ストーリーボード以外のアプリにも表示されます。
koen

ビルドに他の警告はありますか?多分それは些細なことのように見える警告ですか?
Joe Susnick 2015

ストーリーボードを使用しておらず、この警告も表示されます。シミュレータをCMD + Lでロックし、「スライドしてロックを解除」してアプリに戻るとポップアップします。
SDW 2015

デバイスログを見ると、デバイスの画面を自動的にオフにすることが関係している可能性があります。この行SpringBoard[54] <Warning>: [MPUSystemMediaControls] Disabling lock screen media controls updates for screen turning off.は、引用されたエラーメッセージの直前に記録されます。
クリスチャン

回答:


32

コードに問題はありません。これはApple内部のログメッセージであり、レーダーを提出する必要があります。

これがおそらくAppleのコードであることを示す2つのヒントがあります。

  1. メソッド名の先頭にあるアンダースコア_handleNonLaunchSpecificActions:forScene:withTransitionContext:completionは、メソッドが宣言されているクラスのプライベート/内部であることを示す規則です(このコメントを参照してください)。

  2. の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つはデバイスのプログラムカウンターから)は、これらのアクションがシステム全体にアクションを渡すために内部で使用されていることを示しています。

一部のアクションはおそらくアプリデリゲートのコールバックに送信されますが、他のアクションは内部で処理されます。

ここで起こっていることは、正しく処理されなかったアクションがあり、システムがそれを認識しているということです。どうやら、私たちはそれを見るはずがなかった。


良い調査ですが、ここに興味深いものがあります。プライベートAppleAPIを使用すると正確なOPエラーが発生します。私はプライベートAPIを使用しているので、おそらくAppleエンジニアのコンソールログを取得していると思います。
ohadM 2016

1
@Moshe Appleは彼らに代わって調査するためにあなたにいくら払ったのですか?しかし、彼らはそれに興味がないかもしれません。:p
codelearner 2016年

「それについてレーダーを提出する」とはどういう意味ですか?
Paul Masri-Stone 2017

これは、Appleのバグレポーターツールを使用してバグレポートを提出することを意味します。
モシェ2017年

12

AFAIK、上記の情報は画面のスナップショット中のiOSに関連しています(ダブルクリックのホームマルチタスク関連の動作を想定しています)。アプリケーションを詳細に調査したところ、副次的な動作は見られないようです。今のところ、無視しても問題ありません。

次の要点の単純なカテゴリを使用して、上記の関数の呼び出しに対して自分自身をテストできます。


1

私はそれを理解しました、あなたが.hまたは.mファイルで宣言されたIBActionメソッドを持っているが、あなたがそれをどのコントロールにもバインドしていないときに起こります。

.m例:

- (IBAction)click:(id)sender{
}

ただし、このメソッドはストーリーボードのコントロールには割り当てられていません。


これは私のアプリには当てはまりません-バインドされていないIBActionがなく、このメッセージも表示されます。私のアプリはSwiftアプリです。
henrikstroem 2016年

1

私のアプリでなぜそれが発生するのかはわかりませんが、ログペインにこれ​​が表示されないようにする場合は、少なくとも例外をキャッチできます。これは解決策ではありませんが、キャッチで渡された引数のいずれかを調べることで、なぜそれが起こっているのかについてより多くの洞察を得ることができます。

スイフト2バージョン:

import UIKit

extension UIApplication {
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler: () -> Void) {
        //whatever you want to do in this catch
        print("handleNonLaunchSpecificActions catched")
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.