Error al probar en el simulador de iOS: no se pudo registrar con el servidor de arranque

370

Estaba probando mi aplicación en el simulador cuando se bloqueó al hacer clic en un botón de un UIAlertView. Dejé de depurar allí, hice algunos cambios en el código y construí la aplicación nuevamente. Ahora, cuando ejecuto la aplicación, aparece este error en la consola.

No se pudo registrar com.myApp.debug con el servidor de arranque. Error: código de error desconocido. Esto generalmente significa que otra instancia de este proceso ya se estaba ejecutando o está bloqueada en el depurador. Señal recibida del programa: "SIGABRT".

Intenté eliminar la aplicación del simulador, haciendo una compilación limpia, pero sigo recibiendo este error cuando intento ejecutar la aplicación.

¿Qué debo hacer para poder volver a ejecutar la aplicación en mi simulador?

perdido en el transito
fuente
2
¿Alguna sugerencia sobre qué hacer cuando esto sucede durante las pruebas en el dispositivo? He intentado reiniciar el dispositivo, Xcode.
iPadDeveloper2011
1
También intenté eliminar la aplicación en el dispositivo, cerrando todas las aplicaciones activas (haga doble clic en Inicio, mantenga presionado el ícono de la aplicación, toque el signo '-'), reinicie Xcode, cierre la sesión y vuelva a iniciarla. Nada funciona hasta ahora.
iPadDeveloper2011
Intente "Vaciar caché" en el menú XCode. Eso también ayuda.
lostIn transit
3
Para todos los que enfrentan este problema, más tarde descubrieron que esto sucede la mayoría de las veces debido a un error en el código. Busque algún fragmento de código que requiera mucho tiempo de ejecución o que ponga la aplicación en un bucle.
lostIn tránsito
44
Cuando eso sucede, simplemente mato el SimulatorBridge y salgo del simulador. ps ax | grep SimulatorBridge
Elland

Respuestas:

162

¿Intenta salir y reiniciar el simulador? Si "lo peor llega a lo peor", siempre puede intentar reiniciar: en mi experiencia, esto debería solucionarlo.

Elliot Kroo
fuente
44
¡Terminé reiniciando el sistema! Sin embargo, todavía no sé qué causó el problema.
lostIn transit
66
Como dice el comentario a continuación, generalmente puede ver el proceso bloqueado en el Monitor de actividad y matarlo allí.
mxcl
13
Odio reiniciar :) Salir del proceso bloqueado funcionó para mí: ps ax | grep Simulator mostrará sus aplicaciones en ejecución, en mi caso fue MyApp.app que se colgó.
BadPirate
12
Reiniciar no ayudó
Pascal Klein
10
A menudo obtengo esto en XCode 4.3. Reiniciar la aplicación o salir del simulador no ayuda. Tengo que reiniciar la computadora para que funcione.
Øystein
242

estado: esto se ha visto tan recientemente como Mac OS 10.8 y Xcode 4.4.

tl; dr: Esto puede ocurrir en dos contextos: cuando se ejecuta en el dispositivo y cuando se ejecuta en el simulador. Cuando se ejecuta en el dispositivo, desconectar y volver a conectar el dispositivo parece arreglar las cosas.

Mike Ash sugirió

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

Esto no funciona todo el tiempo. De hecho, nunca me ha funcionado, pero claramente funciona en algunos casos. Simplemente no sé qué casos. Entonces vale la pena intentarlo.

De lo contrario, la única forma conocida de solucionar esto es reiniciar el usuario launchd. Reiniciar hará eso, pero hay una forma menos drástica / más rápida. Deberá crear otro usuario administrador, pero solo tiene que hacerlo una vez. Cuando las cosas se cumplan, cierre la sesión como usted mismo, inicie sesión como ese usuario y elimine el launchd que pertenece a su usuario principal, por ejemplo,

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

sustituyendo su nombre de usuario principal por user_id. Iniciando sesión nuevamente cuando tu usuario normal te devuelve a un estado sensato. Un poco doloroso, pero menos que un reinicio completo.

detalles:

Esto ha comenzado a suceder más a menudo con Lion / Xcode 4.2. (Personalmente, nunca lo vi antes de esa combinación).

El error parece estar en launchd, que hereda el proceso de la aplicación como un niño cuando el depurador deja de depurarlo sin matarlo. Por lo general, esto se indica cuando la aplicación se convierte en zombie y tiene un estado de proceso de Z en ps.

