FileMerge .nib тип файла не может быть объединен
Я пытаюсь объединить два файла.nib. FileMerge не имеет проблем с отображением сравнения двух файлов. Я пытаюсь сохранить все настройки в одном файле (т.е. справа), за исключением двух настроек, которые я хочу скопировать из другого файла (т.е. слева). Различия - это всего лишь одна строка кода, каждая из которых изменяет целочисленное значение ключа autoresizingMask. Так что не должно быть сложно слиться. Я бы использовал TextEdit, если бы он позволил мне открыть файл.nib.
Однако я получаю ошибку "Этот тип файла не может быть объединен". Я попытался поиграть с настройками FileMerge > Preferences > Filters для расширения.nib, как упоминалось в ответе на аналогичный вопрос, размещенный на этом сайте, но безуспешно. Насколько я могу судить, параметр Display должен быть оставлен как "Фильтрованный" для.nib, поскольку нефильтрованный не читается, и я попытался переключить выбор "Применить". Я предполагаю, что действительный фильтр сам по себе не должен быть изменен или изменен?
Существует ли какая-либо распространенная причина, по которой два файла.nib, которые FileMerge без проблем отображает в окне сравнения, не могут быть объединены?
Спасибо
3 ответа
XIB могут быть объединены. В простых случаях (таких как изменение текста, изменение размеров элементов) это безопасно и просто, а последние версии XIB могут пережить даже более сложные слияния (Apple обновляет формат, и в настоящее время он достаточно читабелен и не использует числовые идентификаторы, которые использовались для сливается с ошибками.)
Проблема в том, что FileMerge имеет жестко встроенную конфигурацию для фильтрации файлов XIB через ibtool pretty-print, и это говорит о том, что они не могут быть объединены.
// редактировать: похоже, что Apple добавила проверку целостности исполняемого файла, поэтому решение по исправлению больше не работает. "Прекратить использование FileMerge" теперь является решением.
Несколько советов:
Включите опцию "Сжать пробелы" в настройках FileMerge.
Когда diff - это полный беспорядок, а файлы XIB кажутся совершенно разными, они, вероятно, являются разными версиями формата. Выполните это для каждого файла XIB перед объединением (для исходных файлов без маркеров конфликта объединения):
ibtool --write foo.xib --upgrade foo.xib
Это преобразует файлы XIB в последнюю версию XCode, поэтому оба будут иметь одинаковую структуру.
Файлы NIB и XIB не могут быть объединены, как бы это ни было заманчиво. Может быть полезно просмотреть различия с помощью FileMerge, но используйте эту информацию только для информирования о том, какие изменения вы воссоздаете вручную в Интерфейсном Разработчике.
Кроме того, FileMerge не показывает фактическую разность текста файлов NIB, а скорее вывод из ibtool. Вы можете увидеть фактическую разницу в тексте, удалив запись для NIB в настройках FileMerge, но этот параметр не сохраняется между запусками FileMerge.
Файлы.xib являются текстовыми - они должны работать, особенно современные, которые больше похожи на файлы раскадровки. FileMerge, однако, имеет в настройках фильтра раздел для файлов XIB - он сравнивает обработанный вывод, а не исходные файлы. Это предотвращает сохранение слияния.
Теоретически, простое удаление записи "xib" в настройках должно сработать, но всякий раз, когда я пытаюсь удалить эту строку фильтра, она возвращается, когда я перезапускаю FileMerge. Таким образом, этот подход, похоже, не работает.
То, что, кажется, работает, это просто изменить команду фильтра во втором столбце на cat
(т.е. удалите команду "ibtool" и ее аргументы и замените ее просто "cat", что приведет к прямой копии исходного файла) - и затем выберите отображение "Original" вместо "Filtered" в третий столбец. На этом этапе FileMerge (без взлома двоичного файла) выглядит нормально при сохранении объединенных файлов.xib.
Это не будет работать с двоичными файлами.nib, но они больше не редактируются напрямую, так что это не должно быть большой проблемой при слияниях.