Erreur lors des tests sur le simulateur iOS: impossible de s'inscrire auprès du serveur d'amorçage

370

Je testais mon application sur le simulateur quand il s'est écrasé en cliquant sur un bouton d'un UIAlertView. J'ai arrêté le débogage là-bas, apporté quelques modifications au code et reconstruit l'application. Maintenant, lorsque j'exécute l'application, j'obtiens cette erreur dans la console

Impossible d'enregistrer com.myApp.debug avec le serveur d'amorçage. Erreur: code d'erreur inconnu. Cela signifie généralement qu'une autre instance de ce processus était déjà en cours d'exécution ou est bloquée dans le débogueur. Le programme a reçu le signal: «SIGABRT».

J'ai essayé de supprimer l'application du simulateur, en faisant une construction propre, mais j'obtiens toujours cette erreur lorsque j'essaie d'exécuter l'application.

Que dois-je faire pour pouvoir à nouveau exécuter l'application sur mon simulateur?

lostInTransit
la source
2
Des suggestions sur ce qu'il faut faire lorsque cela se produit lors des tests sur l'appareil? J'ai essayé de redémarrer l'appareil, Xcode.
iPadDeveloper2011
1
J'ai également essayé de supprimer l'application sur l'appareil, de quitter toutes les applications actives (double-cliquez sur home, maintenez le doigt sur l'icône de l'application, appuyez sur le signe '-') en redémarrant Xcode, en vous déconnectant et en vous reconnectant. Jusqu'à présent, rien ne fonctionne.
iPadDeveloper2011
Essayez "Vider le cache" dans le menu XCode. Ça aide aussi.
lostInTransit
3
Pour tout le monde confronté à ce problème, compris plus tard, cela se produit la plupart du temps en raison d'un bogue dans le code. Recherchez un morceau de code qui prend beaucoup de temps d'exécution ou qui met l'application en boucle.
lostInTransit
4
Lorsque cela se produit, je tue simplement le SimulatorBridge et quitte le simulateur. ps ax | grep SimulatorBridge
Elland

Réponses:

162

Essayez de quitter et de redémarrer le simulateur? Si «le pire vient au pire», vous pouvez toujours essayer de redémarrer: d'après mon expérience, cela devrait le réparer.

Elliot Kroo
la source
44
J'ai fini par redémarrer le système! Je ne sais toujours pas ce qui a causé le problème!
lostInTransit
6
Comme le dit le commentaire ci-dessous, vous pouvez généralement voir le processus bloqué dans le moniteur d'activité et le tuer là-bas.
mxcl
13
Je déteste redémarrer :) Quitter le processus bloqué a fonctionné pour moi: ps ax | grep Simulator affichera vos applications en cours d'exécution, dans mon cas, c'est MyApp.app qui a été suspendu.
BadPirate
12
Le redémarrage n'a pas aidé
Pascal Klein
10
J'obtiens souvent cela dans XCode 4.3. Redémarrer l'application ou quitter le simulateur n'aide pas. Je dois redémarrer l'ordinateur pour le faire fonctionner.
Øystein
242

état: cela a été vu aussi récemment que 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, la déconnexion et la reconnexion de l'appareil semblent résoudre les problèmes.

Mike Ash a suggéré

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

Ça ne marche pas tout le temps. En fait, cela n'a jamais fonctionné pour moi, mais cela fonctionne clairement dans certains cas. Je ne sais pas quels cas. Cela vaut donc la peine d'essayer.

Sinon, la seule manière connue de résoudre ce problème est de redémarrer l'utilisateur launchd. Le redémarrage le fera, mais il existe un moyen moins drastique / plus rapide. Vous devrez créer un autre utilisateur administrateur, mais vous ne devrez le faire qu'une seule fois. Lorsque les choses s'arrêtent, déconnectez-vous en tant que vous-même, connectez-vous en tant qu'utilisateur et tuez le 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 nom d'utilisateur principal par user_id. Connectez-vous à nouveau lorsque votre utilisateur normal vous ramène à un état sain. Un peu douloureux, mais moins qu'un redémarrage complet.

