W systemie iOS 9 pojawia się następujący błąd:
-[UIApplication_handleNonLaunchSpecificActions:
forScene:
withTransitionContext:
completion:] unhandled action ->
<FBSSceneSnapshotAction: 0x150b2aef0>
{
handler = remote;
info = <BSSettings: 0x15333f650>
{
(1) = 5;
};
}
Czy ktoś jeszcze natknął się na ten błąd lub jego konsekwencje? Co jest nie tak?
ios
objective-c
xcode
ios9
Roddy
źródło
źródło
Odpowiedzi:
Nie ma nic złego w Twoim kodzie. To jest komunikat logowania wewnętrzny firmy Apple i należy złożyć o tym radar.
Istnieją dwie wskazówki, które pokazują, że jest to prawdopodobnie kod Apple:
Podkreślenie prowadzące do nazwy metody
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
jest konwencją wskazującą, że metoda jest prywatna / wewnętrzna klasy, w której została zadeklarowana. (Zobacz ten komentarz ).Można się domyślić, że dwuliterowy prefiks w
FBSSceneSnapshotAction
jest skrótem dla FrontBoard, który według Rene Ritchie w „ iOS 9 Wish-list: Guest Mode” jest częścią całej rodziny programów związanych z uruchamianiem aplikacji:Nie mam pojęcia, do czego służy ten
BS
prefiksBSSettings
, ale analiza tego komunikatu dziennika wskazywałaby, że nie jest to nic, co zrobiłeś, i powinieneś złożyć radar z krokami, aby odtworzyć komunikat logowania.Jeśli chcesz spróbować pobrać ślad stosu, możesz zaimplementować kategorię, do której link jest tutaj . Niektórzy twierdzą, że nadpisywanie prywatnego interfejsu API to zły pomysł, ale w tym przypadku tymczasowy zastrzyk w celu pobrania śladu stosu nie może być zbyt szkodliwy.
EDYTOWAĆ:
Ale nadal chcemy wiedzieć, na czym polega ta akcja. Ustawiłem więc punkt przerwania
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
i zacząłem drukować wartości rejestrów i znalazłem klasę,FBSceneImpl
która zawierała całą masę informacji o mojej aplikacji:Jesteśmy w stanie dowiedzieć się, która metoda prywatna jest wywoływana jako następna (zapisana w liczniku programu, rejestr 15.)
Próbowałem znaleźć nieobsługiwane
FBSceneSnapshotAction
odniesienia w dzienniku, ale bez kości. Następnie podklasowałem UIApplication i przesadziłem_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Teraz udało mi się przejść bezpośrednio do akcji, ale nadal nie wiemy, co to jest.Następnie ponownie spojrzałem na FBSceneSnapshotAction. Okazuje się, że ma nadklasę zwaną
BSAction
.Następnie napisałem narzędzie podobne do RuntimeBrowser i sprawdziłem wszystkie podklasy BSAction. Okazuje się, że jest ich całkiem spora lista:
Dwie nazwy metod, które mamy (jedna z dziennika i jedna z licznika programu na urządzeniach) wskazują, że te akcje są używane pod maską do przekazywania akcji w systemie.
Niektóre akcje są prawdopodobnie wysyłane do wywołań zwrotnych delegata aplikacji, podczas gdy inne są obsługiwane wewnętrznie.
To, co się tutaj dzieje, polega na tym, że istnieje akcja, która nie została poprawnie obsłużona, a system to zauważa. Najwyraźniej nie mieliśmy tego widzieć.
źródło