FLEX (Flipboard Explorer)是一系列集成在APP内部的用于iOS调试的工具集,以工具栏的形式显示在应用中,通过它,可以查看并修改几乎所有的APP运行状态。
强大的调试能力
- 查看、修改View的层次关系。
- 查看对象的属性和实例变量。
- 动态修改属性和实例变量。
- 动态调用实例和类方法。
- 动态访问堆上的对象。
- 访问APP的沙盒。
- 除jAPP的所有类外,还能访问已链接的系统框架,包括私有的。
- 快速访问一些常用的对象,比如
[UIApplication sharedApplication]
、App Delegate、Root View Controller等。 - 动态查看、修改
NSUserDefaults
存储的值。
和其它调试工具不同,FLEX完全运行在你的APP中,所以不需要连接到LLDB/Xcode或者远程调试的服务端,在模拟器和真机上都运行的很好。
用法
简单版本
1
|
|
完整版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
功能示例
修改视图
点击views
,从工具栏下面弹出界面,显示视图的详细信息,并能修改属性值和调用方法。
查看对象
FLEX在malloc分配的内存块中查找相关的对象,如下:
文件浏览
查看APP沙盒内的文件系统,包括文件大小、图片预览、以友好的方式显示json和plist文件。也能将文本和图片文件拷贝和剪贴板中,
探索系统库资源
深挖框架内部的class,创建相应的实例,并访问其状态。
编辑NSUserDefaults
FLEX允许修改NSUserDefaults的strings, numbers, arrays, and dictionaries,及其它们的组合,输入格式为json;如果使用其它数据作为key,如NSDate,则是只读的。
探索其它APP
代码注入留给大家去摸索了
避免将FLEX编译到正式版本
尽管FLEX很适合在开发调试的时候使用,但它不应该让最终用户看到。在Xcode –> Project –> Build Setting,点+
选择Add User-Defined Setting
。
命名为EXCLUDED_SOURCE_FILE_NAMES
,在Release
配置中,填入FLEX*
,将不会编译所有以FLEX开头的文件,Debug
配置里空白就行了。
在所有集成FLEX代码的地方,确保将其嵌入到#if DEBUG
中,更多相关信息,请参考官方示例。
注意
- NSUserDefaults中,如果值的类型为
id
,FLEX将把输入的string转为json,目的是使用strings, numbers, arrays, and dictionaries的组合。如果值为string,则一定用字符串引号包裹起来,显示使用NSString
的属性和实例变量,则不用引号。 - 在使用FLEX时,你可能会取消异常断点。FLEX会产生一些异常,当接收了某种不能处理的输入(如
NSGetSizeAndAlignment()
), 为了防止程序崩溃,FLEX会捕获并将其抛出,但是这样会激活你的断点。