NIB和XIB Interface Builder文件格式有什么区别?

界面生成器文件中的nib和xib有什么不同?

从Interface Builder版本3开始,已经添加了一种新的文件格式(扩展名为.xib),除了存储在一个平面文件中之外,其function与.nib完全相同,使其更适合存储在版本控制系统和处理通过诸如diff之类的工具。

http://en.wikipedia.org/wiki/Interface_Builder#Design

XIB是平面文件,而不是一个捆绑软件。 这使SCM(源代码pipe理)系统更容易处理。 当你编译你的应用程序时,XIB被编译成一个NIB文件以包含在你的应用程序中。

包含在应用程序包中的已编译的NIB在Interface Builder中不再可编辑,并且比等效的XIB或传统NIB文件小得多。

另外,当你编译你的项目时.xib文件将被编译成nib。

XIB文件基本上是一个NIB文件的源文件,几乎总是可以在Xcode中编辑XIB文件(除非它们已经过时或损坏) 。 而较新的NIB被压缩并且是不可打开的,较旧的NIB是可以被Xcode查看的捆绑包,捆绑的NIB包含一些包含designable.nib的源/归档文件,其通常仅仅是重命名的XIB文件。


NIB = Nxt I nterface B uilder(NXT = NextStep = NS)

XIB = X ml I nterface B uilder


尽pipe新的归档NIB文件对于包括Xcode在内的大多数应用程序是无法打开的,但它们仍然可能被取消归档。 我发现这个免费软件应用程序称为NibUnlocker在CharlesSoft网站上,它可能会反汇编压缩的NIB文件,并将其导出为XIB文档。 这个应用程序仍然相当麻烦,但它有时是非常准确的基于笔尖的内容。

(NibUnlocker是一个非常不准确的名字,Nibs没有被locking,他们被归档)


点击下载NibUnlocker


如果您想了解更多信息,可以阅读下面提供的有关NIBXIB格式的其他信息:

Nxt界面生成器解剖:

存档的NIB

压缩的NIB文件是复杂的文件来分析,但这不是不可能的。 这些文件的结构基于压缩的属性列表(以“bplist00”开头),其中一些内容通过NSKeyedArchiver存档。 由于一个NIB被格式化为一个属性列表,这允许一个小小的破解:如果你实际上改变了一个Nib的扩展名为.plist,例如。 ArchivedNib.nibArchivedNib.plist您将能够在Xcode中将其打开,并将其视为属性列表。 当你将一个Nib作为属性列表来查看时,你可能会得到一些基本的属性,比如$ version,$ objects,$ archiver和$ top。

有用的笔记

CFKeyedArchiverUID对象实际上是一个redirect器,在{value = xx}中,该值是从数组开始的$ objects数组中的项的偏移量 。 例如。 <CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29} ,value = 29,结果将是$对象数组中的第29项。 在Objective C中,你可以用这个方法从NSArray中检索这个值:

 + (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID { void *uid = (__bridge void*)keyedArchiverUID; NSUInteger *valuePtr = uid+16; return *valuePtr;} 

(我发现自己使用互联网,后来我用Hopper反汇编NibUnlocker ,我注意到它的源代码,它使用相同的技术,通过加载到NSDictionaryNIB ,并通过其所有的连接,对象等..和写出一个新的XIB

如果这有帮助;-)

在function上,只有xib是一个源代码控制友好的格式