Impossibile aprire il progetto ... non può essere aperto perché il file del progetto non può essere analizzato


93

Ho lavorato per un po 'per creare un'app per iPhone. Oggi, quando la mia batteria era scarica, stavo lavorando e salvavo costantemente i miei file sorgente, poi l'alimentazione è andata via ...

Ora, quando ho ricollegato il mio computer e sta ricevendo una buona potenza, provo ad aprire il mio file di progetto e ricevo un errore:

Impossibile aprire il progetto

Il progetto ... non può essere aperto perché il file di progetto non può essere analizzato.

C'è un modo in cui le persone sanno che posso riprendermi da questo? Ho provato a utilizzare un file di progetto precedente, a reinserirlo e quindi a compilare. Mi dà un errore funky che probabilmente è perché non trova tutti i file che vuole ...

Non voglio davvero ricostruire il mio progetto da zero, se possibile.


MODIFICARE

Ok, ho fatto una differenza tra questo e un file di progetto leggermente più vecchio che funzionava e ho visto che c'era qualche corruzione nel file. Dopo averle unite (le parti buone e più nuove) ora funziona.

Ottimi punti sull'SVN. Ne ho uno, ma è stato un po 'strano provare a sincronizzare XCode con esso. Ci passerò sicuramente più tempo ora ... ;-)

inserisci qui la descrizione dell'immagine

Risposte:


228

Mi sono imbattuto in questo problema e il mio senior mi ha parlato di una soluzione, ovvero:

Fare clic con il tasto destro sul projectname.xcodeprojfile qui projectnamesarà il nome del progetto. Ora, dopo aver fatto clic con il pulsante destro del mouse, selezionare Mostra contenuto pacchetti . Successivamente apri il tuo projectname.pbxprojfile in un editor di testo. Ora cerca la riga contenente <<<<<<< .mine, =======e >>>>>>> .r. Ad esempio, nel mio caso sembrava piaciuto questo

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

Ora rimuovere quelli <<<<<<< .mine, =======e >>>>>>> .rlinee in modo che sarebbe simile a questa

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

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

Ora salva e apri il tuo progetto Xcode e crealo. Tutto andrà bene.


11
GRAZIE. Funziona. Nel mio caso non era ".mine" o ".r" ma ha detto qualcos'altro ... Ctrl-F per "===" per trovare il posto.
ck_

questo dovrebbe essere contrassegnato come risposta. Roba davvero buona, grazie
owen gerig

12
Solo per dire PERCHÉ sta accadendo: il controllo della versione sta tentando di unire due versioni in conflitto del file di progetto. Devi dire manualmente al tuo controllo di versione qual è l'unione corretta. Il fatto che XCode non lo gestisca con grazia è un enorme fastidio per me su base giornaliera.
Thane Brimhall

Grazie. Il mio problema è arrivato sotto forma di <<<<<<<<< HEAD ======= >>>>>>>. Era in due punti verso la fine del file .pbxproj. Una volta rimossi questi elementi, sono stato in grado di eseguire nuovamente il file .xcodeproj. Cerca che questi elementi siano visibilmente fuori posto rispetto al resto del file.
AgnosticDev

1
Nel mio caso è <<<<<<< HEAD, ======, >>>>>>> alfanumerico. Rimuovere queste tre righe, quindi salvare e aprire. Ha funzionato come un fascino !!! Grazie Allot.
Gowrie Sammandhamoorthy

47

La risposta di Muhammad è stata molto utile (e mi ha aiutato a risolverlo). Tuttavia, la semplice rimozione di >>>>>>> ======= <<<<<<< non era sufficiente per risolvere il problema di analisi nel project.pbxproj (per me) mantenendo le modifiche da entrambi i rami dopo una fusione.

Ho avuto un conflitto di unione nella sezione PBXGroup (il cui inizio è indicato da un commento di blocco come questo: / * Inizia la sezione PBXGroup * /) del file project.pbxproj. Tuttavia, il problema che ho riscontrato può verificarsi anche in altri punti del file project.pbxproj.

Di seguito è riportata una semplificazione del conflitto di unione che ho riscontrato:

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

Quando ho rimosso i marcatori di conflitto di unione, questo è ciò che mi è rimasto:

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

Normalmente, la rimozione degli indicatori di conflitto di unione risolve il problema di analisi nel file project.pbxproj e ripristina l'integrità dell'area di lavoro. Questa volta no.

Di seguito è riportato cosa ho fatto per risolvere il problema:

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

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

In realtà ho dovuto aggiungere 2 righe alla fine del primo PBXGroup.

Puoi vedere che se avessi scelto di scartare le modifiche da Head o dal ramo di fusione, non ci sarebbe stato un problema di analisi! Tuttavia, nel mio caso volevo mantenere entrambi i gruppi aggiunti da ogni ramo e la semplice rimozione dei marcatori di unione non era sufficiente; Ho dovuto aggiungere righe extra al file project.pbxproj per mantenere la formattazione corretta.

