Неможливо відкрити проект ... не можна відкрити, оскільки файл проекту не може бути проаналізований


93

Я деякий час працював над створенням програми для iPhone. Сьогодні, коли у мене розрядився акумулятор, я працював і постійно зберігав свої вихідні файли, після чого живлення вийшло ...

Тепер, коли я знову підключив комп’ютер, і він отримує хорошу потужність, я намагаюся відкрити файл проекту, і з’являється повідомлення про помилку:

Не вдається відкрити проект

Проект ... неможливо відкрити, оскільки файл проекту неможливо проаналізувати.

Чи є спосіб, щоб люди знали, що я можу від цього оговтатися? Я спробував використати старий файл проекту, знову вставити його, а потім скомпілювати. Це дає мені помилкову помилку, яка, мабуть, пов’язана з тим, що вона не знаходить усіх потрібних файлів ...

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


EDIT

Гаразд, я зробив різницю між цим та трохи старшим файлом проекту, який працював, і побачив, що у файлі є деякі пошкодження. Після об’єднання їх (хорошої та найновішої частин) він зараз працює.

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

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

Відповіді:


228

Я зіткнувся з цією проблемою, і мій старший розповів мені про рішення, тобто:

Клацніть правою кнопкою миші на вашому 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 не справляється з цим витончено, є для мене щоденним роздратуванням.
Thane Brimhall

Дякую. Моє видання вийшло у формі <<<<<<<<< HEAD ======= >>>>>>>. Це було в двох місцях до кінця файлу .pbxproj. Після того, як я видалив ці елементи, я зміг знову запустити файл .xcodeproj. Шукайте, щоб ці елементи помітно не відповідали решті файлу.
AgnosticDev

1
У моєму випадку його <<<<<<< HEAD, ======, >>>>>>> якийсь буквено-цифровий. Видаліть ці три рядки, а потім збережіть і відкрийте. Працював як оберіг !!! Дякую Аллот.
Gowrie Sammandhamoorthy

47

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

У мене виник конфлікт злиття у розділі PBXGroup (початок якого вказується таким коментарем до блоку: / * Початок розділу PBXGroup * /) файлу 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 рядки в кінці першої АТС.

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

Отже, якщо ви стикаєтесь із синтаксичним аналізом після того, як вважали, що вирішили всі конфлікти, пов’язані зі злиттям, можливо, вам слід уважніше розглянути .pbxproj і переконатися, що проблем із форматуванням немає!


ймовірно, ви випадково видалили двокрапку та / або фігурні дужки під час вирішення конфліктів злиття. Ви повинні обережно взяти належну частину (або обидві) з конфліктів злиття та видалити маркери. Це воно.
Стас

додавання sourceTree = "<group>"; }; вирішив це для мене! Так корисно! Дякую!
Нітін Алабур

Просто хотів щось додати до цього. У мене була така сама проблема, але робота з CocoaPods та робочим середовищем. Мені довелося нуклеювати робочу область і створювати її заново, щоб Xcode підняв виправлення.
Ніко

@Nico: Чи не заперечуєш ти, як поділитися цим? Я стикаюся з подібною проблемою тут і мені важко
Ісаак

Я виявив, що після виправлення файлу .pbxproj, який мені потрібно було закрити та знову відкрити проект, щоб він запрацював, але він спрацював. Дякую SnoopyProtocol!
KeithTheBiped

28

Я отримав саме ту саму помилку, оскільки Кордова дозволить вам створити проект із пробілами в ньому, а Xcode не знає, як поводитися.


Велике спасибі, це була відповідь, у мене був простір.
Макс

Те саме з Кордовою Фонегап 3.4
Майлз М.

Це було саме те питання, яке у мене було. Дякую!
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 не допоміг мені виявити помилку після об’єднання. Після перегляду syslog знайшов такий рядок при спробі 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" і спробував відкрити проект. У system.log він показав помилку (пошук "Xcode"), яка показала номер рядка, де стався виняток синтаксичного аналізу. Потім я відкрив файл у vi і побачив у файлі контрольний символ (^ H) і просто видалив цей єдиний символ і вуаля! його вдалося відкрити.
ДастінБ

Найкраща відповідь, а не намагання робити удар і спробу. Прочитайте журнал консолі.
Urmil Setia

5
Просто спробуйте побудувати його з терміналу, як xcodebuild -project Project.xcodeproj build. Ви побачите помилку прямо в Терміналі.
Славко Кулсофф

6

Проаналізуйте синтаксис файлу проекту. Перевірте це всередині свого проекту в терміналі:

plutil -lint project.pbxproj

Це покаже вам помилки аналізатора.

Можлива проблема : Деякі проекти встановлюють стратегію злиття git unionдля файлів проектів. Це працює більшість випадків, але мовчки вбиває файл проекту, якщо він не вдається. Ця стратегія визначена у .gitattributesфайлі вашого сховища.


3

