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

<p>я тестировал свое приложение на симуляторе, когда оно зависало при нажатии кнопки uialertview. я прекратил отладку, внес некоторые изменения в код и снова собрал приложение. теперь, когда я запускаю приложение, я получаю эту ошибку в консоли</p><blockquote> <p><strong>не удалось зарегистрировать com.myapp.debug на сервере bootstrap. ошибка: неизвестный код ошибки. обычно это означает, что другой экземпляр этого процесса уже запущен или завис в отладчике. программа принятый сигнал: "sigabrt".</strong></p> </blockquote><p>я попытался удалить приложение из симулятора, выполняя чистую сборку, но все равно получаю эту ошибку, когда пытаюсь запустить приложение.</p><p>что мне нужно сделать, чтобы снова запустить приложение на моем симуляторе?</p>

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

<p>статус <strong>: </strong> это было замечено совсем недавно, как mac os 10.8 и xcode 4.4.</p><p><strong> tl; dr: </strong> это может происходить в двух контекстах: при работе на устройстве и при работе на симуляторе. при работе на устройстве отключение и повторное подключение устройства, кажется, исправляет ситуацию.</p><p> <a href="http://www.mikeash.com/pyblog/solving-simulator-bootstrap-errors.html">предложил майк эш</a> </p><pre><code>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}'` </code></pre><p>замена вашего основного имени пользователя на <code>user\_id</code>. войдите снова, поскольку ваш обычный пользователь возвращает вас в нормальное состояние. вроде больно, но меньше, чем полная перезагрузка.</p><p><strong> подробности: </strong></p><p>это стало происходить чаще с lion/xcode 4.2. (лично я никогда не видел это до этой комбинации.)</p><p>ошибка, по-видимому, в launchd, который наследует процесс приложения как дочерний, когда отладчик прекращает отлаживать его, не убивая его. обычно это сигнализируется тем, что приложение становится зомби и имеет статус процесса z в пс.</p><p>основная проблема заключается в сервере имен bootstrap, который реализован в launchd. это (насколько я понимаю) отображает идентификаторы приложений на порты mach. при возникновении ошибки приложение умирает, но не очищается от карты сервера имен сервера bootstrap, и в результате сервер bootstrap отказывается разрешить другой экземпляр приложения быть зарегистрированным под тем же именем.</p><p>была надежда (см. комментарии), что принудительный запуск launchd к <code>wait()</code> для зомби исправит ситуацию, но это не так. основная проблема не в статусе зомби (именно поэтому некоторые зомби доброкачественны), а в сервере имен bootstrap, и нет никакого известного способа избавиться от этого, если не убить launchd.</p><p>похоже, что ошибка вызвана чем-то плохим между xcode, gdb и пользователем launchd. я просто повторил клин, запустив приложение в симуляторе iphone, остановив его в gdb, а затем выполнив сборку и запустив симулятор ipad. кажется, он чувствителен к переключению симуляторов (ios 4.3/ios 5, ipad/iphone). это происходит не всегда, а довольно часто, когда я часто переключаю симуляторы.</p><p>убийство launchd, пока вы вошли в систему, испортит вашу сессию. выход из системы и повторный вход в систему не убивают пользователя launchd; os x поддерживает существующий процесс. перезагрузка все исправит, но это больно. инструкции выше быстрее.</p><p>я отправил сообщение об ошибке в apple, fwiw. rdar: // 10330930</p>

<p>я обнаружил, что у меня возникла эта проблема с lion + xcode 4.2. я также испытал проблему в xcode 4.3.</p><p>я перепробовал все предложения, но ни одно из них не сработало, кроме полной перезагрузки.</p><p>вот как вы определяете, требуется ли вам быстрая перезагрузка.</p><p>перечислите все ваши процессы zombie:</p><pre><code>ps -el | grep 'z' </code></pre><p>если вы видите ваше приложение в списке процессов zombie, вам необходимо перезагрузить компьютер. сообщение об ошибке гласит: "обычно это означает, что другой экземпляр этого процесса уже запущен или завис в отладчике". ну, xcode обнаруживает этот процесс zombie, который вы не можете убить. единственный способ исправить это - перезагрузить систему. :(</p><p><strong>edit, 20120823:</strong> я немного лучше знаю процессы зомби, поэтому я хотел обновить этот ответ. процесс zombie создается, когда родительский процесс не вызывает wait () (ожидание процесса для изменения состояния) в завершающем дочернем процессе. вы не можете запустить "kill" непосредственно в процессе zombie, но если вы убьете родительский процесс, дочерний процесс zombie будет "собран" и удален из таблицы процессов.</p><p>я давно не сталкивался с этой проблемой, поэтому не проверял, что представляет собой родительский процесс в этом сценарии. альтернативой уничтожению родительского процесса является перезагрузка вашей системы. :)</p>

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