Quindi, se stai riscontrando problemi di analisi dopo aver pensato di aver risolto tutti i tuoi conflitti di unione, potresti voler dare un'occhiata più da vicino al .pbxproj e assicurarti che non ci siano problemi di formattazione!


probabilmente hai rimosso accidentalmente i due punti e / o la parentesi graffa durante la risoluzione dei conflitti di unione. Dovresti prendere con attenzione la parte corretta (o entrambe) dai conflitti di unione e rimuovere i marcatori. Questo è tutto.
Stas

aggiungendo sourceTree = "<group>"; }; risolto per me! Così utile! Grazie!
Nitin Alabur

Volevo solo aggiungere qualcosa a questo. Ho avuto lo stesso problema ma ho lavorato con CocoaPods e un'area di lavoro. Ho dovuto bombardare l'area di lavoro e ricrearla in modo che Xcode potesse rilevare la correzione.
Nico

@ Nico: ti dispiace condividere su come bombardarlo? Sto affrontando un problema simile qui e sto attraversando un periodo difficile
Isaac

Ho scoperto che dopo aver corretto il file .pbxproj avevo bisogno di chiudere e riaprire il progetto per farlo funzionare, ma ha funzionato. Grazie SnoopyProtocol!
KeithTheBiped

28

Ho ricevuto esattamente lo stesso errore perché Cordova ti consentirà di creare un progetto con spazi e Xcode non sa come gestirlo.


Grazie mille questa è stata la risposta, avevo uno spazio.
Max

Lo stesso con Cordova Phonegap 3.4
Miles M.

Questo era esattamente il problema che stavo avendo. Grazie!
fray88 il

@ fray88 Ho eliminato lo spazio nel nome della mia cartella sia per il progetto Xcode che per la cartella cordova, ma ora ricevo un errore: ENOENT: nessun errore di file o directory. Come posso eliminare lo spazio e far funzionare le cose? Grazie.
SaH

25

Ho avuto un problema simile.

Screenshot 1

Di seguito sono riportati i passaggi per risolverlo:

  1. Vai alla cartella in cui il tuo file projectName.xcodeproj.

    Screenshot 2

  2. Fare clic con il tasto destro e selezionare " Show Package Contents". Sarai in grado di vedere l'elenco dei file con .pbxprojestensione.

    Screenshot 3

  3. Seleziona project.pbxproj. Fare clic con il tasto destro e aprire questo file utilizzando " Text Edit".

    Screenshot 4

  4. Sarai in grado di vedere <<<<<< .mine, ============e >>>>>>>>>> .r123. Questi sono generalmente conflitti che si verificano quando si acquisisce l'aggiornamento da SVN. Eliminali e salva il file.

    Screenshot 5

    Screenshot 6

  5. Ora sarai in grado di aprire il progetto senza alcun messaggio di errore .


23

L'analisi visiva del file di progetto Xcode non mi ha aiutato a individuare l'errore dopo la fusione. Dopo aver cercato in syslog, ho trovato tale riga quando Xcode tenta di analizzare il file:

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.

Dopo aver sistemato quel progetto può essere aperto ok.


2
Grazie, mi hai salvato la giornata :)
Centurion

Grazie .. questo ha molto più senso dell'ispezione visiva
Ciprian

2
Ciò ha aiutato moltissimo. Ho solo "tail -f /var/log/system.log" e ho provato ad aprire il progetto. Nel system.log, ha mostrato un errore (ricerca di "Xcode") che mostrava il numero di riga in cui si è verificata l'eccezione di analisi. Ho quindi aperto il file in vi e ho visto un carattere di controllo nel file (^ H) e ho rimosso quel singolo carattere e voilà! è stato in grado di essere aperto.
DustinB

La migliore risposta, piuttosto che cercare di colpire e provare. Leggi il registro della console.
Urmil Setia

5
Prova a crearlo da Terminale come xcodebuild -project Project.xcodeproj build. Vedrai l'errore proprio nel Terminale.
Slavko Coolesoff

6

Analizza la sintassi del tuo file di progetto. Controllalo all'interno del tuo progetto nel terminale:

plutil -lint project.pbxproj

Questo ti mostrerà gli errori del parser.

Possibile problema : alcuni progetti impostano la strategia di fusione git unionper i file di progetto. Questo funziona per la maggior parte delle volte, ma ucciderà silenziosamente il tuo file di progetto se fallisce. Questa strategia è definita nel .gitattributesfile nel tuo repository.


3

Di recente ho riscontrato lo stesso problema quando ho provato a unire il mio ramo con un ramo remoto. Tuttavia, nessuna delle soluzioni di cui sopra sembrava appropriata al mio problema.

Non ci sono stati conflitti di unione tra il file project.pbxproj nel mio ramo o nel ramo remoto. Tuttavia, il mio file projectName.xcodeproj rifiuterebbe di aprirsi per lo stesso motivo mostrato nella domanda posta.