Нещодавно я зіткнувся з тією ж проблемою, намагаючись об’єднати свою гілку з віддаленою гілкою. Однак жодне із наведених вище рішень не здавалося відповідним моїй проблемі.

Між файлом project.pbxproj у моїй філії чи віддаленій гілці не було конфліктів злиття. Однак мій файл projectName.xcodeproj відмовляється відкривати з тієї самої причини, що показана у заданому запитанні.

Моє рішення полягало в тому, щоб переглянути проект.pbxproj за допомогою текстового редактора та з’ясувати, чи є якісь порушення в синтаксисі файлу (наприклад, зайва фігурна дужка). Я пришвидшив цей процес, зосередившись на рядках, які були вставлені або видалені у старому файлі порівняно з об'єднаним файлом. При детальному розгляді я виявив причиною своєї проблеми повторення наступного рядка:

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

у моєму об’єднаному файлі. Це призвело до закритої фігурної дужки і, як наслідок, неприпустимого синтаксису pbxproj. Видалення наведеного вище рядка вирішило мою проблему.


2

Я просто зіткнувся з тією ж проблемою. Я видалив згенеровані рядки за допомогою git, як завжди, але Xcode все одно відмовився відкрити файл .xcodeproj. Але все було правильно, відсутні дужки тощо. Нарешті, я спробував вийти з Xcode і відкрити проект, коли Xcode був закритий .. тоді це спрацювало. Я сподіваюся, що це комусь допоможе.

Редагувати:

для вирішення конфліктів у файлі .xcodeproj ви можете використовувати цей зручний скрипт:

  1. Створіть порожній файл .sh у своєму каталозі проекту (наприклад, resol_conflicts.sh)
  2. Ось сценарій:

    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 "<<<<<<< ГОЛОВА" | grep -v "=======" | grep -v "^ >>>>>>>"> $ tempfile mv $ tempfile $ projectfile

  3. Запустіть його з терміналу за допомогою команди sh: sh resol_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
Даніель

Привіт @ Даніель, ось воно: gist.github.com/vojtaBelovsky/0be156ff37929e16f55f253d8a97d808
Войта


1

Кроки, яких слід дотримуватися: - 1. Перейдіть до папки, де знаходиться ваше projectName.xcodeproj 2. Клацніть правою кнопкою миші та виберіть «Показати вміст пакета». Ви зможете побачити список файлів із розширенням .pbxproj. 3.Виберіть проект.pbxproj. Клацніть правою кнопкою миші та відкрийте цей файл за допомогою "Текстового редагування". 4.Ви зможете побачити <<<<<<, ============ та >>>>>>>>>>>. Як правило, це конфлікти, які виникають, коли ви берете оновлення з Sourcetree / SVN / GITLAB. Видаліть їх і збережіть файл. 5.Тепер ви зможете відкрити проект без будь-якого повідомлення про помилку.


0

Здається, вам доведеться створити новий проект у Xcode, зайти в старий каталог і перетягнути всі свої вихідні файли, перо та ресурси на бічну панель файлів Xcode у новому проекті. Це не займе більше кількох хвилин, якщо ви дійсно не зробили багато роботи зі спеціальними налаштуваннями збірки або цілями. Або це, або поверніться до останньої реєстрації у вашому елементі керування джерелом та вручну додайте будь-які файли коду, які змінювались від тепер до того часу.


1
Просто перевірте файл project.pbproject і зробіть різницю щодо робочої версії файлу проекту.
Атма

0

І як тільки ви знову запустите щось, вам слід розглянути можливість використання чогось на кшталт диверсії або ртутного для управління резервними копіями та редакціями. Пам'ятайте, що електрони не завжди йдуть туди, куди їм слід, резервують рано і часто!


Останнім часом моїм улюбленим VCS був git.
Лілі Баллард

0

змініть назву поточної папки проекту та модуль оформлення замовлення на той самий проект. потім додайте поточні зміни у файлі.



0

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


0

Перейти до платформи PhoneGapTest >> Потім видаліть папку ios після цього перейдіть до терміналу, потім введіть: sudo phonegap build ios після цього ви можете запустити проект


0

Повернувши, ви можете скасувати витягнутий код.

Якщо ви хочете скасувати цей запит на витягування, просто поставте цю команду на шлях проекту

-> git merge --abort


0

Якщо ви не знайшли в тексті === або <<< або >>>>, як це було для мене, проблема була дійсно простою і веселою ... Я міняю назву програми в Xcode, але не змінюю її в UnityProjectSettings перед збіркою - в цьому і була проблема ...


-2

subversion пошкодить мій файл проекту після svn up майже на тиждень. Я намагаюся зрозуміти, чому це робить саме зараз, і натрапив на цю проблему.


Я припускаю, що у вас відкривається проект у Xcode одночасно з оновленням або фіксацією ... "ЯКЩО Xcode трапляється автоматично
зберігати

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.