détails:

Cela a commencé à se produire plus souvent avec Lion / Xcode 4.2. (Personnellement, je ne l'ai jamais vu avant cette combinaison.)

Le bogue semble être dans launchd, qui hérite du processus d'application en tant qu'enfant lorsque le débogueur arrête de le déboguer sans le tuer. Cela est généralement signalé par l'application qui devient un zombie, avec un statut de processus de Z en ps.

Le problème principal semble être dans le serveur de noms d'amorçage qui est implémenté dans launchd. Ceci (dans la mesure où je le comprends) mappe les ID d'application aux ports mach. Lorsque le bogue est déclenché, l'application meurt mais n'est pas nettoyée de la carte du serveur de noms du serveur d'amorçage et, par conséquent, le serveur d'amorçage refuse d'autoriser l'enregistrement d'une autre instance de l'application sous le même nom.

On espérait (voir les commentaires) que forcer launchd to wait()pour le zombie résoudrait les choses, mais ce n'est pas le cas. Ce n'est pas le statut de zombie qui est le problème principal (c'est pourquoi certains zombies sont bénins) mais le serveur de noms de bootstrap et il n'y a aucun moyen connu de supprimer ce court-circuit de tuer launchd.

Il semble que le bogue soit déclenché par quelque chose de mauvais entre Xcode, gdb et l'utilisateur launchd. Je viens de répéter le coin en exécutant une application dans le simulateur d'iphone, en la faisant arrêter dans gdb, puis en faisant une construction et en exécutant vers le simulateur d'ipad. Il semble sensible à la commutation des simulateurs (iOS 4.3 / iOS 5, iPad / iPhone). Cela n'arrive pas tout le temps, mais assez fréquemment lorsque je change souvent de simulateur.

Tuer launchd pendant que vous êtes connecté gâchera votre session. Se déconnecter et se reconnecter ne tue pas l'utilisateur launchd; OS X conserve le processus existant. Un redémarrage réparera les choses, mais c'est douloureux. Les instructions ci-dessus sont plus rapides.

J'ai soumis un bogue à Apple, FWIW. rdar: // 10330930

smparkes
la source
2
Merci pour l'explication approfondie du nouveau comportement Lion / XCode4.2. Cela semble se produire plus souvent lors du débogage de deux applications distinctes.
samkass
2
Ce n'est pas seulement Lion. J'utilise toujours Snow Leopard ici et je vois cette erreur plusieurs fois depuis le passage à XCode 4.2. (Utilisé pour utiliser XCode 3.x jusqu'à la sortie du SDK iOS 5.0.)
Jonny
3
Merci pour l'info ... Cela se produit incroyablement fréquemment pour moi récemment ... Deux fois au cours des 10 dernières minutes. Un peu difficile d'obtenir un flux de travail solide lorsque je dois constamment redémarrer. Eh bien, off pour redémarrer mon ordinateur à nouveau.
Brad Goss
1
@smparkes: Cela semble en fait se produire plus fréquemment qu'auparavant. Je viens de changer le bundleID et tout fonctionne à nouveau, mais c'est ennuyeux lorsque vous travaillez avec la logique CoreData que vous essayez de déboguer. Moins ennuyeux que de redémarrer cependant, je l'admets.
Mike A
2
4.3.1 et c'est arrivé tout à l'heure ... tellement ennuyeux. Pour moi, le redémarrage de l'iPhone lui-même le résout normalement, je n'ai pas besoin de redémarrer mon Mac. Cela s'est passé avec XCode 4.2 sous Snow Leopard, vers septembre 2011 pour moi.
TheEye
70

Je trouve que j'ai commencé à avoir ce problème avec Lion + Xcode 4.2. J'ai également rencontré le problème dans Xcode 4.3.

J'ai essayé toutes les suggestions mais aucune d'entre elles n'a fonctionné autre qu'un redémarrage complet.

Voici comment déterminer si vous avez besoin d'un redémarrage rapide.

Énumérez tous vos processus Zombie:

ps -el | grep 'Z'

Si vous voyez votre application répertoriée comme un processus Zombie, vous devrez redémarrer votre machine. Le message d'erreur indique "Cela signifie généralement qu'une autre instance de ce processus était déjà en cours d'exécution ou est bloquée dans le débogueur". Eh bien, Xcode détecte ce processus Zombie que vous ne pouvez pas tuer. La seule façon de résoudre ce problème est de redémarrer le système. :(

EDIT, 20120823: J'ai une meilleure connaissance des processus Zombie, donc je voulais mettre à jour cette réponse. Un processus Zombie est créé lorsqu'un processus parent n'appelle pas wait () (attendre que le processus change d'état) sur un processus enfant se terminant. Vous ne pouvez pas exécuter 'kill' directement sur un processus Zombie mais si vous tuez le processus parent, le processus enfant zombie sera 'récolté' et supprimé de la table de processus.

Je n'ai pas vu ce problème depuis longtemps, donc je n'ai pas inspecté pour voir quel est le processus parent dans ce scénario. L'alternative à l'arrêt du processus parent consiste à redémarrer votre système. :)

jyap
la source
Merci, j'avais 7 instances de 3 programmes sur lesquels je travaillais en tant que zombies.
ArtSabintsev
1
Le redémarrage est suffisant mais pas nécessaire, comme mentionné ci-dessus. En outre, il y a parfois des zombies autour qui ne causent pas le problème, donc rechercher des zombies de cette façon n'est pas vraiment une mesure fiable. Le seul signe sûr est le message dans Xcode.
smparkes
Avez-vous essayé de tuer ces processus zombies en tant que root? J'ai redémarré avant d'avoir pensé à le faire.
Ryan H.
1
@smparkes, oui, c'est évident d'après cette question qui traite de ce message d'erreur.
jyap
1
@HZC, oui, vous ne pouvez pas tuer les processus zombies même en tant que root.
jyap
20

Je viens de m'arriver à cela: je n'obtenais l'erreur que sur mon appareil et le simulateur fonctionnait bien. J'ai fini par devoir réinitialiser mon appareil et l'erreur a disparu.

n3wscott
la source
1
même ici, redémarré l'appareil et il est parti. Le simulateur a bien fonctionné
agente_secreto
15

J'ai ce problème très souvent récemment. Qu'est-ce qui empêcherait cela de se produire? La déconnexion et la connexion corrigent le problème mais ... c'est ennuyeux de le faire de temps en temps.

ÉDITER:

Je viens de trouver la cause. J'ai eu un bogue dans la méthode ApplicationWillTerminate. Ainsi, lorsque je clique sur le bouton d'arrêt de la fenêtre Xcode, l'application ne peut pas se terminer correctement et commence à se bloquer.

vérifiez le moniteur d'activité pour voir si votre application figure sur la liste. forcer à quitter si possible.

a chanté
la source
2
Cela l'a corrigé pour moi! ps aux | grep Simulator
Jason Prado
Si cela aide, je crée ce bogue lors du lancement de Leak Performance Tools
IssamTP
14

Si vous trouvez que votre problème est dû à des processus zombies:

ps -el | grep 'Z'
(comme dans le commentaire précédent https://stackoverflow.com/a/8104400/464289 ) et que vous souhaitez simplement résoudre le problème immédiatement, vous pouvez le faire sans redémarrer ni tuer quoi que ce soit. Renommez simplement l'exécutable cible de votre projet:

  1. Cliquez sur le projet dans le volet gauche
  2. Sélectionner Paramètres de construction dans le volet central
  3. Sous « Emballage », remplacez « Nom du produit » par $ (TARGET_NAME) par $ (TARGET_NAME) .1

Facile!

JRG
la source
cela n'a pas fonctionné pour moi, j'ai obtenu la même erreur que j'obtiens: le profil d'approvisionnement 'mataleao2' spécifie l'identifiant d'application 'au.com.mataleao' qui ne correspond pas au paramètre actuel 'au.com.mataleao-1'
sapatos
Testez-vous sur le simulateur ou sur l'iPhone?
JRG
je teste sur iphone uniquement, la fonctionnalité je teste ne fonctionnera que sur le téléphone
sapatos
7

Eh bien, pas de réponses mais au moins un autre test à faire. Ouvrez Terminal et exécutez cette commande: "ps-Ael | grep Z". Si vous obtenez deux entrées, une "(clang)" et l'autre le nom de votre application ou de votre entreprise, vous êtes arrosé - redémarrez.

Si vous êtes un développeur, entrez un court bogue et dites à Apple à quel point il est absolument ennuyeux de redémarrer, et mentionnez qu'ils peuvent dupliquer ce bogue dans "rdar: // 10401934" que je viens de saisir.

David

David H
la source
5

La réinitialisation du simulateur iOS a résolu l'erreur pour moi. Bien que cela supprime toutes les applications que vous avez dans Simulator, cela résout le problème sans avoir à redémarrer la machine.

Vous pouvez réinitialiser votre simulateur iOS en procédant comme suit:

1) Allez dans le menu "iOS Simulator", à côté du logo Apple () à l'extrême gauche de votre écran principal.
2) Sélectionnez "Réinitialiser le contenu et les paramètres ...".
3) Lisez le message pop et si vous êtes d'accord, cliquez sur "Réinitialiser" sinon, cliquez sur "Ne pas réinitialiser".

