IPhone Dev - Насколько важна Project.pbxproj?

Что делает этот файл и насколько важно его "правильно"?

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

Каков правильный способ справиться с этим и почему?

Ответы

Ответ 1

Project.pbxproj содержит все метаданные о вашем проекте, которые Xcode использует для его создания; настройки, ссылки на файлы, конфигурацию, целевые платформы и т.д.

т.е. это критически важно.

На самом деле для этого нет отличного ответа. Как правило, команды избегают конфликтов, ограничивая редактирование проекта одним членом команды за раз.

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

Пока это не так. И когда их нет, верните, смените изменения вручную (т.е. Внесите изменения в проект, которые конфликтуют) и продолжайте.

Ответ 2

Попробуйте мой script xUnique. Что он делает:

  • конвертировать project.pbxproj в формат JSON
  • Итерировать все objects в JSON и дать каждому UUID абсолютный путь и создать новый UUID с использованием MD5 hex digest пути
    • Все элементы в этом объекте json фактически связаны как дерево
    • Мы указываем атрибут пути для каждого node дерева, используя его уникальный атрибут; этот путь является абсолютным путем к корню node,
    • Примените MD5 hex digest к пути для node
  • Замените все старые UUID на MD5 hex digest, а также удалите неиспользуемые UUID, которые не находятся в текущем дереве node и UUID в неправильном формате
  • Отсортируйте файл проекта, введя children, files, PBXFileReference и PBXBuildFile список и удалите все дублированные записи в этих списках
    • см. sort_pbxproj метод в xUnique.py, если вы хотите знать реализацию;
    • Он портирован из моего измененного sort-Xcode-project-file с некоторыми отличиями в упорядочении PBXFileReference и PBXBuildFile
  • С помощью options вы можете использовать xUnique с большей гибкостью