Nie można otworzyć projektu… nie można otworzyć, ponieważ nie można przeanalizować pliku projektu

95

Od jakiegoś czasu pracuję nad stworzeniem aplikacji na iPhone'a. Dzisiaj, gdy moja bateria była słaba, pracowałem i ciągle zapisywałem pliki źródłowe, a potem skończyło się zasilanie ...

Teraz, kiedy ponownie podłączyłem komputer i nabiera mocy, próbuję otworzyć plik projektu i pojawia się błąd:

Nie można otworzyć projektu

Nie można otworzyć projektu ..., ponieważ nie można przeanalizować pliku projektu.

Czy jest sposób, o którym ludzie wiedzą, że mogę się z tego wyleczyć? Próbowałem użyć starszego pliku projektu i ponownie go wstawić, a następnie skompilować. Daje mi dziwny błąd, prawdopodobnie dlatego, że nie znajduje wszystkich plików, których chce ...

Naprawdę nie chcę odbudowywać mojego projektu od zera, jeśli to możliwe.


EDYTOWAĆ

Ok, zrobiłem różnicę między tym a nieco starszym plikiem projektu, który działał i zobaczyłem, że plik jest uszkodzony. Po ich scaleniu (części dobre i najnowsze) już działa.

Świetne uwagi dotyczące SVN. Mam jeden, ale przy próbie zsynchronizowania z nim XCode było trochę dziwactwa. Na pewno spędzę z nim teraz więcej czasu ... ;-)

wprowadź opis obrazu tutaj

Społeczność
źródło

Odpowiedzi:

231

Natknąłem się na ten problem, a mój starszy powiedział mi o rozwiązaniu tj .:

Kliknij prawym przyciskiem myszy projectname.xcodeprojplik, projectnameaby wyświetlić nazwę projektu. Teraz po kliknięciu prawym przyciskiem myszy wybierz Pokaż zawartość pakietów . Następnie otwórz projectname.pbxprojplik w edytorze tekstu. Teraz szukaj linii zawierającej <<<<<<< .mine, =======i >>>>>>> .r. Na przykład w moim przypadku wyglądało to tak

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

Teraz usunąć te <<<<<<< .mine, =======a >>>>>>> .rlinie tak będzie wyglądać następująco

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

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

Teraz zapisz i otwórz projekt Xcode i skompiluj go. Wszystko będzie dobrze.

Usuf
źródło
11
DZIĘKUJĘ CI. To działa. W moim przypadku nie był to „.mine” ani „.r”, ale powiedział coś innego… Ctrl-F dla „===”, aby znaleźć miejsce.
ck_
należy to zaznaczyć jako odpowiedź. Naprawdę dobre rzeczy, dzięki
owen gerig
12
Wystarczy powiedzieć, DLACZEGO to się dzieje: Twoja kontrola wersji próbuje scalić dwie sprzeczne wersje pliku projektu. Musisz ręcznie poinformować kontrolę wersji, jakie jest prawidłowe scalenie. Fakt, że XCode nie radzi sobie z tym wdzięcznie, jest dla mnie ogromną irytacją na co dzień.
Thane Brimhall
Dziękuję Ci. Mój problem przybrał formę <<<<<<<<< HEAD ======= >>>>>>>. Był w dwóch miejscach pod koniec pliku .pbxproj. Po usunięciu tych elementów mogłem ponownie uruchomić plik .xcodeproj. Poszukaj tych elementów, aby były widocznie nie na miejscu w stosunku do reszty pliku.
AgnosticDev
1
W moim przypadku jego <<<<<<< HEAD, ======, >>>>>>> jakiś alfanumeryczny. Usuń te trzy linie, a następnie zapisz i otwórz. Działało jak urok !!! Dzięki Allot.
Gowrie Sammandhamoorthy
47

Odpowiedź Mahometa była bardzo pomocna (i pomogła doprowadzić do mojej poprawki). Jednak samo usunięcie >>>>>>> ======= <<<<<<< nie wystarczyło, aby naprawić problem parsowania w projekcie.pbxproj (dla mnie) podczas zachowywania zmian z obu gałęzi po scaleniu.

Miałem konflikt scalania w sekcji PBXGroup (której początek wskazuje komentarz blokowy, taki jak ten: / * Begin PBXGroup section * /) pliku project.pbxproj. Jednak napotkany problem może wystąpić również w innych miejscach w pliku project.pbxproj.

