GSRegisterPurpleNamedPort SIGABRT в UIApplicationMain перед тем, как делегат приложения получает возможность выполнить любой код - PullRequest
25 голосов
/ 28 августа 2010

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

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

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

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

Ответы [ 8 ]

19 голосов
/ 28 августа 2010

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

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

5 голосов
/ 09 июня 2013

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

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

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

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

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

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

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

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

Mac AppStore Xcode Update

3 голосов
/ 30 августа 2011

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

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

1 голос
/ 09 августа 2012

Здесь нет основных данных.Только что обновил текстовый файл в основном комплекте, и внезапно эта «фиолетовая точка» провалилась.IOS 5.1.1, iPad, приложение opengl с большим количеством жестовых интерфейсов.Я был очень рад найти здесь некоторые подсказки.Сброс исправил это.

1 голос
/ 27 февраля 2012

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

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

1 голос
/ 09 сентября 2011

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

0 голосов
/ 07 июня 2013

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

0 голосов
/ 01 июня 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...