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

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

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

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

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

Ответ 1

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

Ответ 2

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

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

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

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

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

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

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

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

детали:

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

Ошибка, похоже, находится в startd, которая наследует процесс приложения как дочерний, когда отладчик прекращает отладку, не убивая его. Это обычно сигнализируется приложением, становящимся зомби, имеющим статус процесса Z в ps.

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

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

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

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

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

Ответ 3

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

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

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

Список всех процессов Zombie:

ps -el | grep 'Z'

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

EDIT, 20120823: У меня есть кое-какие знания о процессах Zombie, поэтому я хотел обновить этот ответ. Процесс Zombie создается, когда родительский процесс не вызывает wait() (ожидание процесса изменения состояния) в завершающем дочернем процессе. Вы не можете запускать "убить" непосредственно в процессе Zombie, но если вы убьете родительский процесс, дочерний процесс zombie будет "очищен" и удален из таблицы процессов.

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

Ответ 4

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

Ответ 5

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

EDIT:

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

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

Ответ 6

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

ps -el | grep 'Z'
(как в предыдущем комментарии fooobar.com/questions/18212/...), и просто хотите немедленно исправить проблему, вы можете сделать это, не перезагружая или не убивая что-либо. Просто переименуйте свой исполняемый файл цели проекта:
  • Нажмите на проект на левой панели
  • Выберите Настройки сборки в средней панели
  • В разделе < "изменить" Имя продукта > от $(TARGET_NAME) до $(TARGET_NAME).1

Легко!

Ответ 7

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

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

Дэвид

Ответ 8

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

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

1) Перейдите в меню "iOS Simulator", рядом с логотипом Apple () в крайнем левом углу вашего основного экрана.
2) Выберите "Reset Контент и настройки...".
3) Прочтите сообщение pop, и если вы согласитесь, нажмите "Reset", в противном случае нажмите "Do not Reset".

Ответ 9

У меня возникла проблема @jyap упоминается с зомби-процессами. Единственный способ их очистки - перезагрузка. Тем не менее, я заметил, что мои друзья, работающие над одним проектом, получат такую ​​же проблему, но могут убить симулятор, не создавая процесс зомби. Я полностью удалил Xcode и повторно установил его, и пока я все еще получаю ошибку, он не создает процессы зомби, поэтому мне не нужно перезагружаться.

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

Ответ 10

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

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

  • Выберите проект в навигаторе проекта
  • Перейти Цель Информация
  • Добавить ключ для приложения не работает в фоновом режиме и устанавливается на YES.

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

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

Ответ 11

Если это происходит при тестировании на iPhone. Просто перезагрузите телефон. Из того, что мне сказали, телефон или симулятор по-прежнему считает, что есть экземпляр приложения, поэтому, когда он был последним, он не прекратил правильно делать либо ошибку в вашем коде, либо телефон/симулятор просто хотел иметь стонать.

Ответ 12

Я получил эту ошибку при отладке своего приложения на iPhone 4. Жесткая перезагрузка iPhone решила мою проблему. (Отключение iPhone подвешено...)

У меня не было никакого процесса зомби на моем mac и перезагрузка mac не решила проблему.

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

Ответ 13

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

Спасибо всем за большие предложения.

Ответ 14

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

Ответ 15

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

Ответ 16

У меня была такая же проблема и она была решена, выполнив следующие

  • Удаление приложения с устройства
  • Отключение устройства от Mac,
  • Выключение и повторное включение устройства,
  • Выход и перезапуск Xcode,
  • Выходные инструменты,
  • Наконец, очистите и снова создайте.

Я также сделал еще одну вещь, потому что Xcode настроен на использование iOS 5.0, а мой проект использует iOS 4.3

  • Удалите все фреймворки и добавьте их снова.

Ответ 17

  • Закрыть симулятор
  • Остановить запуск приложения в xCode.
  • Откройте Монитор активности и найдите процесс с помощью приложения NAME.
  • Убить этот процесс в Activity Monitor
  • Перестройте свой проект, и все должно быть установлено

Ответ 18

Причина

Запуск приложения в симуляторе до того, как ранее запущенное приложение полностью остановилось.

Исправление

Подождите, пока вы не увидите, что кнопка "Стоп" снова активируется перед повторным запуском.

(Я использую Xcode 4.2.1. Эта проблема возникала очень часто, когда я обновлялся до OS X Lion).

Ответ 19

Альтернативное обходное решение:

  • Дайте вашему приложению новый идентификатор. Если он называется com.foobar.myapp, назовите его com.foobar.myapp01

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

Ответ 20

Исправлено перезагрузкой моего телефона после удаления приложения, а затем его восстановление и запуск снова. Сейчас работает отлично.

Weird.

Ответ 21

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

Решение: удалите приложение с телефона, сделайте холодный перезапуск телефона, и теперь все хорошо.

Ответ 22

Случилось много для меня с Xcode 4.2.1 на Lion. Обновлено до 4.3.2, и это больше не происходит. Рад, что они исправили его.

Ответ 23

Майк Эш разместил решение (да благословит его Бог!), который не требует перезагрузки. Просто запустите:

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

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

Ответ 24

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

Ответ 25

Вы можете назначить переменную в функции или вкладке. Он отключится, если ваша функция или вкладка прекратятся. Поэтому вы должны объявить переменную-член или глобальную переменную.

Ответ 26

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

Ответ 27

Ой мой - я пробовал ВСЕ, перечисленные выше, и в других сообщениях. Переустановил Xcode, перезагрузил мою машину, скопировал все недостающие файлы в нужные папки... В конце концов я сделал резервную копию своего iphone, вытер его и восстановил, и он сработает!

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

Аааа, большой вздох облегчения.

Ответ 28

В самом худшем состоянии Reset контента и настройки iOS Simulater, и большую часть времени в моем случае, оставляя XCode вместе с симулятором, всегда работает для меня с XCode4.6 (это часто повесить)

Ответ 29

Я столкнулся с такой проблемой однажды в моем случае, что я сделал

  • Удалить приложение из симулятора.
  • Удалить папку с производными данными.
  • Выполните чистое действие в проекте, выбрав меню продукта - clean
  • Reset симулятор.
  • Закройте Xcode.
  • Попробуйте запустить проект, если он работает нормально, перейдите к шагу 7
  • Повторите все шаги с 1 по 5, а затем перезагрузите компьютер.

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

Ответ 30

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

iOS 6.0 и более поздние версии не должны возникать такие проблемы, поскольку в iOS 6.0 были введены подмножества bootstrap, а в iOS 7.0 было введено использование выделенного сервера начальной загрузки (launchd_sim), который полностью изолирован от сервера начальной загрузки.