<p>у меня эта проблема очень часто в последнее время. что могло бы предотвратить это? выход из системы и ее устранение устраняет проблему, но ... раздражает делать это время от времени.</p><p>правка:</p><p>я только что нашел причину. у меня была ошибка в методе applicationwillterminate. поэтому, когда я нажимаю кнопку "стоп" в окне xcode, приложение не может правильно завершиться и начинает зависать.</p><p>проверьте activity monitor, чтобы увидеть, есть ли ваше приложение в списке. принудительно выйти, если это возможно.</p>

<p>ну, нет ответов, но нужно сделать хотя бы еще один тест. откройте терминал и выполните команду: "ps-ael | grep z". если вы получили две записи, одну "(clang)", а другую - название вашего приложения или компании, вы попадаете - перезагрузитесь.</p><p>если вы разработчик, введите короткую ошибку и скажите apple, как сильно раздражает необходимость перезагрузки, и упомяните, что они могут дублировать эту ошибку до "rdar: // 10401934", который я только что ввел.</p><p>дэвид</p>

<p>сброс симулятора ios исправил ошибку для меня. хотя это удалит все приложения, которые есть в симуляторе, это устранит проблему без перезагрузки компьютера.</p><p>вы можете сбросить симулятор ios, выполнив следующие действия:</p><p>1) перейдите в меню "симулятор ios" рядом с логотипом apple () в левой части главного экрана.<br> 2) выберите "сбросить содержимое и настройки ...".<br> 3) прочитайте всплывающее сообщение и, если вы согласны, нажмите "сброс", в противном случае нажмите "не сбрасывать".</p>

<p>я получил эту ошибку при отладке приложения на iphone 4. тяжелая перезагрузка iphone решила мою проблему. (выключение iphone зависло ...)</p><p>у меня не было никакого процесса зомби на моем mac, и перезагрузка mac не решила проблему.</p><p>может быть, эта ошибка может проявиться как на симуляторе, так и на реальных устройствах ???</p>

<p>эта ошибка часто случается со мной, почти каждый раз, когда я тестирую приложение в симуляторе, заставляя меня перезагружаться.</p><p>вот обходной путь, если вы хотите сделать некоторую работу:</p><ul> <li>нажмите ваш проект в навигаторе проекта</li> <li>go <strong>target</strong> -> <strong>info</strong></li> <li>добавьте ключ для <em> приложение не работает в фоновом режиме </em> и имеет значение <code>yes</code>.</li> </ul><p>это будет означать, что при нажатии кнопки "домой" в симуляторе или выходе из симулятора приложение не зависает.</p><p>не забудьте изменить эту настройку перед распространением! поместите это в свой контрольный список релиза :)</p>

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

<p>перезапустил устройство, сработало! : d</p><p>спасибо всем за отличные предложения.</p>

<p>у меня была проблема, о которой упоминает @jyap с процессами зомби. единственный способ очистить их - перезагрузить компьютер. однако я заметил, что мои друзья, работающие над одним и тем же проектом, столкнутся с той же проблемой, но могут убить симулятор, не создавая процесс зомби. я полностью удалил xcode и переустановил его, и, хотя я все еще получаю сообщение об ошибке, он не создает зомби-процессы, поэтому мне не нужно перезагружаться.</p><p>до того, как я это сделал, я использовал этот действительно уродливый обходной путь: измените идентификатор своего приложения и запустите снова. в итоге вы получите ненужные копии приложения в симуляторе, но можете отложить перезагрузку на некоторое время.</p>

<p>альтернативное решение:</p><ul> <li>дайте вашему приложению новый идентификатор. если он называется com.foobar.myapp, назовите его com.foobar.myapp01</li> </ul><p>вы теряете все данные в приложении, поскольку на самом деле это новое приложение, работающее в том, что касается симулятора iphone. это может или не может быть более раздражающим, чем перезагрузка - просто хотел добавить его в список.</p>

<ol> <li>закрыть симулятор</li> <li>остановите приложение от запуска в xcode.</li> <li>откройте <strong>activity monitor</strong> и найдите <strong>процесс запущен</strong> с помощью <strong>имя приложения</strong>.</li> <li>убейте этот процесс в activity monitor</li> <li>перестройте свой проект и у вас все будет готово</li> </ol>

<p>у меня была та же проблема, и я решил ее, выполнив следующее</p><ul> <li>удаление приложения с устройства,</li> <li>отключение устройства от mac,</li> <li>выключить и снова включить устройство,</li> <li>выход и перезапуск xcode,</li> <li>выход из инструментов,</li> <li>наконец, очистить и построить снова.</li> </ul><p>я также сделал еще одну вещь, потому что xcode настроен на использование ios 5.0, а мой проект использует ios 4.3</p><ul> <li>удалите все рамки и добавьте их снова.</li> </ul>

