Тип файла FileMerge.nib не может быть объединен

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

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

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

Спасибо

Ответы

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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