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


370

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

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

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

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


2
Любые предложения о том, что делать, когда это происходит во время тестирования на устройстве? Я попытался перезагрузить устройство, Xcode.
iPadDeveloper2011

1
Я также попытался удалить приложение на устройстве, закрыть все активные приложения (дважды щелкнуть дома, удерживать палец на значке приложения, коснуться знака «-»), перезапустить Xcode, выйти из системы и войти снова. Пока ничего не работает.
iPadDeveloper2011

Попробуйте «Очистить кеш» в меню XCode. Это также помогает.
lostInTransit

3
Для всех, кто столкнулся с этой проблемой, позже выяснилось, это происходит в большинстве случаев из-за ошибки в коде. Ищите какой-то фрагмент кода, который либо занимает много времени выполнения, либо запускает приложение в цикл.
lostInTransit

4
Когда это происходит, я просто убиваю SimulatorBridge и покидаю симулятор. ps ax | grep SimulatorBridge
Элланд

Ответы:


162

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


44
Закончилась перезагрузка системы! Все еще не знаю, что вызвало проблему все же!
lostInTransit

6
Как говорится в комментарии ниже, обычно вы можете увидеть зависший процесс в Activity Monitor и уничтожить его там.
mxcl

13
Я ненавижу перезапуск :) Выход из зависшего процесса работал для меня: ps ax | grep Simulator покажет ваши запущенные приложения, в моем случае это был MyApp.app, который завис.
BadPirate

12
Перезапуск не помог
Паскаль Кляйн

10
Я часто получаю это в XCode 4.3. Перезапуск приложения или выход из симулятора не помогает. Я должен перезагрузить компьютер, чтобы он заработал.
Ойстейн

242

Статус: это было замечено совсем недавно, как 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 в пс.

Основная проблема заключается в сервере имен начальной загрузки, который реализован в 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


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

2
Это не просто лев. Все еще используете Snow Leopard здесь и видите эту ошибку много раз с момента выхода XCode 4.2. (Использовал XCode 3.x до выпуска iOS SDK 5.0.)
Джонни,

3
Спасибо за информацию ... Это происходит безумно часто для меня в последнее время ... Дважды за последние 10 минут. В некотором роде трудно получить стабильный рабочий процесс, когда мне приходится постоянно перезагружаться. Ну что ж, перезагружу мой компьютер снова.
Брэд Госс

1
@smparkes: это на самом деле, кажется, происходит чаще, чем раньше. Я просто изменяю bundleID, и все снова работает, но это раздражает при работе с логикой CoreData, которую вы пытаетесь отлаживать. Хотя я признаю, что это менее раздражает, чем перезагрузка.
Майк

2
4.3.1 и это случилось только сейчас ... тааак раздражает. Для меня перезапуск самого iPhone нормально решает его, мне не нужно перезагружать мой Mac. Это произошло с XCode 4.2 под Snow Leopard, где-то в сентябре 2011 года для меня.
TheEye

70

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

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

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

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

ps -el | grep 'Z'

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

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

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


Спасибо, у меня было 7 экземпляров 3 программ, над которыми я работал как зомби.
АртСабинцев 15.11.11

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

Вы пытались убить эти процессы зомби как root? Я перезагрузился, прежде чем я подумал об этом.
Райан Х.

1
@smparkes, да, это очевидно по этому вопросу, в котором обсуждается это сообщение об ошибке.
jyap

1
@ HZC, да, вы не можете уничтожать процессы зомби даже с правами root
jyap

20

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


1
то же самое, перезапустил устройство и оно ушло. Симулятор работал нормально
agente_secreto

15

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

РЕДАКТИРОВАТЬ:

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

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


2
Это исправило это для меня! пс aux | grep Simulator
Джейсон Прадо

Если это поможет, я создам эту ошибку при запуске Leak Performance Tools
IssamTP

14

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

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

  1. Нажмите на проект на левой панели
  2. Выберите Настройки сборки в средней панели.
  3. В разделе « Упаковка » измените « Название продукта » с $ (TARGET_NAME) на $ (TARGET_NAME) .1

Легко!


у меня это не сработало, я получил ту же ошибку: в профиле обеспечения mataleao2 указан идентификатор приложения au.com.mataleao, который не соответствует текущему значению au.com.mataleao-1
sapatos

Вы тестируете на симуляторе или на iPhone?
JRG

я тестирую только на iphone, функциональность, которую я тестирую, будет работать только на телефоне
sapatos

7

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

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

Дэвид


5

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

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

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


3
Не поможет ни на секунду, вместо этого вы потеряете весь ваш контент / приложения / фотографии / контакты
странно

1
@ Странно, это симулятор. в любом случае он не содержит никакой важной информации. :)
Евгений Бодунов

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

Похоже, что этот процесс защищен от убийства в Activity Monitor, даже с «Force Quit»
Ферруччо,

4

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

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


4

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

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

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

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

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


1
Это опасно, так как мешает вам протестировать фоновое поведение, пока вы не забудете изменить его обратно.
тк.

@tc: Да, я согласен. Однако, если вы вынуждены перезагружаться каждый раз, когда запускаете приложение для iOS (что и было у меня), тогда это может быть лучше, чем альтернатива.
Крис Бурт-Браун

4

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


4

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

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

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



3

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


3

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


3

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

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

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

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

Вопрос к симулятору. не для устройства.
вирусный

3

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

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

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


3

Причина

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

Исправление

Дождитесь, когда вы увидите, что кнопка Стоп снова станет активной, прежде чем снова работать

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


Просто снова получаю эту ошибку. Я перепробовал все и, наконец, перезапуск iPad исправил это
баров

2

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

Weird.


2

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

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


2

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


2

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

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

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


У меня было много шансов проверить это (вздох). Иногда это работает, иногда мне приходится перезагружать свой iPhone или даже мой Mac (команда выше говорит «процесс не найден»).
Яно

2

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


1

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


1

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


0

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

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

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


0

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


0

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

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

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


0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.