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?
ios
objective-c
xcode
ios9
Roddy
quelle
quelle
Antworten:
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:
Der Unterstrich vor dem Methodennamen
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
ist eine Konvention, die angibt, dass die Methode privat / intern für die Klasse ist, in der sie deklariert ist. (Siehe diesen Kommentar .)Es ist zu vermuten, dass das Präfix aus zwei Buchstaben
FBSSceneSnapshotAction
eine 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:Ich habe keine Ahnung, wofür das
BS
Präfix inBSSettings
ist, 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,FBSceneImpl
die eine ganze Reihe von Informationen über meine Anwendung enthielt:Wir können herausfinden, welche private Methode als nächstes aufgerufen wird (gespeichert im Programmzähler, Register 15.)
Ich habe versucht, die nicht behandelten
FBSceneSnapshotAction
Punkte 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:
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.
quelle