domthinks
la source
3
N'aide pas du tout, au lieu de cela, vous perdez tous vos contenus / applications / photos / contacts
étrange
1
@strange c'est un simulateur. de toute façon, il ne contient aucune information importante. :)
Evgen Bodunov
5
  1. Fermer le simulateur
  2. Arrêtez l'application de s'exécuter dans xCode.
  3. Ouvrez Activity Monitor et recherchez un processus en cours d' exécution avec votre application NAME .
  4. Tuez ce processus dans le moniteur d'activité
  5. Reconstruisez votre projet et vous devriez être prêt
negrelja
la source
Le processus semble être à l'abri d'être tué dans le moniteur d'activité, même avec "Forcer à quitter"
Ferruccio
4

J'ai eu le problème que @jyap mentionne avec les processus zombies. La seule façon de les effacer était de redémarrer. Cependant, j'ai remarqué que mes amis travaillant sur le même projet auraient le même problème mais pourraient tuer le simulateur sans créer de processus zombie. J'ai complètement désinstallé Xcode et l'ai réinstallé, et même si je reçois toujours l'erreur, il ne crée pas de processus zombies, donc je n'ai pas à redémarrer.

Avant de faire cela, j'utilisais cette solution de contournement vraiment laide: changez votre ID d'application et exécutez à nouveau. Vous vous retrouvez avec des copies indésirables de l'application dans le simulateur, mais vous pouvez différer le redémarrage pendant un certain temps.

