2014-10-14 1 views
7

Я нахожусь в моем сознании, я получаю странный крах, который происходит, когда приложение запускается из Notification Center. Либо нажатие на локальное уведомление (в стороне уведомления), либо вызов extensionContext: openURL: completeHandler (из моего виджета Today) запустит приложение с помощью схемы customURL.странный сбой при запуске приложения из Центра уведомлений

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

Я искал низко и высоко для всего, не могу найти его. Это происходит только на устройствах 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 
+0

Удалось ли вам исправить это @Mike? Я вижу то же самое в нескольких приложениях в дикой природе, но не могу его реплицировать локально, отправив push-уведомление в приложение. – siburb

+0

Я могу повторить его последовательно с приведенными выше шагами. Другим интересным фактом является то, что его только iOS8. Я обновляюсь до версии v8.1 и вижу, будет ли он разрешен. – Mike

+0

Я надеюсь, что это так. Я не видел ни одного экземпляра этого события в наших приложениях в iOS 8.1 (пока), но может быть слишком рано говорить окончательно. Надеюсь, ваше тестирование может подтвердить. – siburb

ответ

7

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

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

+0

yup, вы поняли. Это было сложно. благодаря! – Mike

+0

@Mike Как вы его решили? это была сторонняя библиотека? –

+0

что @Dex упоминается правильно. Я использовал стороннюю библиотеку, которая вручную вращала цикл выполнения. Отключение этой библиотеки устранило мою проблему. С тех пор я также уведомил об этом разработчика библиотеки. – Mike