Poniżej znajduje się uproszczenie napotkanego konfliktu scalania:

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

Kiedy usunąłem znaczniki konfliktu scalania, oto co mi zostało:

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

Zwykle usunięcie znaczników konfliktu scalania rozwiązałoby problem z analizą w pliku project.pbxproj i przywróciłoby integralność obszaru roboczego. Tym razem tak się nie stało.

Poniżej przedstawiam, co zrobiłem, aby rozwiązać problem:

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

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

Właściwie musiałem dodać 2 linie na końcu pierwszej PBXGroup.

Widać, że gdybym zdecydował się odrzucić zmiany z jednej z głowic lub z gałęzi scalającej, nie byłoby problemu z analizą! Jednak w moim przypadku chciałem zachować obie grupy, które dodałem z każdej gałęzi, a samo usunięcie znaczników łączenia nie wystarczyło; Musiałem dodać dodatkowe linie do pliku project.pbxproj, aby zachować prawidłowe formatowanie.

Tak więc, jeśli napotkasz problemy z analizowaniem po tym, jak myślałeś, że rozwiązałeś wszystkie konflikty scalania, możesz przyjrzeć się bliżej plikowi .pbxproj i upewnić się, że nie ma żadnych problemów z formatowaniem!

SnoopyProtocol
źródło
prawdopodobnie przypadkowo usunąłeś dwukropek i / lub nawias klamrowy podczas rozwiązywania konfliktów scalania. Powinieneś ostrożnie wziąć odpowiednią część (lub obie) z konfliktów scalania i usunąć znaczniki. Otóż ​​to.
Stas
dodanie sourceTree = "<group>"; }; rozwiązał to za mnie! Tak pomocny! Dzięki!
Nitin Alabur
Chciałem tylko coś do tego dodać. Miałem ten sam problem, ale pracowałem z CocoaPods i przestrzenią roboczą. Musiałem zniszczyć obszar roboczy i ponownie go utworzyć, aby Xcode mógł odebrać poprawkę.
Nico
@Nico: Czy możesz podzielić się tym, jak to zrobić? Mam tu podobny problem i mam trudności
Izaak
Okazało się, że po naprawieniu pliku .pbxproj potrzebowałem zamknąć i ponownie otworzyć projekt, aby działał, ale zadziałało. Dzięki SnoopyProtocol!
KeithTheBiped
28

Otrzymałem dokładnie ten sam błąd, ponieważ Cordova pozwoli ci stworzyć projekt ze spacjami, a Xcode nie wie, jak sobie z tym poradzić.

bwags
źródło
Wielkie dzięki, to była odpowiedź, miałem miejsce.
Max
To samo z Cordova Phonegap 3.4
Miles M.
To był dokładnie problem, który miałem. Dzięki!
fray88
@ fray88 Usunąłem miejsce w nazwie mojego folderu zarówno dla projektu Xcode, jak i folderu cordova, ale teraz pojawia się błąd: ENOENT: brak takiego błędu pliku lub katalogu. Jak mogę wyjąć miejsce i sprawić, by wszystko działało? Dzięki.
SaH
25

Miałem podobny problem.

Zrzut ekranu 1

Poniżej znajdują się kroki, aby rozwiązać ten problem:

  1. Przejdź do folderu, w którym znajduje się plik projectName.xcodeproj.

    Zrzut ekranu 2

  2. Kliknij prawym przyciskiem myszy i wybierz opcję „ Show Package Contents”. Będziesz mógł zobaczyć listę plików z .pbxprojrozszerzeniem.

    Zrzut ekranu 3

  3. Wybierz project.pbxproj. Kliknij prawym przyciskiem myszy i otwórz ten plik za pomocą ' Text Edit'.

    Zrzut ekranu 4

  4. Będzie można zobaczyć <<<<<< .mine, ============i >>>>>>>>>> .r123. Są to generalnie konflikty, które pojawiają się podczas pobierania aktualizacji z SVN. Usuń je i zapisz plik.

    Zrzut ekranu 5

    Zrzut ekranu 6

  5. Teraz będziesz mógł otworzyć projekt bez żadnego komunikatu o błędzie .

Jayprakash Dubey
źródło
23

Analiza wizualna pliku projektu Xcode nie pomogła mi zlokalizować błędu po scaleniu. Po przejrzeniu syslog znalazł taką linię, gdy Xcode próbował przeanalizować plik:

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.

