iOS: extraño error al probar en el simulador

Estaba probando mi aplicación en el simulador cuando se bloqueó al hacer clic en un botón de UIAlertView. Dejé de depurar allí, realicé algunos cambios en el código y volví a crear la aplicación. 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á colgada en el depurador. Señal recibida del progtwig: “SIGABRT”.

Traté de eliminar la aplicación del simulador, haciendo una comstackción limpia, pero sigo teniendo este error cuando bash ejecutar la aplicación.

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

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

estado: esto se ha visto 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 funcionó para mí, 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 launchd del usuario. El reinicio hará eso, pero hay una manera menos drástica / más rápida. Tendrá que crear otro usuario administrador, pero solo tiene que hacer eso una vez. Cuando las cosas encajen, 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 tu usuario principal por user_id . Iniciando sesión nuevamente cuando su usuario normal lo devuelve a un estado de salud. Un poco doloroso, pero menos que un reinicio completo.

detalles:

Esto comenzó 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 elemento secundario cuando el depurador deja de depurarlo sin matarlo. Esto generalmente es señalado por la aplicación convirtiéndose en un zombie, teniendo un estado de proceso de Z en ps.

El problema principal parece estar en el servidor de nombre de arranque que se implementa en launchd. Esto (en la medida en que lo entiendo) correlaciona identificadores de aplicaciones con puertos mach. Cuando se activa el error, la aplicación muere pero no se borra 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 launchd para wait() para el zombie arreglaría las cosas pero no es así. No es el estado de los zombis el problema central (por eso algunos zombis son benignos), sino el servidor de nombres bootstrap y no hay forma conocida de borrar 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éndola en gdb, y luego haciendo una comstackción y corriendo al 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 estoy cambiando simuladores mucho.

Matar launchd 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

Encuentro que comencé 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í se explica cómo determinar si necesita reiniciar rápidamente.

Enumera todos tus procesos Zombie:

 ps -el | grep 'Z' 

Si ve su aplicación enumerada 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á colgada en el depurador”. Bueno, Xcode está detectando este proceso Zombie que no puedes matar. La única forma en que puede solucionarlo es reiniciando el sistema. 🙁

EDITAR, 20120823: Tengo un mejor conocimiento de los procesos de Zombie, así que quería actualizar esta respuesta. Se crea un proceso de Zombie cuando un proceso principal no llama a wait () (espera a que el proceso cambie de estado) en un proceso hijo de terminación. No puede ejecutar ‘kill’ directamente en un proceso Zombie pero si mata el proceso principal, el proceso hijo zombie será ‘cosechado’ y eliminado de la tabla de proceso.

No he visto este problema en mucho tiempo, por lo que no he inspeccionado para ver cuál es el proceso principal en este escenario. La alternativa para matar el proceso principal es reiniciar su sistema. 🙂

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

Estoy teniendo este problema muy a menudo recientemente. ¿Qué evitaría que esto ocurriera? Cerrar la sesión y solucionar el problema, pero … es molesto hacerlo cada cierto tiempo.

EDITAR:

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

revisa Activity Monitor para ver si tu aplicación está en la lista. dejar de fumar si es posible.

Si encuentra que su problema se debe a procesos zombie:

  ps -el |  grep 'Z' 

(como en el comentario anterior https://stackoverflow.com/a/8104400/464289 ) y solo quiere solucionar el problema de inmediato, puede hacerlo sin reiniciar o matar nada. Simplemente cambie el nombre de su ejecutable objective de proyecto:

  1. Haga clic en el proyecto en el panel izquierdo
  2. Seleccione Configuraciones de comstackción en el panel central
  3. En ” Packaging “, cambie ” Nombre del producto ” de $ (TARGET_NAME) a ​​$ (TARGET_NAME) .1

¡Fácil!

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 obtienes dos entradas, una “(clang)” y la otra tu aplicación o nombre de la empresa, te rocían con una manguera: reinicia.

Si usted es un desarrollador, ingrese un error corto y dígale a Apple que es absolutamente molesto tener que reiniciar, y mencione que puede duplicar este error a “rdar: // 10401934” que acabo de ingresar.

David

Restablecer el simulador de iOS 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 la pantalla principal.
2) Seleccione “Restablecer contenido y configuración …”.
3) Lea el mensaje emergente y si acepta, haga clic en “Restablecer” de lo contrario, haga clic en “No reiniciar”.

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

Antes de hacerlo, estaba usando esta solución realmente fea: cambie su ID de 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.

Este error me pasa 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 hacer algún trabajo:

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

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

¡No olvide cambiar esta configuración antes de la distribución! Ponlo en tu lista de lanzamiento 🙂

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 creen que hay una instancia de la aplicación ejecutándose, por lo tanto, cuando se ejecutó por última vez no finalizó correctamente a un error en su código o el teléfono / simulador solo quería tener un gemido.

Obtuve este error al depurar mi aplicación en un iPhone 4. El reinicio del iPhone resolvió mi problema. (Apagando el iPhone colgado …)

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

¿Tal vez este error puede manifestarse tanto en el simulador como en los dispositivos reales?

Reinició el dispositivo, ¡funcionó! :RE

Gracias a todos por las excelentes sugerencias.

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

Tenía un setter recursivo que sopló a través de la stack y mató a mi aplicación de tal manera que tuve que encender mi iPad. Fue demostrable con una corrección en el código.

  1. Cerrar simulador
  2. Detenga la aplicación para que no se ejecute en xCode.
  3. Abra el Monitor de actividad y busque un proceso que se ejecute con su NOM de la aplicación .
  4. Mata este proceso en Activity Monitor
  5. Reconstruye tu proyecto y deberías estar todo listo

Tuve el mismo problema y lo resolví haciendo lo siguiente

  • Eliminar la aplicación del dispositivo,
  • Desconectando el dispositivo de Mac,
  • Apagar el dispositivo y volver a encenderlo
  • Salir y reiniciar Xcode,
  • Abandonar instrumentos,
  • Por último, limpiar y construir 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.

Alternativa alternativa:

  • Dale a tu aplicación un nuevo identificador. Si se llama com.foobar.myapp, llámalo com.foobar.myapp01

Perderá todos los datos en la aplicación, ya que en realidad se trata de 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.

La causa

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

La solución

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

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

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

Extraño.

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

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

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

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

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

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

Creo que esto es causado por la fuerza: salir de tu aplicación en el iPhone antes de presionar el botón de detener en Xcode. A veces, cuando presiona el botón de detener en Xcode, toma más tiempo para salir de la aplicación si se colgó. Pero solo sea paciente, eventualmente abandonará la mayor parte del tiempo.

Puede asignar variable en función o pestaña. Se cerrará si su función o pestaña se cierra. Entonces debe declararlo como variable miembro o variable global.

Estaba recibiendo 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 pulso detener en la barra de herramientas antes de intentar ejecutar, todavía no he encontrado ningún proceso zombie.

Oh mi – Probé TODO lo mencionado arriba y en otras publicaciones. Volví a instalar Xcode, reinicié mi máquina, copié todos los archivos que faltaban 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 leer en y alrededor de esto fue desconectar mi iphone blanco que funcionaba con herramientas de rendimiento detectando fugas. O algo así.

Aaaah, gran suspiro de alivio.

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)

Enfrenté este tipo de problema una vez que 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. Restablece el simulador.
  5. Salga de Xcode.
  6. Intenta ejecutar el proyecto ahora si funciona bien, ve 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 casos extremos que tuve que reiniciar mi máquina.

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

iOS 6.0 y posterior 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 servidor.