<p>у меня был рекурсивный сеттер, который дул сквозь стек и убил мое приложение таким образом, что мне пришлось загружать ipad. это было доказуемо с исправлением в коде.</p>

<p><strong>причина</strong></p><p>запуск вашего приложения в симуляторе до полной остановки ранее запущенного приложения.</p><p><strong>исправление</strong></p><p>подождите, пока вы не увидите, что кнопка "стоп" снова станет активной, прежде чем снова запускать.</p><p>(я использую xcode 4.2.1. эта проблема возникала очень часто при обновлении до os x lion).</p>

<p>у меня только что была эта ошибка. я попытался перезапустить симулятор и xcode, но мой проект снова заработал только после очистки и сборки. понятия не имею, что вызвало это.</p>

<p>я думаю, что это вызвано принудительным выходом из приложения на iphone до нажатия кнопки остановки в xcode. иногда, когда вы нажимаете кнопку остановки в xcode, тогда требуется дополнительное время, чтобы выйти из приложения, если оно зависло. но просто будьте терпеливы, это в конечном итоге будет прекращено большую часть времени.</p>

<p>нет необходимости перестраивать или переустанавливать для моей проблемы, и в моем случае ошибка возникла при попытке запустить приложение на iphone. симулятор работал нормально.</p><p>решение: удалите приложение с телефона, выполните холодный перезапуск телефона, и теперь все в порядке.</p>

<p>исправлено: перезагрузка телефона после удаления приложения, затем восстановление его в чистоте и запуск снова. работает нормально сейчас.</p><p>weird.</p>

<p>многое для меня произошло с xcode 4.2.1 на lion. обновился до 4.3.2 и больше этого не происходит. рад, что они это исправили.</p>

<p>майк эш <a href="http://www.mikeash.com/pyblog/solving-simulator-bootstrap-errors.html">опубликовал решение</a> (храни его бог!), который не требует перезагрузки. просто беги:</p><pre><code>launchctl list|grep uikitapplication|awk '{print $3}'|xargs launchctl remove </code></pre><blockquote> <p>вышеприведенная команда выводит список всех запущенных заданий, ищет одно с uikitapplication в имени (которое будет заданием, соответствующим вашему приложению, которое неправильно задвигается), извлекает имя и указывает launchd избавиться от этого задания.</p> </blockquote>

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

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

<p>боже мой - я пробовал все, что перечислено выше и в других постах. переустановил xcode, перезагрузил мой компьютер, скопировал все недостающие файлы в нужные папки ... в конце концов я сделал резервную копию своего iphone, вытер его и восстановил, и это сработало!</p><p>я думаю, что, возможно, причиной чтения и вокруг этого было отключение моего белого iphone, он работал с инструментами производительности, улавливающими утечки. или что-то в этом роде.</p><p>аааа, большой вздох облегчения.</p>

<p><strong>если вы запускаете тесты из командной строки,</strong> (используя <code>xcodebuild test</code>), убедитесь, что симулятор запуска соответствует устройству, на котором вы ожидаете запустить тесты.</p><p>возможно, вы запускаете тесты командной строки, использующие iphone 5. если вы работали с iphone 6 в рекламе xcode, затем запустите тесты командной строки, иногда iphone 6 будет продолжать работать, и вам нужно будет вручную выбрать устройство iphone 5, а затем запустить тесты снова.</p>

<p>эта ошибка возникала в более старых версиях симулятора ios, поскольку более старые экземпляры задания на другом устройстве, которое завершало работу, могли конфликтовать с новым экземпляром.</p><p>ios 6.0 и более поздние версии не должны сталкиваться с подобными проблемами, поскольку в ios 6.0 введено использование подмножеств bootstrap, а в ios 7.0 введено использование выделенного сервера bootstrap (launchd\_sim), который полностью изолирован с сервера bootstrap хоста.</p>

<p>в самом худшем состоянии <strong>сбросить содержимое и настройки</strong> ios simulater, и в большинстве случаев в моем случае выход из xcode вместе с симулятором всегда работает для меня с xcode4.6 (который часто зависает)</p>

<p>я сталкивался с такой проблемой один раз в моем случае вот что я сделал</p><ol> <li>удалить приложение из симулятора.</li> <li>удалить папку производных данных.</li> <li>выполните чистое действие в проекте, выбрав меню продукта - очистить</li> <li>сброс симулятора.</li> <li>выйти из xcode.</li> <li>попробуйте запустить проект сейчас, если он работает нормально, иначе перейдите к шагу 7</li> <li>повторите все шаги с 1 по 5, а затем перезагрузите компьютер.</li> </ol><p>в большинстве случаев я запускал его на шаге 6, в крайних случаях мне приходилось перезагружать машину.</p>