it-swarm.com.ru

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

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

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

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

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

366
lostInTransit

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

162
Elliot Kroo

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

242
smparkes

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

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

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

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

ps -el | grep 'Z'

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

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

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

70
jyap

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

20
n3wscott

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

Правка:

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

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

15
sang

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

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

Дэвид

7
David H

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

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

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

5
domthinks

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

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

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

4
craig

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

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

  • Нажмите ваш проект в навигаторе проекта
  • Go Target -> Info
  • Добавьте ключ для Приложение не работает в фоновом режиме и имеет значение YES.

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

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

4
Chris Burt-Brown

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

4
Popeye

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

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

4
Haris Hussain

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

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

4
Christopher Pickslay

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

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

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

3
n13
  1. Закрыть симулятор
  2. Остановите приложение от запуска в xCode.
  3. Откройте Activity Monitor и найдите процесс запущен с помощью Имя приложения.
  4. Убейте этот процесс в Activity Monitor
  5. Перестройте свой проект и у вас все будет готово
3
negrelja

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

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

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

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

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

3
mobibob

Причина

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

Исправление

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

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

3
cosine

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

3
Daniel Wood

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

2
CommaToast

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

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

2
timv

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

Weird.

2
CommaToast

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

2
tbag

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

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

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

2
Jano

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

1
bTagTiger

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

1
Angela

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

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

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

0
Smikey

Если вы запускаете тесты из командной строки, (используя xcodebuild test), убедитесь, что симулятор запуска соответствует устройству, на котором вы ожидаете запустить тесты.

Возможно, вы запускаете тесты командной строки, использующие iPhone 5. Если вы работали с iPhone 6 в рекламе XCode, затем запустите тесты командной строки, иногда iPhone 6 будет продолжать работать, и вам нужно будет вручную выбрать устройство iPhone 5, а затем запустить тесты снова.

0
Rose Perrone

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

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

0
Jeremy Huddleston Sequoia

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

0
rptwsthi

Я сталкивался с такой проблемой один раз в моем случае вот что я сделал

  1. Удалить приложение из симулятора.
  2. Удалить папку производных данных.
  3. Выполните чистое действие в проекте, выбрав меню продукта - очистить
  4. Сброс симулятора.
  5. Выйти из Xcode.
  6. Попробуйте запустить проект сейчас, если он работает нормально, иначе перейдите к шагу 7
  7. Повторите все шаги с 1 по 5, а затем перезагрузите компьютер.

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

0
user2538944