Po naprawieniu ten projekt można otworzyć ok.

Oleksiy Ivanov
źródło
2
Dzięki, uratowałeś mi dzień :)
Centurion
Dziękuję… to ma dużo więcej sensu niż oględziny
Ciprian
2
To bardzo pomogło. Po prostu „tail -f /var/log/system.log” i próbowałem otworzyć projekt. W system.log pokazał błąd (szukanie „Xcode”), który pokazał numer wiersza, w którym wystąpił wyjątek analizy. Następnie otworzyłem plik w vi i zobaczyłem w nim znak kontrolny (^ H) i po prostu usunąłem ten pojedynczy znak i voila! można go było otworzyć.
DustinB
Najlepsza odpowiedź, zamiast próbować uderzać i próbować. Przeczytaj dziennik konsoli.
Urmil Setia
6
Po prostu spróbuj zbudować go z terminala, takiego jak xcodebuild -project Project.xcodeproj build. Zobaczysz błąd bezpośrednio w Terminalu.
Slavko Coolesoff
6

Przeanalizuj składnię pliku projektu. Sprawdź to w swoim projekcie w terminalu:

plutil -lint project.pbxproj

Spowoduje to wyświetlenie błędów z parsera.

Możliwy problem : niektóre projekty ustawiają strategię scalania git uniondla plików projektów. Działa to przez większość czasu, ale po cichu zabije plik projektu, jeśli się nie powiedzie. Ta strategia jest zdefiniowana w .gitattributespliku w repozytorium.

beseder
źródło
3

Ostatnio napotkałem ten sam problem podczas próby połączenia mojego oddziału ze zdalnym oddziałem. Jednak żadne z powyższych rozwiązań nie wydawało się odpowiednie dla mojego problemu.

Nie było konfliktów scalania między plikiem project.pbxproj w mojej gałęzi lub gałęzi zdalnej. Jednak mój plik ProjectName.xcodeproj odmówiłby otwarcia z tego samego powodu, co pokazano w zadanym pytaniu.

Moim rozwiązaniem było przejrzenie pliku project.pbxproj za pomocą edytora tekstu i stwierdzenie, czy nie ma żadnych nieprawidłowości w składni pliku (np. Dodatkowy nawias klamrowy). Przyspieszyłem ten proces, koncentrując się na wierszach, które zostały wstawione lub usunięte w starym pliku w porównaniu do scalonego pliku. Przy bliższym przyjrzeniu się stwierdziłem, że przyczyną mojego problemu było powtórzenie następującej linii:

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

w moim połączonym pliku. Doprowadziło to do niezamkniętego nawiasu klamrowego i w konsekwencji nieprawidłowej składni pbxproj. Usunięcie powyższej linii rozwiązało mój problem.

Abhi
źródło
2

Właśnie napotkałem ten sam problem. Usunąłem wygenerowane ciągi przez git jak zawsze, ale Xcode nadal odmawiał otwarcia pliku .xcodeproj. Ale wszystko było w porządku, żadnych brakujących nawiasów itp. W końcu próbowałem wyjść z Xcode i otworzyć projekt, kiedy Xcode został zamknięty … wtedy zadziałało. Mam nadzieję, że to komuś pomoże.

EDYTOWAĆ:

do rozwiązywania konfliktów w pliku .xcodeproj możesz użyć tego przydatnego skryptu:

  1. Utwórz pusty plik .sh w katalogu projektu (np. Solution_conflicts.sh)
  2. Oto skrypt:

    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. Uruchom go z terminala za pomocą polecenia sh: sh replace_conflicts.sh

Vojta
źródło
gdzie są generowane ciągi przez git?
Harshil Kotecha
Te ciągi są znacznikami konfliktu: „<<<<<<<”, „=======” i „>>>>>>>”. Aby uzyskać więcej informacji na temat rozwiązywania konfliktów git, zajrzyj tutaj: help.github.com/articles/…
Vojta
@Vojta, czy mógłbyś rzucić ten skrypt w skrócie? Otrzymuję ten błąd:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel
2

