Ошибка при тестировании на симуляторе iOS: не удалось зарегистрироваться на сервере начальной загрузки - PullRequest
366 голосов
/ 25 апреля 2009

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

Не удалось зарегистрировать com.myApp.debug на сервере начальной загрузки. Ошибка: неизвестный код ошибки. Обычно это означает, что другой экземпляр этого процесса уже запущен или завис в отладчике. Программа получила сигнал: «SIGABRT».

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

Что я должен сделать, чтобы снова запустить приложение на моем симуляторе?

Ответы [ 31 ]

242 голосов
/ 22 октября 2011

статус: это было замечено совсем недавно, как Mac OS 10.8 и Xcode 4.4.

tl; dr: Это может происходить в двух контекстах: при работе на устройстве и при работе на симуляторе. При работе на устройстве отключение и повторное подключение устройства, кажется, исправляет ситуацию.

Майк Эш предложил

launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove

Это не работает все время. На самом деле, он никогда не работал для меня, но в некоторых случаях он работает. Просто не знаю, в каких случаях. Так что стоит попробовать.

В противном случае, единственный известный способ исправить это - перезапустить запуск пользователя. Перезагрузка сделает это, но есть менее радикальный / более быстрый способ. Вам нужно будет создать другого пользователя с правами администратора, но вам нужно будет сделать это только один раз. Когда все заклинивает, выйдите из системы как вы сами, войдите как этот пользователь и убейте launchd, принадлежащий вашему основному пользователю, например,

sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`

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

подробности:

Это стало происходить чаще с Lion / Xcode 4.2. (Лично я никогда не видел его до этой комбинации.)

Ошибка, по-видимому, в launchd, который наследует процесс приложения как дочерний, когда отладчик прекращает отладку, не убивая его. Обычно это сигнализируется тем, что приложение становится зомби и имеет статус процесса Z в пс.

Основная проблема, по-видимому, связана с сервером имен начальной загрузки, который реализован в launchd. Это (насколько я понимаю) отображает идентификаторы приложений на порты Mach. При возникновении ошибки приложение умирает, но не очищается от карты сервера имен сервера начальной загрузки, и в результате сервер начальной загрузки отказывается разрешить регистрировать другой экземпляр приложения под тем же именем.

Была надежда (см. Комментарии), что принудительный запуск для wait() для зомби все исправит, но это не так. Основная проблема не в статусе зомби (именно поэтому некоторые зомби доброкачественны), а в сервере имен начальной загрузки, и нет никакого известного способа избавиться от этого, если не убить launchd.

Похоже, что ошибка вызвана чем-то плохим между Xcode, gdb и пользователем launchd. Я просто повторил клин, запустив приложение в симуляторе iphone, остановив его в gdb, а затем выполнив сборку и запустив симулятор ipad. Кажется, он чувствителен к переключению симуляторов (iOS 4.3 / iOS 5, iPad / iPhone). Это происходит не всегда, а довольно часто, когда я часто переключаю симуляторы.

Убийство launchd, когда вы вошли в систему, испортит вашу сессию. Выход из системы и повторный вход в систему не убивают пользователя launchd; OS X поддерживает существующий процесс. Перезагрузка все исправит, но это больно. Инструкции выше более быстрые.

Я отправил сообщение об ошибке в Apple, FWIW. rdar: // 10330930

162 голосов
/ 25 апреля 2009

Попробуйте выйти и перезапустить симулятор? Если «хуже становится хуже», вы всегда можете попробовать перезапустить: по моему опыту это должно исправить.

70 голосов
/ 12 ноября 2011

Я обнаружил, что у меня возникла эта проблема с Lion + Xcode 4.2. Я также столкнулся с проблемой в Xcode 4.3.

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

Вот как вы определяете, требуется ли вам быстрая перезагрузка.

Перечислите все ваши процессы Zombie:

ps -el | grep 'Z'

Если вы видите ваше приложение в списке процессов Zombie, вам необходимо перезагрузить компьютер. Сообщение об ошибке гласит: «Обычно это означает, что другой экземпляр этого процесса уже запущен или завис в отладчике». Ну, XCode обнаруживает этот процесс Zombie, который вы не можете убить. Единственный способ исправить это - перезагрузить систему. (

РЕДАКТИРОВАТЬ, 20120823: Я немного лучше знаю процессы зомби, поэтому я хотел обновить этот ответ. Процесс Zombie создается, когда родительский процесс не вызывает wait () (ожидание процесса для изменения состояния) в завершающем дочернем процессе. Вы не можете запустить «kill» непосредственно в процессе Zombie, но если вы убьете родительский процесс, дочерний процесс Zombie будет «собран» и удален из таблицы процессов.

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

20 голосов
/ 21 июля 2010

Я только что это случилось со мной: я получал ошибку только на моем устройстве, и симулятор работал нормально. Мне пришлось перезагрузить устройство, и ошибка исчезла.

15 голосов
/ 07 августа 2009

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

EDIT:

Я только что нашел причину. У меня была ошибка в методе ApplicationWillTerminate. Поэтому, когда я нажимаю кнопку «Стоп» в окне Xcode, приложение не может правильно завершиться и начинает зависать.

проверьте Activity Monitor, чтобы увидеть, есть ли ваше приложение в списке. принудительно выйти, если это возможно.

14 голосов
/ 21 марта 2012

Если вы обнаружите, что ваша проблема связана с процессами зомби:

ps -el | grep 'Z'
(как в предыдущем комментарии https://stackoverflow.com/a/8104400/464289) и просто хотите немедленно решить проблему, вы можете сделать это без перезагрузки или уничтожения чего-либо. Просто переименуйте целевой исполняемый файл проекта:
  1. Нажмите на проект в левой панели
  2. Выберите Настройки сборки в средней панели
  3. В разделе ' Упаковка ' изменить ' Название продукта ' с $ (TARGET_NAME) на $ (TARGET_NAME) .1

Легко!

7 голосов
/ 05 ноября 2011

Ну, нет ответов, но нужно сделать хотя бы еще один тест. Откройте Терминал и выполните команду: «ps-Ael | grep Z». Если вы получили две записи, одну "(clang)", а другую - название вашего приложения или компании, вы попали - перезагрузитесь.

Если вы разработчик, введите короткую ошибку и скажите Apple, как сильно раздражает необходимость перезагрузки, и упомяните, что они могут дублировать эту ошибку до "rdar: // 10401934", который я только что ввел.

David

5 голосов
/ 14 апреля 2011

Сброс симулятора iOS исправил ошибку для меня. Хотя это удалит все приложения, которые есть в симуляторе, это устранит проблему без перезагрузки компьютера.

Вы можете сбросить симулятор iOS, выполнив следующие действия:

1) Перейдите в меню «Симулятор iOS» рядом с логотипом Apple () в левой части главного экрана.
2) Выберите «Сбросить содержимое и настройки ...».
3) Прочитайте всплывающее сообщение и, если вы согласны, нажмите «Сброс», в противном случае нажмите «Не сбрасывать».

4 голосов
/ 10 января 2012

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

Вот обходной путь, если вы хотите выполнить какую-то работу:

  • Щелкните ваш проект в навигаторе проекта
  • Go Цель -> Информация
  • Добавить ключ для Приложение не работает в фоновом режиме и установлено на YES.

Это будет означать, что при нажатии кнопки «Домой» в симуляторе или выходе из симулятора приложение не зависает.

Не забудьте изменить эту настройку перед распространением! Поместите это в свой контрольный список релиза:)

4 голосов
/ 27 октября 2012

перезагрузил устройство, сработало! : D

Спасибо всем за отличные предложения.

...