Проект Xcode 4: утилита для очистки файла pbxproj? - PullRequest
24 голосов
/ 20 мая 2011

У меня есть проект Xcode 4 с 2 целями, одна для iPhone и одна для iPad.Если я нажимаю на цель iPad и пытаюсь перейти к настройкам сборки, происходит сбой Xcode 4:

Обнаружено несколько утверждений.Первым утверждением было: СБОЙ В СБОРЕ в /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-269/Xcode3Sources/XcodeIDE/Frameworks/DevToolsBase/pbxcore/FileTypes/../PBXFileType.m:59, это не пустая строка, это имя файла должно быть,nil

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

Ответы [ 6 ]

23 голосов
/ 31 мая 2011

Я попробовал метод Горбстера безуспешно (хотя в прошлом он решал подобные проблемы для меня).

Я вошел в свой файл project.pbxproj (в пакете .xcodeproj для проекта) и обнаружил две строки, которые выглядели немного подозрительно, обе формы:

53A45F8F138FE6F40077017F /* (null) in Resources */ = {isa = PBXBuildFile; };

Я удалил строки и вуаля: я снова могу получить доступ к настройкам сборки для этой цели.

Понятия не имею, как они туда попали. Я думаю, что-то связанное с ошибочным слиянием в SVN.

15 голосов
/ 23 мая 2011

Сегодня утром столкнулся с тем же вопросом после слияния коллег.

Мне удалось исправить это с помощью следующего:

  1. Закрыть Xcode
  2. Откройте пакет .xcodeproj в Finder
  3. Удалить файл project.xcworkspace файл / пакет
  4. Откройте папку xcuserdata и удалите свою пользовательскую папку .xcuserdatad .
  5. Повторно открыть Xcode и проект

Я потерял некоторые незначительные пользовательские настройки (историю файлов и вкладок и т. Д.), Но теперь могу без проблем щелкнуть по всем (9) моим целям. Оказывается, мой коллега работал на более ранней версии XCode, но я не уверен, способствовало ли это падению IDE.

9 голосов
/ 13 июля 2011

Бен Мошер нашел решение. И да, это связано с проблемой слияния SVN.

Поскольку мы работаем в команде с SVN, ошибка часто возникает, поэтому я написал скрипт bash:

#!/bin/bash
sed "/(null) in/d" project.pbxproj > tmp_project.pbxproj
mv tmp_project.pbxproj project.pbxproj
6 голосов
/ 05 декабря 2011

Попробуйте выполнить следующие шаги, пока ваш XCode закрыт.

  1. Перейдите в файл {YOUR_PROJECT} .xcodeproj в поисковике.

  2. Щелкните правой кнопкой мыши файл {YOUR_PROJECT} .xcodeproj .

  3. Выберите Показать содержимое пакета ... это откроет содержимое на другом экране Finder.

  4. Открыть файл project.pbxproj и найти все строки, содержащие строку " (null) в "

  5. Удалить все строки, имеющие (ноль) в ... не беспокойтесь .... удалить уверенно.

  6. Сохраните ваш файл.

Теперь откройте ваш проект с помощью XCode и попробуйте открыть вкладку Build Settings ... надеюсь, ваша проблема будет решена.

Спасибо, Mohamed.

0 голосов
/ 29 сентября 2016

Если вы также попытались удалить (нулевые) контрольные строки и удалить папку , специфичную для пользователя .xcuserdatad , и они не сработали, вот потенциальное решение.К вашему сведению ... Это было в Xcode 7.3.1.

Вот сценарий, с которым я столкнулся:

Я столкнулся с этой проблемой, которая была вызвана наличием "двойных" ветвей в git-репо... (т. е. одна ветвь BRANCH_A является ветвью разработки с некоторыми функциями, не подлежащими выпуску, а другая, имеющая те же коммиты, за исключением новых функций, называется BRANCH_B).

Рабочий процесс разработки выглядит следующим образом: начните с BRANCH_B, создайте ветвь фиксации CHANGE_C, внесите изменения и зафиксируйте, затем извлеките BRANCH_A, создайте ветвь фиксации, затем вишневый выбор изменений из CHANGE_C.BRANCH_A отслеживает BRANCH_B таким образом, с его файлами дополнительных функций.

В моем случае (по какой-то причине во время перебазирования изменений коллеги с пульта, который отслеживает BRANCH_B, файл проекта для BRANCH_B был поврежден.

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

Первоначально он не будет компилироваться, пока все ссылки на файлы объектов (из BRANCH_A) не будут удалены из Target's Build Phases> Compile Sources.

Отлично работает.

0 голосов
/ 03 января 2014

Щелкните правой кнопкой мыши файл .xcodeproj и выберите «Показать содержимое пакета».

Затем откройте файл project.pbxproj с помощью TextEdit и продублируйте его.

Сохраните дубликат файла в любом месте с таким же именем и расширением.(project.pbxproj)

И заменить старым файлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...