Невозможно открыть проект… невозможно открыть, потому что файл проекта не может быть проанализирован

94

Некоторое время я работал над созданием приложения для iPhone. Сегодня, когда у меня разрядился аккумулятор, я работал и постоянно сохранял исходные файлы, потом отключилось электричество ...

Теперь, когда я снова подключил свой компьютер и он набирает достаточную мощность, я пытаюсь открыть файл проекта и получаю сообщение об ошибке:

Невозможно открыть проект

Проект ... не может быть открыт, потому что файл проекта не может быть проанализирован.

Есть ли способ, которым люди знают, что я могу оправиться от этого? Я попытался использовать старый файл проекта и снова вставить его, а затем скомпилировать. Это дает мне фанковую ошибку, которая, вероятно, связана с тем, что он не находит все нужные файлы ...

Я действительно не хочу перестраивать свой проект с нуля, если это возможно.


РЕДАКТИРОВАТЬ

Хорошо, я провел разницу между этим и немного более старым файлом проекта, который работал, и увидел, что в файле есть некоторые повреждения. После их объединения (хорошей и новейшей частей) он теперь работает.

Замечательные моменты о SVN. У меня есть один, но были некоторые забавы, пытающиеся синхронизировать с ним XCode. Я определенно проведу с ним больше времени ... ;-)

введите описание изображения здесь

Сообщество
источник

Ответы:

231

Я столкнулся с этой проблемой, и мой старший рассказал мне о решении, а именно:

Щелкните правой кнопкой мыши на вашем projectname.xcodeprojфайле, здесь projectnameбудет имя вашего проекта. Теперь после щелчка правой кнопкой мыши выберите Показать содержимое пакетов . После этого откройте ваш projectname.pbxprojфайл в текстовом редакторе. Теперь найдите строку, содержащую <<<<<<< .mine, =======и >>>>>>> .r. Например, в моем случае это выглядело так

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

Теперь удалите те <<<<<<< .mine, =======и >>>>>>> .rлинии, чтобы они выглядели так

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

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

Теперь сохраните и откройте свой проект Xcode и создайте его. Все будет отлично.

Усуф
источник
11
СПАСИБО. Это работает. В моем случае это не было «.mine» или «.r», а было сказано что-то еще ... Ctrl-F для «===», чтобы найти место.
ck_
это должно быть отмечено как ответ. Действительно хороший материал, спасибо
Оуэн Гериг
12
Просто чтобы сказать, ПОЧЕМУ это происходит: ваш контроль версий пытается объединить две конфликтующие версии файла проекта. Вы должны вручную указать системе управления версиями, что такое правильное слияние. Тот факт, что XCode не справляется с этим изящно, ежедневно меня очень раздражает.
Тейн Бримхолл
Спасибо. Моя проблема возникла в виде <<<<<<<<< HEAD ======= >>>>>>>. Он был в двух местах ближе к концу файла .pbxproj. После удаления этих элементов я снова смог запустить файл .xcodeproj. Обратите внимание на то, чтобы эти элементы были явно не на своем месте в остальной части файла.
AgnosticDev
1
В моем случае это <<<<<<< HEAD, ======, >>>>>>> буквенно-цифровые символы. Удалите эти три строки, затем сохраните и откройте. Работал как шарм !!! Спасибо, Алло.
Гоури Саммандхамурти
47

Ответ Мухаммеда был очень полезным (и помог мне исправить). Однако простого удаления >>>>>>> ======= <<<<<<< было недостаточно для устранения проблемы синтаксического анализа в project.pbxproj (для меня) при сохранении изменений из обеих веток после слияния.

У меня возник конфликт слияния в разделе PBXGroup (начало которого обозначено таким комментарием блока: / * Begin PBXGroup section * /) файла project.pbxproj. Однако проблема, с которой я столкнулся, может возникнуть и в других местах файла project.pbxproj.

