Тип файла 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 файлами, но они больше не редактируются напрямую, поэтому это не должно быть большой проблемой при слияниях.