XIB文件基本上是一个未编译的NIB文件,XIB始终可以在 Xcode 中编辑(除非它们已过时或损坏),但大多数NIB是压缩的(扁平)并且无法打开。但是,较旧的NIB是包含一些源/存档的捆绑包,designable.nib
其中通常只是重命名的XIB文件和一个keyedobjects.nib
其他已编译的NIB
NIB = N xt接口构建器_
XIB = X ml接口构建器_
尽管新归档的NIB文件对于包括 Xcode 在内的大多数应用程序都无法打开,但它们仍然可能被取消归档。我在CharlesSoft网站上发现了这个名为NibUnlocker的免费软件应用程序,它可能会反汇编压缩的Nib文件并将其导出为XIB文档。这个应用程序仍然存在相当多的错误,但根据Nib的内容,它有时非常准确。
(NibUnlocker 是一个非常不准确的名称,Nib 未锁定它们已存档)
点击下载笔尖解锁器
如果您想了解更多信息,可以阅读我在下面提供的有关NIB和XIB格式的一些附加信息:
Nxt 界面生成器剖析:
存档的NIB
压缩的 NIB 文件是分析复杂的文件,但这并非不可能。这些文件的结构基于压缩的属性列表(以“bplist00”开头),其中一些内容通过 NSKeyedArchiver 存档。由于NIB被格式化为属性列表,这允许一个小技巧:如果您实际上将Nib的扩展名更改为 .plist,例如。ArchivedNib.nib
您ArchivedNib.plist
实际上将能够在 Xcode 中将其作为属性列表查看。当您将Nib视为属性列表时,您可能会获得一些基本属性,例如 $version、$objects、$archiver 和 $top。
有用的笔记
CFKeyedArchiverUID对象实际上是一个重定向器,在 {value = xx} 中,该值是$objects 数组中的项目相对于数组开头的偏移量。例如。<CFKeyedArchiverUID 0x60800002bc20 [0x7fffef6b8c30]>{value = 29}
, value = 29, 结果将是 $object 数组中的第 29 项。在 Objective C 中,您可以使用以下方法从 NSArray 中检索此值:
+ (NSUInteger)valueForKeyedArchiverUID:(id)keyedArchiverUID {
void *uid = (__bridge void*)keyedArchiverUID;
NSUInteger *valuePtr = uid+16;
return *valuePtr;}
就像这有帮助;-)