Ниже приведено упрощение конфликта слияния, с которым я столкнулся:

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

Когда я удалил маркеры конфликта слияния, вот что у меня осталось:

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

Обычно удаление маркеров конфликта слияния устраняет проблему синтаксического анализа в файле project.pbxproj и восстанавливает целостность рабочей области. На этот раз этого не произошло.

Вот что я сделал для решения проблемы:

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

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

На самом деле мне пришлось добавить 2 строки в конце первой PBXGroup.

Вы можете видеть, что, если бы я решил отменить изменения либо из Head, либо из ветки слияния, не было бы проблемы с синтаксическим анализом! Однако в моем случае я хотел сохранить обе группы, которые я добавил из каждой ветки, и простого удаления маркеров слияния было недостаточно; Мне пришлось добавить дополнительные строки в файл project.pbxproj, чтобы сохранить правильное форматирование.

Итак, если у вас возникли проблемы с синтаксическим анализом после того, как вы подумали, что разрешили все конфликты слияния, вы можете поближе взглянуть на .pbxproj и убедиться, что нет никаких проблем с форматированием!

SnoopyProtocol
источник
вы, вероятно, случайно удалили двоеточие и / или фигурную скобку при разрешении конфликтов слияния. Вы должны осторожно выбрать нужную часть (или и то, и другое) из конфликтов слияния и удалить маркеры. Вот и все.
Стас
добавление sourceTree = "<группа>"; }; решил это для меня! Так полезно! Спасибо!
Nitin Alabur
Просто хотел что-то добавить к этому. У меня была такая же проблема, но я работал с CocoaPods и рабочим пространством. Мне пришлось уничтожить рабочую область и воссоздать ее, чтобы Xcode подобрал исправление.
Нико
@Nico: Не могли бы вы рассказать о том, как взорвать его? Я столкнулся с аналогичной проблемой здесь и испытываю трудности
Исаак
Я обнаружил, что после исправления файла .pbxproj мне нужно было закрыть и снова открыть проект, чтобы заставить его работать, но это сработало. Спасибо, SnoopyProtocol!
KeithTheBiped
28

Я получил ту же самую ошибку, потому что Кордова позволит вам создать проект с пробелами в нем, а Xcode не знает, что делать.

бваги
источник
Большое спасибо, это был ответ, у меня было место.
Макс
То же самое с Cordova Phonegap 3.4
Miles M.
Это была именно та проблема, с которой я столкнулся. Спасибо!
fray88
@ fray88 Я вынул пространство в имени своей папки как для проекта Xcode, так и для папки Cordova, но теперь я получаю сообщение об ошибке: ENOENT: нет такого файла или ошибки каталога. Как я могу освободить место и заставить все работать? Спасибо.
SaH
25

У меня была аналогичная проблема.

Скриншот 1

Ниже приведены шаги по ее устранению:

  1. Перейдите в папку, в которой находится ваш projectName.xcodeproj.

    Скриншот 2

  2. Щелкните правой кнопкой мыши и выберите ' Show Package Contents'. Вы сможете увидеть список файлов с .pbxprojрасширением.

    Скриншот 3

  3. Выбрать project.pbxproj. Щелкните правой кнопкой мыши и откройте этот файл с помощью ' Text Edit'.

    Скриншот 4

  4. Вы сможете увидеть <<<<<< .mine, ============и >>>>>>>>>> .r123. Как правило, это конфликты, возникающие при обновлении через SVN. Удалите их и сохраните файл.

    Скриншот 5

    Скриншот 6

  5. Теперь вы сможете открыть проект без сообщений об ошибке .

Джайпракаш Дубей
источник
23

Визуальный анализ файла проекта Xcode не помог мне обнаружить ошибку после слияния. Посмотрев в системный журнал, обнаружил такую ​​строку, когда Xcode пытался проанализировать файл:

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.

После исправления этот проект можно открыть нормально.

