Недавно мы выпустили обновление для одного из наших приложений, и многие пользователи сказали нам, что они больше не могут запускать приложение, потому что оно зависало при запуске.
Мы смогли воссоздать сбой, собрав и запустив сборку предыдущего выпуска на устройстве, а затем собрав и запустив новую сборку поверх него на том же устройстве, но трассировка стека для этого сбоя очень странная:
Thread 0 Crashed:
0 libSystem.B.dylib 0x000791d0 __kill + 8
1 libSystem.B.dylib 0x000791c0 kill + 4
2 libSystem.B.dylib 0x000791b2 raise + 10
3 libSystem.B.dylib 0x0008d6fa abort + 50
4 GraphicsServices 0x00003aa8 GSRegisterPurpleNamedPort + 172
5 GraphicsServices 0x00003d5a GSEventInitialize + 150
6 UIKit 0x00004cd6 UIApplicationMain + 350
7 MyApp 0x0000df5c main (main.m:14)
8 MyApp 0x00002c84 start + 32
Похоже, что происходит сбой в методе UIApplicationMain, который вызывает основной вызов. Но происходит сбой до того, как он достигнет любого из методов нашего делегата приложения. Я установил точки останова во всех методах делегата приложения, и ни один из них не был достигнут.
Кроме того, похоже, что это происходит только для пользователей, которые обновляют приложение. Пользователи, которые скачивают его из магазина приложений, пока он еще не подключен к своим iPhone, не видят проблемы.
Кто-нибудь когда-нибудь сталкивался с таким сбоем? Почему эта проблема возникает только для обновлений?
Это под iOS 4.0? Сообщалось, что этот тип ошибки возникает, когда происходит сбой процесса или потока из предыдущей установки этого приложения, который каким-то образом еще не был очищен операционной системой или завис в отладчике.
Пропадает ли эта ошибка при перезагрузке iPhone после установки новой версии приложения? Это было бы хорошим признаком того, что что-то застряло/повреждено в ОС из предыдущей установки, а не в самом комплекте приложений.