Impossible d'ouvrir le projet… ne peut pas être ouvert car le fichier projet ne peut pas être analysé

93

Je travaille depuis un moment pour créer une application iPhone. Aujourd'hui, quand ma batterie était faible, je travaillais et sauvegardais constamment mes fichiers sources puis le courant s'est éteint ...

Maintenant, lorsque j'ai rebranché mon ordinateur et qu'il est bien alimenté, j'essaye d'ouvrir mon fichier de projet et j'obtiens une erreur:

Impossible d'ouvrir le projet

Projet ... ne peut pas être ouvert car le fichier projet ne peut pas être analysé.

Y a-t-il un moyen dont les gens savent que je peux m'en remettre? J'ai essayé d'utiliser un fichier de projet plus ancien et de le réinsérer, puis de le compiler. Cela me donne une erreur géniale qui est probablement parce qu'il ne trouve pas tous les fichiers qu'il veut ...

Je ne veux vraiment pas reconstruire mon projet à partir de zéro si possible.


ÉDITER

Ok, j'ai fait une différence entre cela et un fichier de projet légèrement plus ancien qui a fonctionné et j'ai vu qu'il y avait une corruption dans le fichier. Après les avoir fusionnés (les bonnes et les plus récentes parties), cela fonctionne maintenant.

Grands points sur le SVN. J'en ai un, mais il y a eu un peu de funkiness essayant de synchroniser XCode avec lui. Je vais certainement passer plus de temps avec ça maintenant ... ;-)

entrez la description de l'image ici

Communauté
la source

Réponses:

228

Je suis tombé sur ce problème et mon senior m'a parlé d'une solution à savoir:

Faites un clic droit sur votre projectname.xcodeprojfichier ici projectnamesera le nom de votre projet. Maintenant, après avoir cliqué avec le bouton droit, sélectionnez Afficher le contenu des packages . Après cela, ouvrez votre projectname.pbxprojfichier dans un éditeur de texte. Recherchez maintenant la ligne contenant <<<<<<< .mine, =======et >>>>>>> .r. Par exemple, dans mon cas, ça ressemblait à ça

<<<<<<< .mine
    9ADAAC6A15DCEF6A0019ACA8 .... in Resources */,
=======
    52FD7F3D15DCEAEF009E9322 ... in Resources */,
>>>>>>> .r269

Maintenant, supprimez ceux-ci <<<<<<< .mine, =======et les >>>>>>> .rlignes pour que cela ressemble à ceci

    9ADAAC6A15DCEF6A0019ACA8 /* BuyPriceBtn.png in Resources */,

    52FD7F3D15DCEAEF009E9322 /* discussionForm.zip in Resources */,

Maintenant, enregistrez et ouvrez votre projet Xcode et construisez-le. Tout ira bien.

Usuf
la source
11
MERCI. Cela marche. Dans mon cas, ce n'était pas ".mine" ou ".r" mais a dit quelque chose d'autre ... Ctrl-F pour "===" pour trouver l'endroit.
ck_
cela devrait être marqué comme la réponse. Vraiment de bonnes choses, merci
owen gerig
12
Juste pour dire POURQUOI cela se produit: votre contrôle de version tente de fusionner deux versions en conflit du fichier de projet. Vous devez indiquer manuellement à votre contrôle de version quelle est la fusion appropriée. Le fait que XCode ne gère pas cela avec élégance est un énorme ennui pour moi au quotidien.
Thane Brimhall
Je vous remercie. Mon problème est venu sous la forme de <<<<<<<<<< HEAD ======= >>>>>>>. C'était à deux endroits vers la fin du fichier .pbxproj. Une fois que j'ai supprimé ces éléments, j'ai pu exécuter à nouveau le fichier .xcodeproj. Recherchez ces éléments pour être visiblement hors de propos par rapport au reste du fichier.
AgnosticDev
1
Dans mon cas, c'est <<<<<<< HEAD, ======, >>>>>>> un peu alphanumérique. Supprimez ces trois lignes, puis enregistrez et ouvrez. A travaillé comme un charme !!! Merci beaucoup.
Gowrie Sammandhamoorthy
47

La réponse de Muhammad a été très utile (et a contribué à ma solution). Cependant, la simple suppression de >>>>>>> ======= <<<<<<<< n'a pas suffi à résoudre le problème d'analyse dans le projet.pbxproj (pour moi) lors de la conservation des modifications des deux branches après une fusion.