Алексей Иванов
источник
2
Спасибо, вы спасли мне день :)
Центурион
Спасибо .. в этом гораздо больше смысла, чем визуальный осмотр
Ciprian
2
Это очень помогло. Я просто "tail -f /var/log/system.log" и попытался открыть проект. В системном журнале отображается ошибка (поиск «Xcode»), в которой указан номер строки, в которой произошло исключение синтаксического анализа. Затем я открыл файл в vi и увидел управляющий символ в файле (^ H) и просто удалил этот единственный символ и вуаля! его удалось открыть.
DustinB
Лучший ответ, чем пытаться ударить и попробовать. Прочтите журнал консоли.
Урмил Сетия
6
Просто попробуйте собрать его из Терминала, например xcodebuild -project Project.xcodeproj build. Вы увидите ошибку прямо в Терминале.
Slavko Coolesoff
6

Проанализируйте синтаксис файла вашего проекта. Проверьте это внутри своего проекта в терминале:

plutil -lint project.pbxproj

Это покажет вам ошибки парсера.

Возможная проблема : некоторые проекты устанавливают стратегию слияния git unionдля файлов проекта. Это работает в большинстве случаев, но незаметно уничтожит файл вашего проекта в случае сбоя. Эта стратегия определена в .gitattributesфайле в вашем репозитории.

Беседер
источник
3

Недавно я столкнулся с той же проблемой при попытке объединить мою ветку с удаленной веткой. Однако ни одно из вышеперечисленных решений не казалось подходящим для моей проблемы.

Не было конфликтов слияния между файлом project.pbxproj в моей или удаленной ветке. Однако мой файл projectName.xcodeproj отказывался открываться по той же причине, что и в заданном вопросе.

Мое решение заключалось в том, чтобы просмотреть project.pbxproj с помощью текстового редактора и выяснить, есть ли какие-либо нарушения в синтаксисе файла (например, лишняя фигурная скобка). Я ускорил этот процесс, сосредоточив внимание на строках, которые были вставлены или удалены в старом файле, по сравнению с объединенным файлом. При ближайшем рассмотрении я обнаружил, что причиной моей проблемы было повторение следующей строки:

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

в моем объединенном файле. Это привело к незакрытой фигурной скобке и, как следствие, неправильному синтаксису pbxproj. Удаление указанной выше строки устранило мою проблему.

Абхи
источник
2

Я столкнулся с той же проблемой. Я удалил сгенерированные строки с помощью git, как всегда, но Xcode по-прежнему отказывался открывать файл .xcodeproj. Но все было правильно, скобок не было и т. Д. Наконец, я попытался выйти из Xcode и открыть проект, когда Xcode был закрыт. ... и все заработало. Я надеюсь, что это поможет кому-то.

РЕДАКТИРОВАТЬ:

для разрешения конфликтов в вашем файле .xcodeproj вы можете использовать этот удобный скрипт:

  1. Создайте пустой файл .sh в каталоге вашего проекта (например, resolve_conflicts.sh)
  2. Вот сценарий:

    файл проекта = find -d . -name 'project.pbxproj' каталог проекта =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. Запустите его из терминала с помощью команды sh: sh resolve_conflicts.sh

Войта
источник
где генерируются строки с помощью git?
Harshil Kotecha
Эти строки являются маркерами конфликта: «<<<<<<<», «=======» и «>>>>>>>». Дополнительную информацию о разрешении конфликтов git можно найти здесь: help.github.com/articles/…
Войта,
@Vojta, не могли бы вы рассказать об этом сценарии? Я получаю эту ошибку:resolve_conflicts.sh: line 1: -d: command not found resolve_conflicts.sh: line 3: $tempfile: ambiguous redirect
Daniel
Привет @Daniel, вот он: gist.github.com/vojtaBelovsky/0be156ff37929e16f55f253d8a97d808
Войта
1