Christopher Pickslay
la source
4

Cette erreur m'arrive beaucoup, presque à chaque fois que je teste l'application dans le simulateur, me forçant à redémarrer.

Voici une solution de contournement si vous souhaitez effectuer un travail:

  • Cliquez sur votre projet dans le navigateur de projet
  • Go Target -> Info
  • Ajouter une clé pour Application ne s'exécute pas en arrière - plan et définie sur YES.

Cela signifie que lorsque vous appuyez sur le bouton d'accueil du simulateur ou que vous quittez le simulateur, l'application ne se bloque pas.

N'oubliez pas de modifier ce paramètre avant la distribution! Mettez-le sur votre liste de contrôle de sortie :)

Chris Burt-Brown
la source
1
C'est dangereux, car cela vous empêche de tester le comportement en arrière-plan jusqu'à ce que vous vous souveniez de le modifier à nouveau.
tc.
@tc: Oui, je suis d'accord. Cependant, si vous êtes obligé de redémarrer à chaque fois que vous exécutez votre application iOS (ce que j'avais), cela peut être encore mieux que l'alternative.
Chris Burt-Brown
4

Si cela se produit lors des tests sur l'iPhone. Redémarrez simplement le téléphone. D'après ce que l'on m'a dit, le téléphone ou le simulateur pense toujours qu'il existe une instance de l'application en cours d'exécution, donc lors de sa dernière exécution, il ne s'est pas terminé correctement, soit pour une erreur dans votre code, soit pour que le téléphone / simulateur veuille juste avoir un gémissement.