El problema principal parece estar en el servidor de nombres de arranque que se implementa en launchd. Esto (en la medida en que lo entiendo) asigna los identificadores de las aplicaciones a los puertos mach. Cuando se activa el error, la aplicación muere pero no se limpia del mapa del servidor de nombres del servidor de arranque y, como resultado, el servidor de arranque se niega a permitir que otra instancia de la aplicación se registre con el mismo nombre.

Se esperaba (ver los comentarios) que forzar el lanzamiento wait()para el zombie arreglaría las cosas, pero no lo hace. El problema principal no es el estado de zombie (por eso algunos zombis son benignos), sino el servidor de nombres de bootstrap y no hay una forma conocida de despejar este corto de matar a launchd.

Parece que el error se desencadena por algo malo entre Xcode, gdb y el usuario launchd. Acabo de repetir la cuña ejecutando una aplicación en el simulador de iPhone, deteniéndolo dentro de gdb, y luego haciendo una compilación y ejecutando el simulador de ipad. Parece ser sensible a los simuladores de conmutación (iOS 4.3 / iOS 5, iPad / iPhone). No sucede todo el tiempo, pero con bastante frecuencia cuando cambio mucho los simuladores.

Matar lanzado mientras estás conectado arruinará tu sesión. Cerrar sesión y volver a iniciar sesión no mata al usuario launchd; OS X mantiene el proceso existente. Un reinicio arreglará las cosas, pero eso es doloroso. Las instrucciones anteriores son más rápidas.

He enviado un error a Apple, FWIW. rdar: // 10330930

smparkes
fuente
2
Gracias por la explicación detallada del nuevo comportamiento de Lion / XCode4.2. Parece suceder más a menudo al depurar dos aplicaciones separadas.
samkass
2
No es solo Lion. Todavía uso Snow Leopard aquí y veo este error muchas veces desde que utilicé XCode 4.2. (Solía ​​usar XCode 3.x hasta que se lanzó iOS SDK 5.0.)
Jonny
3
Gracias por la información ... Esto está sucediendo increíblemente frecuente para mí recientemente ... Dos veces en los últimos 10 minutos. Es un poco difícil lograr un flujo de trabajo sólido cuando tengo que reiniciar constantemente. Bueno, apagado para reiniciar mi computadora nuevamente.
Brad Goss
1
@smparkes: en realidad parece suceder con más frecuencia que antes. Simplemente cambio el bundleID y todo vuelve a funcionar, pero es molesto cuando trabajo con la lógica CoreData que está intentando depurar. Sin embargo, menos molesto que reiniciar, lo admito.
Mike A
2
4.3.1 y sucedió hace un momento ... tan molesto. Para mí, reiniciar el iPhone en sí lo resuelve normalmente, no necesito reiniciar mi Mac. Su tarta sucedió con XCode 4.2 bajo Snow Leopard, en algún momento alrededor de septiembre de 2011 para mí.
TheEye
70

Me parece que he comenzado a tener este problema con Lion + Xcode 4.2. También he experimentado el problema en Xcode 4.3.

He intentado todas las sugerencias, pero ninguna de ellas ha funcionado más que un reinicio completo.

Aquí es cómo determinar si necesita reiniciar rápidamente.

Enumere todos sus procesos de Zombie:

ps -el | grep 'Z'

Si ve que su aplicación aparece como un proceso Zombie, deberá reiniciar su máquina. El mensaje de error indica "Esto generalmente significa que otra instancia de este proceso ya se estaba ejecutando o está bloqueada en el depurador". Bueno, Xcode está detectando este proceso Zombie que no puedes matar. La única forma de solucionarlo es con un reinicio del sistema. :(

EDIT, 20120823: tengo un mejor conocimiento de los procesos de Zombie, así que quería actualizar esta respuesta. Un proceso Zombie se crea cuando un proceso padre no llama a wait () (espera a que el proceso cambie de estado) en un proceso hijo que finaliza. No puede ejecutar 'kill' directamente en un proceso Zombie, pero si elimina el proceso padre, el proceso hijo zombie se 'cosechará' y se eliminará de la tabla de procesos.

No he visto este problema en mucho tiempo, así que no he inspeccionado para ver cuál es el proceso principal en este escenario. La alternativa a matar el proceso padre es reiniciar su sistema. :)