Восстановите project.pbxproj

svn revert --filename--

мондусаж
источник
1

Шаги, которые необходимо выполнить: - 1. Перейдите в папку, где находится ваш projectName.xcodeproj 2. Щелкните правой кнопкой мыши и выберите «Показать содержимое пакета». Вы сможете увидеть список файлов с расширением .pbxproj. 3. Выберите project.pbxproj. Щелкните правой кнопкой мыши и откройте этот файл с помощью «Редактировать текст». 4. Вы сможете увидеть <<<<<<, ============ и >>>>>>>>>>. Как правило, это конфликты, возникающие при обновлении с Sourcetree / SVN / GITLAB. Удалите их и сохраните файл. 5.Теперь вы сможете открыть проект без сообщений об ошибке.

Акаш Сингх
источник
0

Похоже, вам придется создать новый проект в Xcode, перейти в старый каталог и перетащить все исходные файлы, перья и ресурсы на боковую панель файлов Xcode в новом проекте. Это не должно занять больше нескольких минут, если вы действительно не много работали с пользовательскими настройками или целями сборки. Либо так, либо вернитесь к последней регистрации в исходном элементе управления и вручную добавьте любые файлы кода, которые изменились с этого момента.

Марк Шарбонно
источник
1
Просто проверьте файл project.pbproject и сравните его с рабочей версией файла проекта.
Atma
0

И как только вы снова начнете работать, вам следует подумать об использовании чего-то вроде subversion или mercurial для резервного копирования и контроля версий. Помните, что электроны не всегда уходят туда, куда должны, - быстро и часто копируют!

Брайан С. Лейн
источник
Моим любимым VCS в последнее время был git.
Лили Баллард,
0

измените название папки текущего проекта и модуль проверки на тот же проект. затем добавьте изменения в текущий файл.

суреш
источник
0

Попробуйте найти между строками HEAD и _HEAD и удалите эти слова в project.pbxproj. Сделайте резервную копию этого файла перед этим ..

Ави Шим.
источник
0

Перейти к PhoneGapTest >> platform Затем удалите папку ios, после этого перейдите в терминал и введите: sudo phonegap build ios после этого вы можете запустить проект

Ранчо
источник
0

Вернувшись, вы можете отменить извлеченный код.

Если вы хотите отменить этот запрос на перенос, просто поместите эту команду в путь к проекту.

-> git merge --abort

Субрамани
источник
0

В случае, если вы не нашли в Text === или <<< или >>>>, как это было для меня, проблема была действительно простой и интересной ... Я меняю имя приложения в Xcode, но не меняю его в UnityProjectSettings перед сборкой - вот в чем проблема ...

Антон Коноплянченко
источник
0

Если вы когда-нибудь сливаетесь и по-прежнему получаете проблемы, которые не знают, что они из себя представляют, я имею в виду не очевидные признаки разницы

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

Затем вы можете проанализировать файлы своего проекта с помощью https://github.com/Karumi/Kin , установить и использовать

kin project.pbxproj

В нем есть дополнительные ошибки, которые не позволяют легче понять и решить открытый проект (хеши, группы и т. Д.).


И, кстати, это также может быть полезно, хотя я не использовал его, попробуйте сравнить 2 версии файлов вашего проекта https://github.com/bloomberg/xcdiff, чтобы вы действительно узнали, что происходит.

tyoc213
источник
-2

subversion повредит мой файл проекта после svn-up почти еженедельно. Я пытаюсь понять, почему он это делает прямо сейчас, и столкнулся с этой проблемой.


источник
Я предполагаю, что у вас есть проект, открытый в Xcode одновременно с обновлением или фиксацией ... "ЕСЛИ" Xcode происходит автосохранение в то же время, я предполагаю, что может произойти некоторая коррупция
epatel
-3

Это связано с тем, что в названиях проектов не должно быть пробелов между ними.

Мохсин Музавар
источник