在 iOS 上反编译或解释 XIB/NIB 文件

Posted

技术标签:

【中文标题】在 iOS 上反编译或解释 XIB/NIB 文件【英文标题】:Decompiling or interpreting XIB/NIB files on iOS 【发布时间】:2014-06-16 21:19:12 【问题描述】:

我对 NIB/XIB 格式的理解进行了相当多的调查,但我似乎找不到关于该主题的太多信息。我有兴趣了解 ios 如何将事件编码为按钮按下等。例如,我知道按钮和它们调用的处理程序可以动态分配,但我特别想知道如何解码 NIB/XIB,以便知道给定按钮调用了哪个单击事件。我很想知道 IBOutlets 是如何连接的,以及我如何知道某个事件可以访问什么功能。

我正在开发一个自动测试框架,这个功能将极大地帮助我的工具的可用性。非常感谢您提供的任何见解。

【问题讨论】:

【参考方案1】:

如果您在文本编辑器中打开 .xib 文件,您会看到它是以 XML 编码的。排列 XML 节点描述了视图层次结构的结构,以及要分配给给定键路径或这些视图的控制状态的值。您可以看到如下描述的 IBAction 连接:

<connections>
    <action selector="buttonPressed:" destination="-1" eventType="touchUpInside" id="290"/>
</connections>

任何操作连接的选择器都应由文件所有者实现,您可以在&lt;objects&gt; 部分下找到它作为第一个元素。它看起来像这样:

<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="SomeViewController">

注意&lt;resources&gt; 部分也很重要,该部分描述了 xib 使用的任何资源(通常是图像)。

【讨论】:

我应该澄清一下,我很少看到这种格式的。它们几乎总是采用 NibArchive 格式,我想知道如何查看或取消归档它。感谢您的有用回复。 Xcode6-beta,但是我有兴趣提供一个向后兼容大多数 xcode 版本的框架。 在 Xcode 中单击一个 xib 文件,然后查看右侧实用工具工具栏中的文件检查器。 Interface Builder Document 下的下拉菜单有哪些设置? 嗯,我正在寻找一种编程方式来做到这一点。在我的最终用户环境中使用 xcode 不是一个选项。 我不建议使用 xcode,只是要找出您要解码的 .xib 版本。 xibs 的实现经历了多次迭代,其中最新的是简单易读的 XML

以上是关于在 iOS 上反编译或解释 XIB/NIB 文件的主要内容,如果未能解决你的问题,请参考以下文章

iOS Swift 子类化 ViewController 由 xib (nib) 文件初始化

iPhone SDK,在运行时替换 XIB/NIB 文件 onViewDidAppear 或任何时间?

MainWindow.xib nib 文件有啥用?

如何在框架内加载 `.xib` / `.nib` 文件?

mac android apk反编译

使用 apktool 反编译 apk