statut: ce qui a été vu récemment en Mac OS 10.8 et Xcode 4.4.
tl;dr: Cela peut se produire dans deux contextes: lors de l'exécution sur l'appareil et lors de l'exécution sur le simulateur. Lors de l'exécution sur l'appareil, le débrancher et de rebrancher l'appareil semble arranger les choses.
Mike Cendres suggéré
launchctl list|grep UIKitApplication|awk '{print $3}'|xargs launchctl remove
Cela ne fonctionne pas tout le temps. En fait, il n'a jamais travaillé pour moi, mais il fonctionne bien dans certains cas. Juste ne sais pas quels cas. Alors, il vaut la peine d'essayer.
Sinon, le seul moyen de résoudre ce problème est de redémarrer l'utilisateur launchd. Le redémarrage va le faire, mais il est moins radical, plus rapide. Vous aurez besoin de créer un autre utilisateur admin, mais vous ne devez le faire qu'une fois. Quand les choses coin, déconnectez-vous, comme vous-même, connectez-vous en tant qu'utilisateur, et de tuer les launchd qui appartient à votre utilisateur principal, par exemple,
sudo kill -9 `ps aux | egrep 'user_id .*[0-9] /sbin/launchd' | awk '{print $2}'`
en remplaçant votre principal nom d'utilisateur pour user_id
. De vous connecter à nouveau que votre utilisateur normal, vous reçoit de retour à un état sain. Un peu douloureux, mais moins qu'un redémarrage.
détails:
Cela a commencé arrive plus souvent avec Lion/Xcode 4.2. (Personnellement, je n'ai jamais vu avant cette combinaison.)
Le bug semble être dans launchd, qui hérite de l'application de processus comme un enfant lorsque le débogueur s'arrête de débogage sans le tuer. C'est généralement signalée par l'application de devenir un zombie, d'avoir un état de processus de Z dans ps.
Le problème principal semble être dans le bootstrap serveur de nom qui est mis en œuvre dans launchd. Ce (dans la mesure où je comprends bien, les cartes, les id d'application de mach ports. Lorsque le bug est déclenchée, l'application meurt mais ne sont pas nettoyés de l'amorçage du serveur nom du serveur de la carte et, par conséquent, le bootstrap serveur refuse de permettre à une autre instance de l'application pour être enregistrés sous le même nom.
Il est à espérer (voir les commentaires) que le fait de forcer launchd pour wait()
pour le zombie allait arranger les choses, mais il ne le fait pas. Ce n'est pas le zombie statut qui est le cœur du problème (c'est pourquoi certains zombies sont bénignes), mais le bootstrap nom de serveur et il n'y a pas moyen de désactiver cette avant de tuer launchd.
On dirait que le bug est déclenchée par quelque chose de mauvais entre Xcode, gdb, et l'utilisateur launchd. J'ai juste répété de la cale par l'exécution d'une application dans le simulateur d'iphone, l'avoir arrêté de gdb, et ensuite de faire un build and run à l'ipad simulateur. Il semble être sensible à la commutation des simulateurs (iOS 4.3/iOS 5, l'iPad/iPhone). Ça n'arrive pas tout le temps mais assez souvent quand je suis passer simulateurs beaucoup.
Tuer launchd pendant que vous êtes connecté à vis de votre session. La déconnexion et la reconnexion ne tue pas l'utilisateur launchd; OS X conserve le processus existant autour de. Un redémarrage sera réparer les choses, mais que c'est douloureux. Les instructions ci-dessus sont plus rapides.
J'ai envoyé un bug à Apple, FWIW. rdar://10330930