jyap
fuente
Gracias, tuve 7 instancias de 3 programas en los que estaba trabajando para ejecutar como zombies.
ArtSabintsev
1
El reinicio es suficiente pero no necesario, como se mencionó anteriormente. Además, a veces hay zombis que no causan el problema, por lo que buscar zombis de esta manera no es realmente una medida confiable. El único signo seguro es el mensaje en Xcode.
smparkes
¿Has intentado matar estos procesos zombies como root? Reinicié antes de pensar en hacerlo.
Ryan H.
1
@smparkes, sí, eso es obvio en base a esta pregunta que analiza este mensaje de error.
jyap
1
@HZC, sí, no puedes matar procesos zombies ni siquiera como root.
jyap
20

Simplemente me sucedió esto: estaba recibiendo el error solo en mi dispositivo y el simulador funcionaba bien. Terminé teniendo que restablecer mi dispositivo y el error desapareció.

n3wscott
fuente
1
mismo aquí, reinició el dispositivo y desapareció. El simulador funcionó bien
agente_secreto
15

Tengo este problema muy a menudo recientemente. ¿Qué evitaría que esto ocurra? Cerrar sesión y solucionarlo soluciona el problema, pero ... es molesto hacerlo de vez en cuando.

EDITAR:

Acabo de encontrar la causa. Tuve un error en el método ApplicationWillTerminate. Entonces, cuando hago clic en el botón detener en la ventana Xcode, la aplicación no pudo finalizar correctamente y comenzó a bloquearse.

verifique el Monitor de actividad para ver si su aplicación está en la lista. forzar la salida si es posible.

cantó
fuente
2
¡Esto me lo arregló! ps aux | grep Simulator
Jason Prado
Si me ayuda, creo este error al iniciar Leak Performance Tools
IssamTP,
14

Si encuentra que su problema se debe a procesos zombies:

ps -el | grep 'Z'
(como en el comentario anterior https://stackoverflow.com/a/8104400/464289 ) y solo desea solucionar el problema de inmediato, puede hacerlo sin reiniciar ni matar nada. Simplemente cambie el nombre del ejecutable de destino del proyecto:

  1. Haga clic en el proyecto en el panel izquierdo.
  2. Seleccione Configuración de compilación en el panel central
  3. En ' Empaque ', cambie ' Nombre del producto ' de $ (TARGET_NAME) a ​​$ (TARGET_NAME) .1

¡Fácil!

JRG
fuente
esto no funcionó para mí, recibí el mismo error que recibí: el perfil de aprovisionamiento 'mataleao2' especifica el Identificador de aplicación 'au.com.mataleao' que no coincide con la configuración actual 'au.com.mataleao-1'
sapatos
¿Estás probando en el simulador o en el iPhone?
JRG
Estoy probando el iPhone sólo, teh funcionalidad Estoy probando sólo funcionará en el teléfono
sapatos
7

Bueno, no hay respuestas, pero al menos una prueba más para hacer. Abra la Terminal y ejecute este comando: "ps-Ael | grep Z". Si obtiene dos entradas, una "(clang)" y la otra, el nombre de su aplicación o empresa, está conectado: reinicie.

Si usted es un desarrollador, ingrese un pequeño error y dígale a Apple lo absolutamente molesto que es reiniciar, y mencione que pueden duplicar este error en "rdar: // 10401934" que acabo de ingresar.

David

David H
fuente
5

Restablecer el simulador de iOS me solucionó el error. Aunque esto eliminará todas las aplicaciones que tiene en Simulator, soluciona el problema sin tener que reiniciar la máquina.

Puede restablecer su simulador de iOS haciendo lo siguiente:

1) Vaya al menú "Simulador de iOS", junto al logotipo de Apple () en el extremo izquierdo de su pantalla principal.
2) Seleccione "Restablecer contenido y configuración ...".
3) Lea el mensaje emergente y, si está de acuerdo, haga clic en "Restablecer", de lo contrario, haga clic en "No restablecer".

Domthinks
fuente
3
No ayuda un poco, en su lugar, pierde todo su contenido / aplicaciones / fotos / contactos
extraño
1
@strange es simulador. de todos modos no contiene ninguna información importante. :)
Evgen Bodunov
5
  1. Cerrar simulador
  2. Deje de ejecutar la aplicación en xCode.
  3. Abra Activity Monitor y busque un proceso que se ejecute con su NOMBRE de la aplicación .
  4. Mata este proceso en Activity Monitor
  5. Reconstruye tu proyecto y deberías estar listo
