Я получаю следующую ошибку на iOS 9:
-[UIApplication_handleNonLaunchSpecificActions:
forScene:
withTransitionContext:
completion:] unhandled action ->
<FBSSceneSnapshotAction: 0x150b2aef0>
{
handler = remote;
info = <BSSettings: 0x15333f650>
{
(1) = 5;
};
}
Кто-нибудь еще сталкивался с этой ошибкой или ее последствиями? Что случилось?
ios
objective-c
xcode
ios9
Родди
источник
источник
Ответы:
В вашем коде нет ничего плохого. Это внутреннее сообщение для Apple, и вы должны сообщить об этом радару.
Есть две подсказки, которые показывают, что это, вероятно , код Apple:
Подчеркивание, ведущее к имени метода,
_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
является соглашением, указывающим, что метод является частным / внутренним для класса, в котором он объявлен. (См. Этот комментарий .)Разумно предположить, что двухбуквенный префикс
FBSSceneSnapshotAction
является сокращением для FrontBoard, который, согласно Рене Ритчи из « Списка пожеланий iOS 9: режим гостя», является частью всего семейства программного обеспечения, связанного с запуском приложений:Я понятия не имею, для чего предназначен
BS
префикс inBSSettings
, но анализ этого сообщения журнала показал бы, что это не то, что вы сделали, и вы должны подать радар с шагами для воспроизведения сообщения регистрации.Если вы хотите попытаться получить трассировку стека, вы можете реализовать категорию, на которую вы ссылаетесь . Некоторые утверждают, что переопределение частного API - плохая идея, но в этом случае временная инъекция для захвата трассировки стека не может быть слишком вредной.
РЕДАКТИРОВАТЬ:
Но мы все еще хотим знать, что это за действие. Поэтому я установил точку останова,
-[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]
начал распечатывать значения регистров и нашел класс с именем,FBSceneImpl
который содержал всю информацию о моем приложении:Мы можем выяснить, какой закрытый метод вызывается следующим (хранится в счетчике программы, регистр 15.)
Я попытался найти необработанные
FBSceneSnapshotAction
ссылки в журнале, но без кубиков. Затем я подклассифицировал UIApplication и переопределил_handleNonLaunchSpecificActions:forScene:withTransitionContext:completion
. Теперь я смог попасть на экшен напрямую, но все же мы не знаем, что это такое.Затем я снова посмотрел на действие FBSceneSnapshotAction. Оказывается, у него есть суперкласс
BSAction
.Затем я написал инструмент, похожий на RuntimeBrowser, и просмотрел все подклассы BSAction. Оказывается, их довольно много:
Два имени метода, которые мы имеем (одно из журнала и одно из счетчика программы на устройствах), указывают, что эти действия используются под капотом для передачи действий по системе.
Некоторые действия, вероятно, отправляются обратным вызовам делегата приложения, в то время как другие обрабатываются внутренне.
Здесь происходит то, что есть действие, которое не было обработано правильно, и система замечает это. Видимо, мы не должны были это видеть.
источник