J'ai eu un conflit de fusion dans la section PBXGroup (dont le début est indiqué par un commentaire de bloc comme celui-ci: / * Begin PBXGroup section * /) du fichier project.pbxproj. Cependant, le problème que j'ai rencontré peut également se produire à d'autres endroits dans le fichier project.pbxproj.

Voici une simplification du conflit de fusion que j'ai rencontré:

    <<<<<<< HEAD
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    =======
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
    >>>>>>> branch name
            sourceTree = "<group>";
          };

Lorsque j'ai supprimé les marqueurs de conflit de fusion, voici ce qui me restait:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

Normalement, la suppression des marqueurs de conflit de fusion résoudrait le problème d'analyse dans le fichier project.pbxproj et restaurerait l'intégrité de l'espace de travail. Cette fois, non.

Voici ce que j'ai fait pour résoudre le problème:

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

          id = {
            isa = PBXGroup;
            children = (
                 id
            );
            name = "Your Group Name";
            sourceTree = "<group>";
          };

J'ai en fait dû ajouter 2 lignes à la fin du premier PBXGroup.

Vous pouvez voir que si j'avais choisi d'annuler les modifications de Head ou de la branche fusionnante, il n'y aurait pas eu de problème d'analyse! Cependant, dans mon cas, je voulais conserver les deux groupes que j'ai ajoutés à partir de chaque branche et supprimer simplement les marqueurs de fusion n'était pas suffisant; J'ai dû ajouter des lignes supplémentaires au fichier project.pbxproj afin de maintenir un formatage correct.

Donc, si vous rencontrez des problèmes d'analyse après avoir pensé avoir résolu tous vos conflits de fusion, vous voudrez peut-être examiner de plus près le .pbxproj et vous assurer qu'il n'y a pas de problèmes de formatage!

SnoopyProtocole
la source
vous avez probablement accidentellement supprimé les deux points et / ou l'accolade lors de la résolution des conflits de fusion. Vous devez soigneusement prendre la partie appropriée (ou les deux) des conflits de fusion et supprimer les marqueurs. C'est tout.
Stas
ajout de sourceTree = "<group>"; }; résolu pour moi! Tellement utile! Merci!
Nitin Alabur
Je voulais juste ajouter quelque chose à cela. J'ai eu ce même problème mais en travaillant avec des CocoaPods et un espace de travail. J'ai dû détruire l'espace de travail et le recréer pour que Xcode récupère le correctif.
Nico
@Nico: Cela vous dérange-t-il de partager sur la façon de le détruire? Je suis confronté au problème similaire ici et j'ai du mal
Isaac
J'ai trouvé qu'après avoir réparé le fichier .pbxproj, je devais fermer et rouvrir le projet pour le faire fonctionner, mais cela a fonctionné. Merci SnoopyProtocol!
KeithTheBiped
28

J'ai eu exactement la même erreur parce que Cordova vous permettra de créer un projet avec des espaces, et Xcode ne sait pas comment gérer.

bwags
la source
Merci beaucoup c'était la réponse, j'avais un espace.
Max
Idem avec Cordova Phonegap 3.4
Miles M.
C'était exactement le problème que j'avais. Merci!
fray88 le
@ fray88 J'ai pris l'espace dans mon nom de dossier pour le projet Xcode et le dossier cordova, mais maintenant j'obtiens une erreur: ENOENT: aucune erreur de fichier ou de répertoire. Comment puis-je supprimer l'espace et faire fonctionner les choses? Merci.
SaH le
25

J'ai eu un problème similaire.

Capture d'écran 1

Voici les étapes pour le résoudre:

  1. Accédez au dossier dans lequel votre fichier projectName.xcodeproj.

    Capture d'écran 2

  2. Faites un clic droit et sélectionnez ' Show Package Contents'. Vous pourrez voir la liste des fichiers avec l' .pbxprojextension.

    Capture d'écran 3

  3. Sélectionnez project.pbxproj. Cliquez avec le bouton droit de la souris et ouvrez ce fichier en utilisant ' Text Edit'.

    Capture d'écran 4

  4. Vous pourrez voir <<<<<< .mine, ============et >>>>>>>>>> .r123. Ce sont généralement des conflits qui surviennent lorsque vous prenez la mise à jour de SVN. Supprimez-les et enregistrez le fichier.

    Capture d'écran 5

    Capture d'écran 6

  5. Maintenant, vous pourrez ouvrir le projet sans aucun message d'erreur .