negrelja
fuente
El proceso parece ser inmune a ser asesinado en el Monitor de actividad, incluso con "Force Quit"
Ferruccio
4

Tuve el problema que @jyap menciona con los procesos zombie. La única forma de eliminarlos era reiniciar. Sin embargo, noté que mis amigos que trabajan en el mismo proyecto tendrían el mismo problema pero podrían matar el simulador sin crear un proceso zombie. Desinstalé completamente Xcode y lo reinstalé, y aunque sigo recibiendo el error, no crea procesos zombies, por lo que no tengo que reiniciar.

Antes de hacer eso, estaba usando esta solución realmente fea: cambie la ID de su aplicación y vuelva a ejecutarla. Terminas con copias basura de la aplicación en el simulador, pero puedes posponer el reinicio por un tiempo.

Christopher Pickslay
fuente
4

Este error me sucede mucho, casi cada vez que pruebo la aplicación en el simulador, lo que me obliga a reiniciar.

Aquí hay una solución alternativa si desea realizar algún trabajo:

  • Haga clic en su proyecto en el navegador de proyectos
  • Ir a destino -> Información
  • Agregar una clave para la aplicación no se ejecuta en segundo plano y establecer en YES.

Esto significará que cuando presiona el botón de inicio en el simulador o sale del simulador, la aplicación no se bloquea.

¡No olvide volver a cambiar esta configuración antes de la distribución! Ponlo en tu lista de verificación de lanzamiento :)

Chris Burt-Brown
fuente
1
Esto es peligroso, ya que le impide probar el comportamiento en segundo plano hasta que recuerde volver a cambiarlo.
tc.
@tc: Sí, estoy de acuerdo. Sin embargo, si se ve obligado a reiniciar cada vez que ejecuta su aplicación iOS (que era lo que tenía), entonces esto puede ser mejor que la alternativa.
Chris Burt-Brown
4

Si esto sucede al probar en el iPhone. Solo reinicia el teléfono. Por lo que me han dicho, el teléfono o el simulador todavía cree que hay una instancia de la aplicación ejecutándose, por lo que la última vez que se ejecutó no había terminado correctamente debido a un error en su código o al teléfono / simulador solo quería tener un gemido.

Popeye
fuente
4

Recibí este error al depurar mi aplicación en un iPhone 4. El reinicio del iPhone solucionó mi problema. (Apagando el iPhone colgado ...)

No tenía ningún proceso zombie en mi Mac y reiniciar la Mac no resolvió el problema.

¿Quizás este error puede manifestarse tanto en el simulador como en los dispositivos reales?

craig
fuente
4

¡Reinicié el dispositivo, funcionó! :RE

Gracias a todos por las excelentes sugerencias.

Haris Hussain
fuente
3

Acabo de tener este error. Intenté reiniciar el simulador y Xcode pero mi proyecto solo funcionaría nuevamente después de una limpieza y compilación. No tengo idea de qué lo causó.

Daniel Wood
fuente
3

Tuve un setter recursivo que explotó en la pila y eliminó mi aplicación de tal manera que tuve que encender mi iPad. Fue demostrable con una solución en el código.

mobibob
fuente
3

Tuve el mismo problema y lo resolví haciendo lo siguiente

  • Eliminando la aplicación del dispositivo,
  • Desconectando el dispositivo de Mac,
  • Apagando y volviendo a encender el dispositivo,
  • Saliendo y relanzando Xcode,
  • Dejar instrumentos
  • Finalmente, limpia y construye de nuevo.

También hice una cosa más, porque Xcode está configurado para usar iOS 5.0 y mi proyecto usa iOS 4.3

  • Elimine todos los marcos y agréguelos nuevamente.
Joey
fuente
La pregunta es para el simulador. no para dispositivo
viral el
3

Solución alternativa:

  • Dele a su aplicación un nuevo identificador. Si se llama com.foobar.myapp, llámelo com.foobar.myapp01

Pierdes todos los datos en la aplicación, ya que en realidad es una nueva aplicación que se ejecuta en lo que respecta al simulador de iPhone. Esto puede o no ser más molesto que reiniciar, solo quería agregarlo a la lista.

n13
fuente
3

La causa

Ejecutar su aplicación en el simulador antes de que la aplicación que se ejecutaba anteriormente se haya detenido por completo.

La solución

Espere hasta que vea que el botón Detener se vuelve a activar antes de volver a ejecutarlo.

