Reveal 和 Spark Inspector 是两款 iOS 上比较好用的 Inspector View Hierarchy 工具。它们能够将 App 界面的视图层次结构实时的展示出来,以便于调试分析,就好像用 FireBug 分析 Web 页面一样。
一般情况下,Reveal 和 Spark Inspector 都只能用在自己的项目中,因为必须在项目中包含他们的库文件。如果我们能够在没有源码的情况下使用 Reveal 或 Spark Inspector 分析他人的 App View Hierarchy,无疑是一个很好的学习途径。
越狱设备,安装软件
如前面所说,一般情况下,Reveal 和 Spark Inspector 都只能用在自己的项目中,查看自己项目的 View Hierarchy。如果想要查看第三方 App 的 View Hierarchy 就必须让第三方软件去调用 Reveal 或 Spark Inspector 的动态库文件(libReveal.dylib 和 SparkInspector.dylib)。想要完成这个任务那就得使出非常手段了 – 越狱!。
越狱完成后还需要安装两个软件:
- OpenSSH – 可以让你在 Mac 上通过终端操作设备;
- Cydia Substrate(原名 Mobile Substrate)– 就是通过它让第三方 App 调用 Reveal 或 Spark Inspector 的动态库文件
在 Cydia 中找到并安装它们。
拷贝库文件
设备越狱并安装好上面的两个软件之后,就可以将 Reveal 或 Spark Inspector 的库文件拷贝到设备中了。
Reveal 使用如下命令:
1
|
|
Spark Inspector 使用如下命令:
1
|
|
创建 plist 文件
将库文件拷贝到设备中之后,还需要创建相应的 plist 文件使其运行。 可以使用 iFunbox 打开目标 App,在根目录下找到 iTunesMetadata.plist,将 softwareVersionBundleId 项中的值记下来,然后创建文件 libReveal.plist 或者 SparkInspector.plist,将目标 App 的 BundleId 按照如下格式写好(Bundles 可以多个):
1 2 3 4 5 6 |
|
plist 文件创建完成之后将其拷贝到设备 /Library/MobileSubstrate/DynamicLibraries 目录中去:
1
|
|
完成!
使用 killall SpringBoard
命令或者重启设备之后就可以使用 Reveal 或 Spark Inspector 查看目标程序的 View
Hierarchy 了。
可能出现的问题
某些情况下可能出现重启设备后 Cydia Substrate 没用工作,libReveal.dylib 或 SparkInspector.dylib 没有加载。这时 Reveal 和 Spark Inspector 仍然无法工作。可以共通过下面的方法手动加载。
Reveal 使用如下命令:
1 2 |
|
Spark Inspector 使用如下命令:
1 2 |
|
当然也可以同时加载这两个 dylib,使用如下命令:
1 2 |
|
然后使用 killall SpringBoard
命令之后就可以使用 Reveal 或 Spark Inspector 查看目标程序的 View
Hierarchy 了。但是当设备重新启动之后还是得重新手动加载一次 dylib。