La mia soluzione è stata quella di esaminare project.pbxproj utilizzando un editor di testo e scoprire se c'erano irregolarità nella sintassi del file (ad esempio una parentesi graffa aggiuntiva). Ho accelerato questo processo concentrandomi sulle righe che sono state inserite o eliminate nel vecchio file rispetto al file unito. A un esame più attento, ho scoperto che la causa del mio problema era la ripetizione della seguente riga:

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

nel mio file unito. Ciò ha portato a una parentesi graffa non chiusa e alla conseguente sintassi pbxproj non valida. L'eliminazione della riga sopra ha risolto il mio problema.


2

Ho appena incontrato lo stesso problema. Ho rimosso le stringhe generate da git come sempre, ma Xcode si rifiutava ancora di aprire il file .xcodeproj. Ma tutto era corretto, nessuna parentesi mancante ecc. Alla fine ho provato a chiudere Xcode e ad aprire il progetto quando Xcode era chiuso .. poi ha funzionato. Spero che questo aiuti qualcuno.

MODIFICARE:

per risolvere i conflitti nel tuo file .xcodeproj puoi usare questo pratico script:

  1. Crea un file .sh vuoto nella directory del tuo progetto (ad es. Resolver_conflicts.sh)
  2. Ecco lo 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 $ file progetto | grep -v "<<<<<<< HEAD" | grep -v "=======" | grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. Eseguilo dal terminale usando il comando sh: shublesho_conflicts.sh


dove vengono generate le stringhe da git?
Harshil Kotecha

Queste stringhe sono indicatori di conflitto: "<<<<<<<", "=======" e ">>>>>>>". Per maggiori informazioni sulla risoluzione dei conflitti Git,
Vojta

@ Vojta, potresti buttare quel copione in una sintesi? Ricevo questo errore:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel


1

Ripristina il file project.pbxproj

svn ripristina - nomefile--


1

Passaggi da seguire: - 1. Naviga nella cartella in cui si trova il tuo projectName.xcodeproj 2. Fai clic con il pulsante destro del mouse e seleziona "Mostra contenuto pacchetto". Sarai in grado di vedere l'elenco dei file con estensione .pbxproj. 3.Seleziona project.pbxproj. Fare clic con il tasto destro e aprire questo file utilizzando "Modifica testo". 4. Sarai in grado di vedere <<<<<<, ============ e >>>>>>>>>>. Questi sono generalmente conflitti che si verificano quando si acquisisce l'aggiornamento da Sourcetree / SVN / GITLAB. Eliminali e salva il file. 5.Ora sarai in grado di aprire il progetto senza alcun messaggio di errore.


0

Sembra che dovrai creare un nuovo progetto in Xcode, andare nella vecchia directory e trascinare tutti i tuoi file sorgente, pennini e risorse nella barra laterale dei file Xcode nel nuovo progetto. Non dovrebbero volerci più di pochi minuti, a meno che tu non abbia davvero lavorato molto con impostazioni di build personalizzate o obiettivi. O quello, o torna all'ultimo check-in nel tuo controllo del codice sorgente e aggiungi manualmente i file di codice che sono cambiati da ora a allora.


1
Basta controllare il file project.pbproject ed eseguire una differenza con una versione funzionante del file di progetto.
Atma

0

E una volta che le cose funzioneranno di nuovo, dovresti cercare di utilizzare qualcosa come Subversion o Mercurial per il backup e il controllo delle revisioni. Ricorda che gli elettroni non vanno sempre dove dovrebbero, esegui il backup presto e spesso!


Il mio VCS preferito ultimamente è stato git.
Lily Ballard

0

cambia il nome della cartella del progetto corrente e il modulo di checkout lo stesso progetto. quindi aggiungi le modifiche al file corrente.



0

Prova a trovare HEAD e _HEAD tra le righe e cancella queste parole in project.pbxproj. Esegui il backup di questo file prima di eseguire questa operazione ..


0

Vai a PhoneGapTest >> piattaforma Quindi elimina la cartella ios dopodiché vai al terminale quindi digita: sudo phonegap build ios dopodiché puoi eseguire il progetto


0

Ripristinando, puoi annullare il codice estratto.

Se vuoi annullare quella richiesta pull, metti questo comando nel percorso del progetto

-> git merge --abort


0

Nel caso in cui se non avessi trovato in Text === o <<< o >>>> come fosse per me il problema era davvero semplice e divertente ... cambio il nome dell'App in Xcode, ma non lo cambio in UnityProjectSettings prima della compilazione - questo era il problema ...


-2

subversion corromperà il mio file di progetto dopo un svn su base quasi settimanale. Sto cercando di capire perché lo fa proprio ora e mi sono imbattuto in questo problema.


La mia ipotesi è che tu abbia il progetto aperto in Xcode nello stesso momento in cui esegui un aggiornamento o il commit ... "SE" Xcode dovesse salvarsi automaticamente nello stesso momento, immagino che possa accadere un po 'di corruzione
epatel

-3

Questo perché i nomi dei progetti non dovrebbero contenere spazi vuoti tra di loro

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.