(Estoy usando Xcode 4.2.1. Este problema ocurrió con mucha frecuencia cuando actualicé a OS X Lion).

5 bares
fuente
Acabo de tener este error nuevamente. Intenté todo y finalmente un reinicio de iPad lo arregló.
bares
2

Se solucionó reiniciando mi teléfono después de eliminar la aplicación, luego reconstruyéndolo limpio y ejecutándolo nuevamente. Funciona bien ahora.

Extraño.

Tostada Coma
fuente
2

No es necesario reconstruir ni reinstalar para mi problema, y ​​en mi caso apareció el error al intentar ejecutar la aplicación en el iPhone. El simulador funcionó bien.

Solución: elimine la aplicación del teléfono, reinicie el teléfono en frío y ahora todo está bien.

timv
fuente
2

Me pasó mucho con Xcode 4.2.1 en Lion. Se actualizó a 4.3.2 y ya no sucede. Me alegro de que lo arreglaron.

tbag
fuente
2

Mike Ash publicó una solución (¡Dios lo bendiga!) Que no requiere reiniciar. Solo corre:

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

El comando anterior enumera todos los trabajos de launchd, busca uno con UIKitApplication en el nombre (que será el trabajo correspondiente a su aplicación que se pega incorrectamente), extrae el nombre y le dice a launchd que se deshaga de ese trabajo.

Jano
fuente
Tuve muchas oportunidades de probar esto (suspiro). A veces funciona, a veces tengo que reiniciar mi iPhone, o incluso mi Mac (el comando anterior dice "proceso no encontrado").
Jano
2

Creo que esto es causado por el cierre forzado de su aplicación en el iPhone antes de presionar el botón detener en Xcode. A veces, cuando presiona el botón de detener en Xcode, se tarda más tiempo en salir de la aplicación si se cuelga. Pero solo sea paciente, eventualmente dejará de funcionar la mayor parte del tiempo.

Tostada Coma
fuente
1

Puede asignar variables en función o pestaña. Se cerrará si su función o pestaña se cierra. Por lo tanto, debe declararla variable miembro o variable global.

bTagTiger
fuente
1

Recibía este error todo el tiempo hasta que dejé de confiar en el botón "Detener" en el cuadro de diálogo Ejecutar. Ahora que siempre presiono detener en la barra de herramientas antes de intentar ejecutar, aún no he encontrado ningún proceso zombie.

Angela
fuente
0

Oh Dios mío, probé TODO lo mencionado anteriormente y en otras publicaciones. Reinstalé Xcode, reinicié mi máquina, copié todos los archivos faltantes en las carpetas correctas ... Eventualmente hice una copia de seguridad de mi iPhone, lo limpié y lo restauré, ¡y funcionó!

Creo que lo que pudo haber sido la causa de la lectura en y alrededor de esto fue desconectar mi iphone blanco que estaba funcionando con herramientas de rendimiento que detectaban fugas. O algo por el estilo.

Aaaah, gran suspiro de alivio.

Smikey
fuente
0

En la peor condición, restablecer el contenido y la configuración de iOS Simulater, y la mayoría de las veces en mi caso, salir de XCode junto con el simulador, siempre funciona para mí con XCode4.6 (que con frecuencia se cuelga)

rptwsthi
fuente
0

Me enfrenté a este tipo de problema una vez en mi caso, esto es lo que hice

  1. Eliminar la aplicación del simulador.
  2. Eliminar la carpeta de datos derivados.
  3. Realice una acción limpia en el proyecto seleccionando el menú del producto - limpiar
  4. Restablecer el simulador.
  5. Salga de Xcode.
  6. Intente ejecutar el proyecto ahora si funciona bien; de lo contrario, vaya al paso 7
  7. Repita todos los pasos del 1 al 5 y luego reinicie su máquina.

En la mayoría de los casos, lo ejecuté en el paso 6. En casos extremos, tuve que reiniciar mi máquina.

usuario2538944
fuente
0

Este error solía ocurrir en versiones anteriores del simulador de iOS porque las instancias anteriores de un trabajo en otro dispositivo que se estaba cerrando podrían colisionar con la nueva instancia.

iOS 6.0 y versiones posteriores no deberían experimentar problemas como este porque iOS 6.0 introdujo el uso de subconjuntos de arranque y iOS 7.0 introdujo el uso de un servidor de arranque dedicado (launchd_sim) que está completamente aislado del servidor de arranque del host.

Jeremy Huddleston Sequoia
fuente