Помилка: _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.
NKorotkov

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префікс BSSettings, але аналіз цього повідомлення журналу вказував би на те, що ви нічого не зробили, і вам слід подати радар з кроками, щоб відтворити повідомлення журналу.

Якщо ви хочете спробувати схопити слід стека, ви можете реалізувати тут пов’язану категорію . Дехто стверджує, що перекриття приватного API - погана ідея, але в цьому випадку тимчасова ін'єкція, щоб схопити слід стека, не може бути занадто шкідливою.

Редагувати:

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

Сцена

Ми можемо з'ясувати, який приватний метод викликається наступним (зберігається у лічильнику програми, реєструвати 15.)

Лічильник програм

Я спробував знайти необроблену FBSceneSnapshotActionпосилання в журналі, але без кісток. Потім я підкласифікував UIA-додаток та переобирав _handleNonLaunchSpecificActions:forScene:withTransitionContext:completion. Тепер мені вдалося потрапити на акцію безпосередньо, але все ж ми не знаємо, що це.

Потім я знову подивився на FBSceneSnapshotAction. Виявляється, він має суперклас, який називається BSAction.

Тоді я написав інструмент, схожий на RuntimeBrowser, і роздивився всі підкласи BSAction. Виявляється, їх досить список:

Список дій

Два назви методів, які ми маємо (один із журналу та один із лічильника програми на пристроях), вказують, що ці дії використовуються під кришкою для проходження дій по всій системі.

Деякі дії, ймовірно, надсилаються до зворотного виклику делегата програми, а інші обробляються внутрішньо.

Тут відбувається те, що є дія, яка не була виконана правильно, і система це помічає. Ми, як видно, не повинні були це бачити.


Вибачте, але це насправді не відповідь; більше наступного коментаря. Код дуже внутрішня помилка Apple, це не викликає сумнівів. Здогадки, насправді не є роздільною здатністю, і надане пояснення iOS8 не має значення, оскільки помилка з'явилася лише в iOS9 (цього не відбувається в iOS8).
Родді

2
Відповідь на те, "що не так", полягає в тому, що щось із SpringBoard не обробляє знімок. Ось що йде в повідомленні журналу. Ніхто ще не може сказати вам хтось поза Apple.
Моше

Те, що це повідомлення для реєстрації не з’явилося на iOS 8, не дуже важливо. Це повідомлення про бродячий журнал, який слід подати на радари.
Моше

Сьогодні вранці я помітив, що хтось оновив моє запитання, і я не був тим, про що я питав спочатку, через що є дещо відключення. Навіть не знав, що питання може бути оновлено ким-небудь ще.
Родді

Щоб відповісти на ваше первісне запитання: жодних інших наслідків, крім того, будь ласка, подайте на радари.
Моше
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.