Странный сбой при запуске приложения из Центра уведомлений

У меня остроумие, я получаю странный сбой, который происходит только тогда, когда приложение запускается из Центра уведомлений. Либо нажав на локальное уведомление (на стороне уведомления), либо на вызов extensionContext:openURL: завершение (из моего виджета "Сегодня") запустит приложение со схемой customURL.

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

Я ищу что-то низкое и высокое, не могу найти это. Это происходит только на устройствах iOS8, на устройствах iOS7 проблем нет (с запуском уведомлений, очевидно, нет виджета Today)

Кто-нибудь видел это??

Спасибо!

Date/Time:           2014-10-14 18:16:39.924 -0400
Launch Time:         2014-10-14 18:16:38.667 -0400
OS Version:          iOS 8.0.2 (12A405)
Report Version:      105

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x000000016a4cbeb8
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x0000000195ebbbd0 objc_msgSend + 16
1   UIKit                           0x000000018a27d840 -[UIApplication workspaceDidEndTransaction:] + 216
2   FrontBoardServices              0x000000018da7563c __31-[FBSSerialQueue performAsync:]_block_invoke + 24
3   CoreFoundation                  0x000000018582a35c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 16
4   CoreFoundation                  0x0000000185829464 __CFRunLoopDoBlocks + 308
5   CoreFoundation                  0x0000000185827a88 __CFRunLoopRun + 1752
6   CoreFoundation                  0x0000000185755660 CFRunLoopRunSpecific + 392
7   UIKit                           0x000000018a05f4fc -[UIApplication _run] + 548
8   UIKit                           0x000000018a05a4f4 UIApplicationMain + 1484
9   therichest                      0x00000001001caa8c main (main.m:16)
10  libdyld.dylib                   0x0000000196516a04 start + 0

1 ответ

Решение

Ваш код или сторонняя библиотека, которую вы используете, вручную запускает цикл запуска. Это вызывает -workspaceDidEndTransaction: вызываться повторно и запускает использование после освобождения. Если вы устанавливаете точку останова на -[NSRunLoop runMode:beforeDate:] и -[NSRunLoop runUntilDate:], она должна совпадать с виновным кодом, находящимся в предыдущем кадре стека.

Хотя ручное вращение цикла выполнения никогда не рекомендуется, если вы можете отложить его до тех пор, пока ваше приложение не завершит запуск (все вызовы делегатов запуска приложения), вы должны избегать возникновения этого сбоя.

Другие вопросы по тегам