iOS-странная ошибка при тестировании на симуляторе

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

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

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

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

30 ответов


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


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

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

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

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

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

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

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

детали:

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

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

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

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

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

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

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


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

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

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

Список всех ваших процессов зомби:

ps -el | grep 'Z'

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

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

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


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


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

EDIT:

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

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


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

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

легко!


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

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

Дэвид


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

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

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


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

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


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

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

  • щелкните проект в навигаторе проектов
  • Go цель -> Info
  • добавить ключ приложение не работает в фоновом режиме и установлено YES.

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

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


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


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

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

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


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

спасибо всем за отличные советы.


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


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


  1. закрыть симулятор
  2. остановить приложение от запуска в xCode.
  3. открыть Монитор Активности и

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

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

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

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

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

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

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


Причиной

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

Исправления

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

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


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

странно.


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

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


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


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

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

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


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


вы можете к alloc переменной во вкладке "функции" или. Он будет dealloc если вкладка функция или бросить. Поэтому вы должны объявить его переменной-члену или глобальной переменной.


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


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

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

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


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


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

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

в большинстве случаев я получил его на шаге 6 экстремальных случаев мне пришлось перезагрузить машину.


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

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