Ошибка: _handleNonLaunchSpecificActions в iOS9

157

Я получаю следующую ошибку на iOS 9:

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

Кто-нибудь еще сталкивался с этой ошибкой или ее последствиями? Что случилось?

Родди
источник
6
Все еще в iOS9 пост бета-релизов. Было бы хорошо понять, в чем проблема и последствия этого.
Родди
11
У меня та же проблема, когда я блокирую свой iPhone, когда мое приложение работает. iOS 9.0, XCode 7.0.
Н.Коротков
5
Это действительно ошибка Apple, поскольку совершенно новый проект, созданный с помощью Xcode 7, тоже имеет эту проблему.
Хунфэй
12
Обсуждается ли что-нибудь из достоинств на форумах разработчиков Apple? Кажется, что любой вид ошибки закрывается с «почему вы хотите сделать это, если Apple не хочет, чтобы вы?» Является ли последняя остановка отчаяния при поиске решения проблем.
Родди
11
Обратитесь к вопросу stackoverflow.com/questions/32658037/… - здесь обсуждается та же проблема.
iPhone Guy

Ответы:

10

В вашем коде нет ничего плохого. Это внутреннее сообщение для Apple, и вы должны сообщить об этом радару.

Есть две подсказки, которые показывают, что это, вероятно , код Apple:

  1. Подчеркивание, ведущее к имени метода, _handleNonLaunchSpecificActions:forScene:withTransitionContext:completionявляется соглашением, указывающим, что метод является частным / внутренним для класса, в котором он объявлен. (См. Этот комментарий .)

  2. Разумно предположить, что двухбуквенный префикс FBSSceneSnapshotActionявляется сокращением для FrontBoard, который, согласно Рене Ритчи из « Списка пожеланий iOS 9: режим гостя», является частью всего семейства программного обеспечения, связанного с запуском приложений:

В iOS 8 Apple реорганизовала своего системного менеджера SpringBoard на несколько более мелких и более сфокусированных компонентов. В дополнение к BackBoard, который уже был выделен для обработки фоновых задач, они добавили Frontboard для задач переднего плана. Они также добавили PreBoard для обработки экрана блокировки в безопасных, зашифрованных условиях. [...]

Я понятия не имею, для чего предназначен BSпрефикс in BSSettings, но анализ этого сообщения журнала показал бы, что это не то, что вы сделали, и вы должны подать радар с шагами для воспроизведения сообщения регистрации.

Если вы хотите попытаться получить трассировку стека, вы можете реализовать категорию, на которую вы ссылаетесь . Некоторые утверждают, что переопределение частного API - плохая идея, но в этом случае временная инъекция для захвата трассировки стека не может быть слишком вредной.

РЕДАКТИРОВАТЬ:

Но мы все еще хотим знать, что это за действие. Поэтому я установил точку останова, -[UIApplication _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion]начал распечатывать значения регистров и нашел класс с именем, FBSceneImplкоторый содержал всю информацию о моем приложении:

Место действия

Мы можем выяснить, какой закрытый метод вызывается следующим (хранится в счетчике программы, регистр 15.)

Счетчик команд

Я попытался найти необработанные FBSceneSnapshotActionссылки в журнале, но без кубиков. Затем я подклассифицировал UIApplication и переопределил _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Теперь я смог попасть на экшен напрямую, но все же мы не знаем, что это такое.

Затем я снова посмотрел на действие FBSceneSnapshotAction. Оказывается, у него есть суперкласс BSAction.

Затем я написал инструмент, похожий на RuntimeBrowser, и просмотрел все подклассы BSAction. Оказывается, их довольно много:

Список действия

Два имени метода, которые мы имеем (одно из журнала и одно из счетчика программы на устройствах), указывают, что эти действия используются под капотом для передачи действий по системе.

Некоторые действия, вероятно, отправляются обратным вызовам делегата приложения, в то время как другие обрабатываются внутренне.

Здесь происходит то, что есть действие, которое не было обработано правильно, и система замечает это. Видимо, мы не должны были это видеть.

Моше
источник
Извините, но это не совсем ответ; больше следующего комментария. Код очень сильно внутренняя ошибка Apple, это не под вопросом. Предположения, на самом деле, не являются разрешением, и приведенное объяснение iOS8 не имеет значения, поскольку ошибка появилась только в iOS9 (этого не происходит в iOS8).
Родди
2
Ответ на вопрос «что не так» заключается в том, что что-то внутри SpringBoard не обработало действие моментального снимка. Это то, что говорит сообщение регистрации. За пределами Apple мало что может сказать вам.
Моше
Тот факт, что это сообщение не появилось в iOS 8, на самом деле не имеет значения. Это случайное сообщение, которое должно быть передано с радара.
Моше
Сегодня утром я заметил, что кто-то обновил мой вопрос, и это было не то, о чем я изначально спрашивал, поэтому есть некоторая разница. Даже не знал, что вопрос может быть обновлен кем-то еще.
Родди
Чтобы ответить на ваш первоначальный вопрос: нет никаких последствий, кроме как подать радар.
Моше