Fehler: _handleNonLaunchSpecificActions in iOS9

157

Unter iOS 9 wird der folgende Fehler angezeigt:

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

Ist jemand auf diesen Fehler gestoßen oder hat er Auswirkungen? Was ist falsch?

Roddy
quelle
6
Ist noch in iOS9 nach der Beta-Version. Es wäre gut zu verstehen, was das Problem ist und welche Auswirkungen es hat.
Roddy
11
Ich habe das gleiche Problem, wenn ich mein iPhone sperre, während meine App ausgeführt wird. iOS 9.0, XCode 7.0.
NKorotkov
5
Es scheint ein Apple-Fehler zu sein, da ein brandneues Projekt, das mit Xcode 7 erstellt wurde, genau dieses Problem hat.
Hongfei
12
Wird in den Apple-Entwicklerforen jemals etwas Wertvolles besprochen? Es scheint, dass jede Art von Fehler mit "Warum sollten Sie das tun wollen, wenn Apple dies nicht möchte?" Ist die letzte Station der Verzweiflung, wenn es darum geht, Probleme zu lösen.
Roddy
11
Siehe Frage stackoverflow.com/questions/32658037/… - hier wird das gleiche Problem behandelt.
iPhone Guy

Antworten:

10

An Ihrem Code ist nichts auszusetzen. Dies ist eine Apple-interne Protokollierungsnachricht, und Sie sollten ein Radar darüber einreichen.

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

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

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

Mit iOS 8 hat Apple seinen Systemmanager SpringBoard in mehrere kleinere, fokussiertere Komponenten umgestaltet. Zusätzlich zu BackBoard, das bereits für Hintergrundaufgaben ausgegliedert 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 BSPräfix in BSSettingsist, aber eine Analyse dieser Protokollnachricht würde anzeigen, dass Sie nichts getan haben, und Sie sollten ein Radar mit Schritten zum Reproduzieren der Protokollierungsnachricht einreichen.

Wenn Sie versuchen möchten, eine Stapelverfolgung abzurufen, 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.

BEARBEITEN:

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

Szene

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

Programm zähler

Ich habe versucht, die nicht behandelten FBSceneSnapshotActionPunkte im Protokoll zu finden, aber keine Würfel. Dann habe ich UIApplication untergeordnet und überschrieben _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Jetzt konnte ich direkt an der Aktion teilnehmen, aber wir wissen immer noch nicht, was es ist.

Dann habe ich mir noch einmal die FBSceneSnapshotAction angesehen. Es stellt sich heraus, dass es eine Superklasse namens gibt BSAction.

Dann habe ich ein Tool geschrieben , das RuntimeBrowser ähnelt, und alle Unterklassen von BSAction nachgeschlagen. Es stellt sich heraus, dass es eine ganze Liste von ihnen gibt:

Aktionsliste

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 ausgeführt werden.

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

Moshe
quelle
Entschuldigung, aber das ist keine wirkliche Antwort. eher ein folgender Kommentar. Der Code ist sehr viel Apples interner Fehler, dies ist nicht in Frage. Vermutungen sind keine wirkliche Lösung und die bereitgestellte Erklärung für iOS8 ist nicht relevant, da der Fehler nur in iOS9 aufgetreten ist (dies tritt in iOS8 nicht auf).
Roddy
2
Die Antwort auf "Was ist los?" Ist, dass etwas in SpringBoard keine Snapshot-Aktion verarbeitet hat. Das steht in der Protokollierungsnachricht. Niemand außerhalb von Apple kann Ihnen etwas anderes sagen.
Moshe
Die Tatsache, dass diese Protokollierungsnachricht unter iOS 8 nicht angezeigt wurde, ist jedoch nicht wirklich relevant. Es ist eine streunende Protokollierungsnachricht, die beim Radar abgelegt werden sollte.
Moshe
Ich habe heute Morgen bemerkt, dass jemand meine Frage aktualisiert hat und das war nicht das, was ich ursprünglich gefragt habe, weshalb es eine gewisse Unterbrechung gibt. Ich wusste nicht einmal, dass eine Frage von jemand anderem aktualisiert werden kann.
Roddy
Um Ihre ursprüngliche Frage zu beantworten: Es gibt keine anderen Auswirkungen, als bitte ein Radar einzureichen.
Moshe