webentwicklung-frage-antwort-db.com.de

Fehler: _handleNonLaunchSpecificActions in iOS9

Unter iOS 9 wird folgender Fehler angezeigt:

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

Ist noch jemandem dieser Fehler oder seine Auswirkungen aufgefallen? Was ist falsch?

157
Roddy

Es ist nichts falsch mit Ihrem Code. Dies ist eine Apple-interne Protokollierungsnachricht, über die Sie ein Radarprotokoll erstellen sollten.

Es gibt zwei Hinweise, die zeigen, dass dies wahrscheinlich Apples Code ist:

  1. Der Unterstrich vor dem Methodennamen _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion Ist eine Konvention, die angibt, dass die Methode für die Klasse, in der sie deklariert ist, privat/intern ist. (Siehe dieser Kommentar .)

  2. Es ist zu vermuten, dass das Zwei-Buchstaben-Präfix in FBSSceneSnapshotAction eine Abkürzung für FrontBoard ist, das laut Rene Ritchie in " Wunschliste für iOS 9: Gastmodus" Teil der gesamten Familie ist von Software zum Starten von Apps:

Unter iOS 8 hat Apple) seinen Systemmanager SpringBoard in mehrere kleinere, stärker fokussierte Komponenten überarbeitet. Zusätzlich zu BackBoard, das bereits für Hintergrundaufgaben ausgelagert wurde, wurde Frontboard für Vordergrundaufgaben hinzugefügt Sie haben auch PreBoard hinzugefügt, um den Sperrbildschirm unter sicheren, verschlüsselten Bedingungen zu verwalten. [...]

Ich habe keine Ahnung, wofür das BS -Präfix in BSSettings ist, aber eine Analyse dieser Protokollmeldung würde anzeigen, dass Sie nichts getan haben Protokollmeldung.

Wenn Sie versuchen möchten, einen Stack-Trace zu erstellen, können Sie die hier verknüpfte Kategorie implementieren. Einige würden argumentieren, dass das Überschreiben der privaten API eine schlechte Idee ist, aber in diesem Fall kann eine temporäre Injektion zum Abrufen eines Stack-Trace nicht zu schädlich sein.

EDIT:

Aber wir wollen immer noch wissen, was diese Aktion ist. Also setzte ich einen Haltepunkt auf -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion] Und begann Registerwerte auszudrucken und fand eine Klasse namens FBSceneImpl, die eine ganze Reihe von Informationen über meine Anwendung enthielt:

Scene

Wir können herausfinden, welche private Methode als nächstes aufgerufen wird (gespeichert im Programmzähler, Register 15.)

Program Counter

Ich habe versucht, das unbehandelte FBSceneSnapshotAction zu finden, auf das im Protokoll verwiesen wird, aber keine Würfel. Dann habe ich UIApplication untergeordnet und _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion Überschrieben. Jetzt war ich in der Lage, direkt an der Aktion teilzunehmen, aber wir wissen immer noch nicht, was es ist.

Dann schaute ich mir die FBSceneSnapshotAction noch einmal an. Es hat sich herausgestellt, dass es eine Superklasse namens BSAction gibt.

Dann schrieb ich ein Tool ähnlich RuntimeBrowser und schlug alle Unterklassen von BSAction nach. Es stellt sich heraus, dass es eine ganze Liste von ihnen gibt:

Action List

Die beiden Methodennamen (einer aus dem Protokoll und einer aus dem Programmzähler auf den Geräten) zeigen an, dass diese Aktionen unter der Haube zum Weiterleiten von Aktionen im System verwendet werden.

Einige Aktionen werden wahrscheinlich an die Rückrufe des App-Delegaten gesendet, während andere intern verarbeitet werden.

Was hier passiert, ist, dass es eine Aktion gibt, die nicht richtig gehandhabt wurde und das System dies bemerkt. Wir sollten es anscheinend nicht sehen.

9
Moshe