17

我正在尝试合并两个 .nib 文件。FileMerge 显示两个文件的比较没有问题。我试图将所有设置保留在一个文件中(即右侧),除了我想从另一个文件(即左侧)复制的两个设置。区别只是一行代码,每行代码都会更改 autoresizingMask 键的整数值。所以合并应该不难。如果允许我打开 .nib 文件,我会使用 TextEdit。

但是我收到错误“无法合并此文件类型”。我尝试使用 .nib 扩展名的 FileMerge > Preferences > Filters 设置,如本网站上发布的类似问题的答案中所述,但没有运气。据我所知,对于.nib,显示设置应保留为“已过滤”,因为未过滤它不可读,我尝试切换“应用”选择。我假设实际使用的过滤器本身不应更改或修改?

FileMerge在比较窗口中显示没有问题的两个.nib文件无法合并有什么常见原因吗?

谢谢

4

3 回答 3

5

XIB 可以合并。在简单的情况下(如文本更改、元素大小调整),它既安全又简单,最新的 XIB 版本可以在更复杂的合并中存活下来(Apple 一直在升级格式,现在它具有合理的可读性,并且不使用过去的数字 ID合并容易出错。)

问题是 FileMerge 具有硬编码的内置配置来通过 ibtool 漂亮打印过滤 XIB 文件,这使得它们说它们不可合并。

// 编辑:看起来 Apple 已经添加了对可执行文件完整性的验证,因此补丁解决方案不再起作用。“停止使用 FileMerge”是现在的解决方案。

一些技巧:

  • 在 FileMerge 首选项中启用“压缩空白”选项。

  • 当差异完全一团糟并且 XIB 文件看起来完全不同时,它们可能是格式的不同版本。在合并之前在每个 XIB 文件上运行此命令(在没有合并冲突标记的原始文件上):

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

这会将 XIB 文件转换为最新的 Xcode 版本,因此两者将具有相同的结构。

于 2015-04-03T20:23:41.970 回答
4

NIB 和 XIB 文件不能合并,但它可能很诱人。使用 FileMerge 查看差异可能很有用,但仅使用此信息来告知您在 Interface Builder 中手动重新创建的更改。

此外,FileMerge 不显示 NIB 文件的实际文本差异,而是显示来自 ibtool 的输出。您可以通过删除 FileMerge 首选项中的 NIB 条目来查看实际的文本差异,但在 FileMerge 启动之间不会保存此设置。

于 2011-08-30T07:06:24.710 回答
2

.xib 文件是文本——它们应该可以工作,尤其是更像故事板文件的现代文件。然而,FileMerge 在其过滤器首选项中有一个用于 xib 文件的部分——它比较处理后的输出而不是原始文件。这可以防止保存合并。

理论上,只需删除首选项中的“xib”条目就可以了——但是每当我尝试删除该过滤器行时,当我重新启动 FileMerge 时,它​​似乎又回来了。所以,这种方法似乎行不通。

似乎可行的方法是将第二列中的过滤器命令简单地更改为cat(即删除“ibtool”命令及其参数,并仅替换为“cat”,这将导致原始文件的直接副本) - - 然后选择在第三列显示“Original”而不是“Filtered”。那时,保存合并的 .xib 文件时,FileMerge(没有破解二进制文件)似乎很好。

这不适用于二进制 .nib 文件,但不再直接编辑这些文件,因此在合并期间这不应该是一个大问题。

于 2016-06-17T21:28:39.547 回答