FileMerge .nib тип файла не может быть объединен - PullRequest
14 голосов
/ 18 июля 2010

Я пытаюсь объединить два файла .nib.FileMerge не имеет проблем, показывая сравнение двух файлов.Я пытаюсь сохранить все настройки в одном файле (т.е. справа), за исключением двух настроек, которые я хочу скопировать из другого файла (то есть слева).Различия - это всего лишь одна строка кода, каждая из которых изменяет целочисленное значение ключа autoresizingMask.Так что не должно быть сложно слиться.Я бы использовал TextEdit, если бы он позволил мне открыть файл .nib.

Однако я получаю ошибку «Этот тип файла не может быть объединен».Я попытался поиграть с настройками FileMerge> Preferences> Filters для расширения .nib, как упоминалось в ответе на аналогичный вопрос, размещенный на этом сайте, но безуспешно.Насколько я могу судить, параметр Display должен быть оставлен как «Фильтрованный» для .nib, поскольку нефильтрованный не читается, и я попытался переключить выбор «Применить».Я предполагаю, что сам используемый фильтр не должен быть изменен или изменен?

Существует ли какая-либо общая причина, по которой два файла .nib, которые FileMerge без проблем отображает в окне сравнения, не могут быть объединены?

Спасибо

Ответы [ 3 ]

4 голосов
/ 03 апреля 2015

XIB могут быть объединены.В простых случаях (таких как изменение текста, изменение размеров элементов) это безопасно и просто, а последние версии XIB могут пережить еще более сложные слияния (Apple обновляет формат, и в настоящее время он достаточно читабелен и не использует числовые идентификаторы, которые использовались дляСлияние подвержено ошибкам.)

Проблема в том, что FileMerge имеет жестко запрограммированную встроенную конфигурацию для фильтрации файлов XIB через ibtool pretty-print, и это говорит о том, что они не могут быть объединены.

// редактировать: похоже, Apple добавила проверку целостности исполняемого файла, поэтому решение по исправлению больше не работает.«Прекратить использование FileMerge» теперь является решением.

Некоторые советы:

  • Включить параметр «Сжать пробелы» в настройках FileMerge.

  • Когда diff - это полный беспорядок, а файлы XIB кажутся совершенно разными, они, вероятно, являются разными версиями формата.Запустите это для каждого файла XIB, перед объединением (для исходных файлов без маркеров конфликта объединения):

    ibtool --write foo.xib --upgrade foo.xib
    

Это преобразует файлы XIB в последнюю версию Xcode,поэтому оба будут иметь одинаковую структуру.

3 голосов
/ 30 августа 2011

Файлы NIB и XIB не могут быть объединены, как бы это ни было заманчиво. Может быть полезно просмотреть различия с помощью FileMerge, но используйте эту информацию только для информирования о том, какие изменения вы воссоздаете вручную в Интерфейсном Разработчике.

Кроме того, FileMerge не показывает фактическую разность текста файлов NIB, а скорее вывод из ibtool. Вы можете увидеть фактический текстовый diff, удалив запись для NIB в настройках FileMerge, но этот параметр не сохраняется между запусками FileMerge.

2 голосов
/ 18 июня 2016

.xib файлы являются текстовыми - они должны работать, особенно современные, которые больше похожи на файлы раскадровки. FileMerge, однако, имеет в настройках фильтра раздел для файлов XIB - он сравнивает обработанный вывод, а не исходные файлы. Это предотвращает сохранение слияния.

Теоретически, простое удаление записи «xib» в настройках должно сработать, но всякий раз, когда я пытаюсь удалить эту строку фильтра, она возвращается после повторного запуска FileMerge. Таким образом, этот подход, похоже, не работает.

То, что, кажется, работает, это просто изменить команду фильтра во втором столбце на cat (т.е. удалить команду "ibtool" и ее аргументы и заменить просто "cat", что приведет к прямой копии исходного файла) - и затем выберите отображение «Оригинал», а не «Отфильтрованный» в третьем столбце. На этом этапе FileMerge (без взлома двоичного файла) выглядит нормально при сохранении объединенных файлов .xib.

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

...