Kroki, które należy wykonać: - 1. Przejdź do folderu, w którym znajduje się nazwa Twojego projektu.xcodeproj 2. Kliknij prawym przyciskiem myszy i wybierz opcję „Pokaż zawartość pakietu”. Będziesz mógł zobaczyć listę plików z rozszerzeniem .pbxproj. 3. Wybierz project.pbxproj. Kliknij prawym przyciskiem myszy i otwórz ten plik za pomocą opcji „Edycja tekstu”. 4. Będziesz mógł zobaczyć <<<<<<, ============ i >>>>>>>>>>. Są to generalnie konflikty, które pojawiają się podczas pobierania aktualizacji z Sourcetree / SVN / GITLAB. Usuń je i zapisz plik. 5. Teraz będziesz mógł otworzyć projekt bez żadnego komunikatu o błędzie.

Akash Singh
źródło
1

Przywróć plik project.pbxproj

svn revert --filename--

mondousage
źródło
0

Wygląda na to, że będziesz musiał utworzyć nowy projekt w Xcode, przejść do starego katalogu i przeciągnąć wszystkie pliki źródłowe, końcówki i zasoby do paska bocznego plików Xcode w nowym projekcie. Nie powinno to zająć więcej niż kilka minut, chyba że naprawdę wykonałeś dużo pracy z niestandardowymi ustawieniami kompilacji lub celami. Albo to, albo wróć do ostatniego wpisu w kontroli źródła i ręcznie dodaj wszystkie pliki kodu, które zmieniły się od teraz do tego czasu.

Marc Charbonneau
źródło
1
Wystarczy sprawdzić plik project.pbproject i porównać z działającą wersją pliku projektu.
Atma
0

A gdy wszystko znów zacznie działać, powinieneś rozważyć użycie czegoś takiego jak subversion lub mercurial do tworzenia kopii zapasowych i kontroli wersji. Pamiętaj, że elektrony nie zawsze idą tam, gdzie powinny, tworzą kopie zapasowe wcześnie i często!

Brian C. Lane
źródło
Ostatnio moim ulubionym VCS jest git.
Lily Ballard
0

zmień nazwę bieżącego folderu projektu i moduł pobierania tego samego projektu, a następnie dodaj zmiany w bieżącym pliku.

suresh
źródło
0

Spróbuj znaleźć HEAD i _HEAD między wierszami i usuń te słowa w pliku project.pbxproj. Przed wykonaniem tej czynności wykonaj kopię zapasową tego pliku.

Avi Shim.
źródło
0

Idź do PhoneGapTest >> platforma Następnie usuń folder ios, a następnie przejdź do terminala, a następnie wpisz: sudo phonegap build ios, po czym możesz uruchomić projekt

Ranczo
źródło
0

Cofając, możesz cofnąć ściągnięty kod.

Jeśli chcesz cofnąć to żądanie ściągnięcia, po prostu umieść to polecenie w ścieżce projektu

-> git merge --abort

Subramani
źródło
0

W przypadku, gdy nie znalazłeś w Text === lub <<< lub >>>> jak dla mnie problem był naprawdę prosty i zabawny ... Zmieniam nazwę aplikacji w Xcode, ale nie zmieniam jej w UnityProjectSettings przed kompilacją - to był problem ...

Anton Konoplianchenko
źródło
0

Jeśli kiedykolwiek połączysz się i nadal będziesz mieć problemy, które nie wiedzą, czym one są, mam na myśli nie oczywiste ślady różnic

<<<<<
....
======
>>>>>>

Następnie możesz przeanalizować pliki projektu za pomocą https://github.com/Karumi/Kin , zainstalować go i używać

kin project.pbxproj

Powoduje to, że ekstrema błędów, które nie pozwalają na otwarcie projektu są łatwiejsze do zrozumienia i rozwiązania (takie jak hashe, grupy itd.).


A tak przy okazji, to również może być pomocne, pomyślałem, że nie użyłem go, próbując porównać 2 wersje plików twojego projektu https://github.com/bloomberg/xcdiff, więc to naprawdę da ci to, co się dzieje.

tyoc213
źródło
-2

Subversion uszkodzi mój plik projektu po svn prawie co tydzień. Próbuję dowiedzieć się, dlaczego robi to teraz i napotkałem ten problem.


źródło
Domyślam się, że masz projekt otwarty w Xcode w tym samym czasie, gdy robisz aktualizację lub zatwierdzasz ... "JEŚLI" Xcode automatycznie zapisuje w tym samym czasie, domyślam się, że może dojść do uszkodzenia
epatel
-3

Dzieje się tak, ponieważ nazwy projektów nie powinny zawierać spacji między nimi

Mohsin Muzawar
źródło