Jayprakash Dubey
la source
23

L'analyse visuelle du fichier de projet Xcode ne m'a pas aidé à localiser l'erreur après la fusion. Après avoir regardé syslog a trouvé une telle ligne lorsque Xcode essayait d'analyser le fichier:

2/7/14 12:39:12.792 PM Xcode[9949]: CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 4426. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug.

Après avoir corrigé ce projet peut être ouvert ok.

Oleksiy Ivanov
la source
2
Merci, vous avez sauvé ma journée :)
Centurion
Merci .. cela a beaucoup plus de sens qu'une inspection visuelle
Ciprian
2
Cela a énormément aidé. J'ai juste "tail -f /var/log/system.log" et j'ai essayé d'ouvrir le projet. Dans le system.log, il a montré une erreur (recherche de "Xcode") qui a montré le numéro de ligne où l'exception d'analyse s'est produite. J'ai ensuite ouvert le fichier dans vi et j'ai vu un caractère de contrôle dans le fichier (^ H) et je viens de supprimer ce caractère unique et le tour est joué! il a pu être ouvert.
DustinB
La meilleure réponse, plutôt que d'essayer de faire du hit and try. Lire le journal de la console.
Urmil Setia
5
Essayez simplement de le construire à partir du terminal comme xcodebuild -project Project.xcodeproj build. Vous verrez l'erreur directement dans le terminal.
Slavko Coolesoff
6

Analysez la syntaxe de votre fichier projet. Vérifiez-le dans votre projet dans le terminal:

plutil -lint project.pbxproj

Cela vous montrera les erreurs de l'analyseur.

Problème possible : certains projets définissent une stratégie de fusion git unionpour les fichiers de projet. Cela fonctionne la plupart du temps, mais tuera silencieusement votre fichier projet en cas d'échec. Cette stratégie est définie dans le .gitattributesfichier de votre référentiel.

Beseder
la source
3

J'ai récemment rencontré le même problème en essayant de fusionner ma branche avec une branche distante. Cependant, aucune des solutions ci-dessus ne semblait appropriée à mon problème.

Il n'y a eu aucun conflit de fusion entre le fichier project.pbxproj dans ma branche ou la branche distante. Cependant, mon fichier projectName.xcodeproj refuserait de s'ouvrir pour la même raison que celle indiquée dans la question posée.

Ma solution était de regarder à travers le project.pbxproj en utilisant un éditeur de texte et de trouver s'il y avait des irrégularités dans la syntaxe du fichier (par exemple un crochet bouclé supplémentaire). J'ai accéléré ce processus en me concentrant sur les lignes qui ont été insérées ou supprimées dans l'ancien fichier par rapport au fichier fusionné. En y regardant de plus près, j'ai découvert que la cause de mon problème était la répétition de la ligne suivante:

xxxxxxxxxxxxx /* [CP] Check Pods Manifest.lock */ = {

dans mon fichier fusionné. Cela a conduit à une parenthèse non fermée et à une syntaxe pbxproj invalide par conséquent. La suppression de la ligne ci-dessus a résolu mon problème.

Abhi
la source
2

Je viens de rencontrer le même problème. J'ai supprimé les chaînes générées par git comme toujours mais Xcode a toujours refusé d'ouvrir le fichier .xcodeproj. Mais tout était correct, pas de parenthèses manquantes, etc. Finalement, j'ai essayé de quitter Xcode et d'ouvrir le projet quand Xcode était fermé .. puis cela a fonctionné. J'espère que ça aidera quelqu'un.

ÉDITER:

pour résoudre les conflits dans votre fichier .xcodeproj, vous pouvez utiliser ce script pratique:

  1. Créez un fichier .sh vide dans le répertoire de votre projet (par exemple, resolver_conflicts.sh)
  2. Voici le script:

    projectfile = find -d . -name 'project.pbxproj' projectdir = echo *.xcodeproj projectfile = "$ {projectdir} /project.pbxproj" tempfile = "$ {projectdir} /project.pbxproj.out" savefile = "$ {projectdir} /project.pbxproj.mergesave"

    cat $ projectfile | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. Exécutez-le à partir du terminal à l'aide de la commande sh: sh resolution_conflicts.sh

Vojta
la source
où sont générées les chaînes par git?
Harshil Kotecha
Ces chaînes sont des marqueurs de conflit: "<<<<<<<", "=======" et ">>>>>>>". Pour plus d'informations sur la résolution des conflits git, regardez ici: help.github.com/articles/…
Vojta
@Vojta, pourriez-vous jeter ce script dans l'essentiel? J'obtiens cette erreur:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel
1

Rétablissez le project.pbxproj

svn revert --filename--

mondousage
la source
1

Étapes à suivre: - 1.Accédez au dossier où se trouve votre projectName.xcodeproj 2.Cliquez droit et sélectionnez «Afficher le contenu du paquet». Vous pourrez voir la liste des fichiers avec l'extension .pbxproj. 3.Sélectionnez project.pbxproj. Cliquez avec le bouton droit de la souris et ouvrez ce fichier en utilisant 'Text Edit'. 4.Vous pourrez voir <<<<<<, ============ et >>>>>>>>>>. Ce sont généralement des conflits qui surviennent lorsque vous effectuez une mise à jour depuis Sourcetree / SVN / GITLAB. Supprimez-les et enregistrez le fichier. 5.Maintenant, vous pourrez ouvrir le projet sans aucun message d'erreur.

Akash Singh
la source
0

On dirait que vous allez devoir créer un nouveau projet dans Xcode, aller dans l'ancien répertoire et faire glisser tous vos fichiers source, nibs et ressources dans la barre latérale des fichiers Xcode du nouveau projet. Cela ne devrait pas prendre plus de quelques minutes, à moins que vous n'ayez vraiment travaillé avec des paramètres ou des cibles de build personnalisés. Soit cela, soit revenez au dernier archivage dans votre contrôle de code source et ajoutez manuellement tous les fichiers de code qui ont changé entre maintenant.

Marc Charbonneau
la source
1
Vérifiez simplement le fichier project.pbproject et effectuez une comparaison avec une version fonctionnelle du fichier projet.
Atma le
0

Et une fois que les choses fonctionnent à nouveau, vous devriez envisager d'utiliser quelque chose comme subversion ou mercurial pour le contrôle de la sauvegarde et des révisions. Rappelez-vous que les électrons ne vont pas toujours là où ils sont censés aller, sauvegardez tôt et souvent!

Brian C. Lane
la source
Mon VCS préféré ces derniers temps a été git.
Lily Ballard
0

modifiez le nom de votre dossier de projet actuel et le module d'extraction du même projet, puis ajoutez les modifications de fichier en cours.

suresh
la source
0

Essayez de trouver HEAD et _HEAD entre les lignes et supprimez ces mots dans project.pbxproj. Sauvegardez ce fichier avant de faire cela.

Avi Shim.
la source
0

Goto PhoneGapTest >> platform Ensuite, supprimez le dossier ios après cela, allez dans le terminal puis tapez: sudo phonegap build ios après cela, vous pouvez exécuter le projet

Ranch
la source
0

En rétablissant, vous pouvez annuler le code extrait.

Si vous souhaitez annuler cette demande d'extraction, placez simplement cette commande sur le chemin du projet

-> git merge --abort

Subramani
la source
0

Au cas où si vous ne trouviez pas dans Text === ou <<< ou >>>> comme c'était pour moi le problème était vraiment simple et amusant ... Je change le nom de l'application dans Xcode, mais je ne le change pas dans UnityProjectSettings avant la construction - c'était le problème ...

Anton Konoplianchenko
la source
-2

subversion corrompra mon fichier de projet après un svn up presque chaque semaine. J'essaie de comprendre pourquoi il fait cela en ce moment et j'ai rencontré ce problème.


la source
Je suppose que vous avez le projet ouvert dans Xcode en même temps que vous faites une mise à jour ou un commit ... "SI" Xcode arrive à enregistrer automatiquement en même temps, je suppose qu'une corruption peut se produire
epatel
-3

C'est parce que les noms de projet ne sont pas supposés avoir des espaces vides entre eux

Mohsin Muzawar
la source