Подтвердить что ты не робот

GSRegisterPurpleNamedPort SIGABRT в UIApplicationMain Перед тем, как App Delegate получает запуск любого кода

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

Мы смогли воссоздать сбой, построив и запустив предыдущую версию релиза на устройство, а затем построим и запустим надстройку новой сборки на одном устройстве, но трассировка стека для этого сбоя очень странная:

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, не видят проблемы.

Кто-нибудь когда-либо сталкивался с такой катастрофой? Почему эта проблема возникает только для обновлений?

4b9b3361

Ответ 1

Это под iOS 4.0? Сообщалось, что этот тип ошибки произошел, когда процесс или поток из предыдущей установки этого приложения разбился и каким-то образом еще не был очищен ОС или он повесился в отладчике.

Перезагружается ли iPhone после установки новой версии приложения, чтобы эта ошибка исчезла? Это было бы хорошим признаком того, что что-то застряло/повреждено в ОС от предыдущей установки, а не в самом пакете приложений.

Ответ 2

У меня была такая же проблема (к счастью, я поймал ее перед отправкой в ​​AppStore). В отличие от этого answer, проблема все еще возникает в iOS 5.x и 6.x.

Итак, я зашел в консоль и обнаружил, что несколько сообщений были записаны до того, как мое приложение разбилось. Сначала было это сообщение:

com.apple.launchd.peruser.503 [148]: (UIKitApplication: BUNDLE-ID [0x4fb5] [20462]) Следующее задание попыталось захватить службу "BUNDLE-ID-1" из этого задания: UIKitApplication: ПАКЕТ-ID-1 [0xac31]

Следующее сообщение в консоли отобразится сразу после:

GSRegisterPurpleNamedPort Не удалось зарегистрировать идентификатор BUNDLE с помощью загрузочного сервера. Ошибка: неизвестный код ошибки (1100). Обычно это означает, что еще один экземпляр этот процесс уже запущен или висел в отладчике.

Сбой вызван другим почти идентичным процессом, уже запущенным в системе. Это звучит как проблема с iOS, а не с самим приложением. Это должно помочь прояснить ситуацию. Лучше всего было бы заставить пользователей выйти из приложения, попробуйте перезапустить и снова открыть.

Я также представил отчет об ошибке, в котором Apple подробно описала проблему.

РЕДАКТИРОВАТЬ. Похоже, что это могло быть проблемой с самим Xcode. Apple только что выпустила обновление, которое должно устранить проблему (по крайней мере, в Simulator):

Mac AppStore Xcode Update

Ответ 3

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

Эта конкретная причина вышеупомянутого stacktrace была окончательно решена путем переустановки iTunes.

Ответ 4

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

Ответ 5

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

У меня также возникла такая сложная проблема, как вы ее исправите? Благодарю.

Ответ 6

Здесь нет основных данных. Просто обновил текстовый файл в главном комплекте, и это внезапно "фиолетовая точка" терпит неудачу. IOS 5.1.1, iPad, приложение opengl с большим количеством жестового интерфейса. Я был очень рад найти некоторые подсказки здесь. reset зафиксировал его.

Ответ 7

Похоже, что это случилось и при обновлении до 10.8.4, я думаю, что это ошибка Xcode, я выведу отчет об ошибке. Если приложение открыто, и я запускаю его из Xcode, приложение вылетает, поэтому он перезапускается сам по себе, и иногда мне нужно снова его перезапустить.

Ответ 8

Если вы используете Core Data в своем приложении и изменили схему, вы часто увидите, что эта проблема возникает. Случается, что старая версия приложения будет иметь старую версию базы данных (предположительно sqlite), и когда новая версия приложения запустится, она ожидает и новую версию базы данных. Это приводит к сбою при запуске, как это.

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

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/CoreDataVersioning/Introduction/Introduction.html