Popeye
la source
4

J'ai eu cette erreur lors du débogage de mon application sur un iPhone 4. Un redémarrage difficile de l'iPhone a résolu mon problème. (Éteindre l'iPhone accroché ...)

Je n'avais aucun processus zombie sur mon Mac et le redémarrage du Mac n'a pas résolu le problème.

Peut-être que ce bug peut se manifester à la fois sur le simulateur et sur les appareils réels ???

craig
la source
4

Redémarré l'appareil, travaillé! :RÉ

Merci à tous pour les excellentes suggestions.

Haris Hussain
la source
3

Je viens d'avoir cette erreur. J'ai essayé de redémarrer le simulateur et Xcode mais mon projet ne fonctionnerait à nouveau qu'après un nettoyage et une construction. Aucune idée de ce qui l'a causé.

Daniel Wood
la source
3

J'avais un setter récursif qui a explosé dans la pile et a tué mon application de telle manière que je devais allumer mon iPad. C'était prouvable avec un correctif dans le code.

mobibob
la source
3

J'ai eu le même problème et l'ai résolu en procédant comme suit

  • Suppression de l'application de l'appareil,
  • Déconnecter l'appareil de Mac,
  • Éteindre et rallumer l'appareil,
  • Quitter et relancer Xcode,
  • Quitter les instruments,
  • Enfin, nettoyez et construisez à nouveau.

J'ai également fait une chose, car Xcode est configuré pour utiliser iOS 5.0 et mon projet utilise iOS 4.3

  • Supprimez tous les frameworks et ajoutez-les à nouveau.
Joey
la source
La question est pour Simulator. pas pour l'appareil.
viral
3

Solution alternative:

  • Donnez à votre application un nouvel identifiant. S'il s'appelle com.foobar.myapp, appelez-le com.foobar.myapp01

Vous perdez toutes les données de l'application, car il s'agit en fait d'une nouvelle application exécutée en ce qui concerne le simulateur iPhone. Cela peut ou peut ne pas être plus ennuyeux que le redémarrage - je voulais juste l'ajouter à la liste.

n13
la source
3

La cause

Exécution de votre application dans le simulateur avant l'arrêt complet de l'application précédemment exécutée.

The Fix

Attendez de voir le bouton Stop redevenir actif avant de recommencer.

(J'utilise Xcode 4.2.1. Ce problème s'est produit très fréquemment lors de la mise à niveau vers OS X Lion).

5bars
la source
Je viens d'avoir à nouveau cette erreur. J'ai tout essayé et finalement un redémarrage de l'iPad a résolu le problème.
5bars
2

Résolu en redémarrant mon téléphone après avoir supprimé l'application, puis en la reconstruisant propre et en la réexécutant. Fonctionne bien maintenant.

Bizarre.

CommaToast
la source
2

Aucune reconstruction ou réinstallation n'est nécessaire pour mon problème, et dans mon cas, l'erreur est apparue lors de la tentative d'exécution de l'application sur l'iPhone. Le simulateur a bien fonctionné.

Solution: supprimez l'application du téléphone, redémarrez à froid le téléphone et maintenant tout va bien.

timv
la source
2

Cela m'est arrivé beaucoup avec Xcode 4.2.1 sur Lion. Mis à jour en 4.3.2 et cela n'arrive plus. Heureux qu'ils l'aient réparé.

tbag
la source
2

Mike Ash a publié une solution (que Dieu le bénisse!) Qui ne nécessite pas de redémarrage. Exécutez simplement:

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

La commande ci-dessus répertorie tous les travaux launchd, en recherche un avec UIKitApplication dans le nom (qui sera le travail correspondant à votre application qui reste incorrectement), extrait le nom et dit à launchd de se débarrasser de ce travail.

Jano
la source
J'ai eu de nombreuses occasions de tester cela (soupir). Parfois ça marche, parfois je dois redémarrer mon iPhone, ou même mon Mac (la commande ci-dessus dit "processus introuvable").
Jano
2

Je pense que cela est dû à la fermeture forcée de votre application sur l'iPhone avant d'appuyer sur le bouton d'arrêt dans Xcode. Parfois, lorsque vous appuyez sur le bouton d'arrêt dans Xcode, il faut plus de temps pour quitter l'application si elle se bloquait. Mais soyez patient, il finira par s'arrêter la plupart du temps.

CommaToast
la source
1

Vous pouvez attribuer une variable dans la fonction ou l'onglet. Il sera libéré si votre fonction ou votre onglet est fermé. Vous devez donc le déclarer variable membre ou variable globale.

bTagTiger
la source
1

J'obtenais cette erreur tout le temps jusqu'à ce que j'arrête de faire confiance au bouton "Stop" dans la boîte de dialogue Exécuter. Maintenant que j'ai toujours appuyé sur stop dans la barre d'outils avant d'essayer de courir, je n'ai encore rencontré aucun processus zombie.

Angela
la source
0

Oh mon - j'ai essayé TOUT énuméré ci-dessus et dans d'autres messages. J'ai réinstallé Xcode, redémarré ma machine, copié tous les fichiers manquants dans les bons dossiers ... Finalement, j'ai sauvegardé mon iphone, l'ai essuyé et restauré, et cela a fonctionné!

Je pense que ce qui a pu être la cause de la lecture dans et autour de cela a été de déconnecter mon iphone blanc, il fonctionnait avec des outils de performance qui détectaient les fuites. Ou quelque chose comme ça.

Aaaah, grand soupir de soulagement.

Smikey
la source
0

Dans la pire des conditions Réinitialiser le contenu et les paramètres d'iOS Simulater, et la plupart du temps dans mon cas, quitter XCode avec le simulateur, le travail fonctionne toujours pour moi avec XCode4.6 (qui se bloque fréquemment)

rptwsthi
la source
0

J'ai fait face à ce genre de problème une fois dans mon cas, voici ce que j'ai fait

  1. Supprimez l'application du simulateur.
  2. Supprimez le dossier de données dérivé.
  3. Effectuer une action propre dans le projet en sélectionnant le menu produit - nettoyer
  4. Réinitialisez le simulateur.
  5. Quittez Xcode.
  6. Essayez d'exécuter le projet maintenant s'il fonctionne correctement, passez à l'étape 7
  7. Répétez toutes les étapes de 1 à 5, puis redémarrez votre machine.

Dans la plupart des cas, je l'ai fait fonctionner à l'étape 6 dans les cas extrêmes, j'ai dû redémarrer ma machine.

user2538944
la source
0

Cette erreur se produisait auparavant dans les anciennes versions du simulateur iOS, car des instances plus anciennes d'un travail dans un autre appareil qui était en cours d'arrêt pouvaient entrer en collision avec la nouvelle instance.

iOS 6.0 et versions ultérieures ne devraient pas rencontrer de problèmes comme celui-ci, car iOS 6.0 a introduit l'utilisation de sous-ensembles de démarrage et iOS 7.0 a introduit l'utilisation d'un serveur de démarrage dédié (launchd_sim) qui est complètement isolé du serveur de démarrage de l'hôte.

Jeremy Huddleston Sequoia
la source