-->

Neater

Be A Warrior, Not A Worrier

FLEX!iOS调试利器

FLEX (Flipboard Explorer)是一系列集成在APP内部的用于iOS调试的工具集,以工具栏的形式显示在应用中,通过它,可以查看并修改几乎所有的APP运行状态。

dfd

强大的调试能力

  • 查看、修改View的层次关系。
  • 查看对象的属性和实例变量。
  • 动态修改属性和实例变量。
  • 动态调用实例和类方法。
  • 动态访问堆上的对象。
  • 访问APP的沙盒。
  • 除jAPP的所有类外,还能访问已链接的系统框架,包括私有的。
  • 快速访问一些常用的对象,比如[UIApplication sharedApplication]、App Delegate、Root View Controller等。
  • 动态查看、修改NSUserDefaults存储的值。

和其它调试工具不同,FLEX完全运行在你的APP中,所以不需要连接到LLDB/Xcode或者远程调试的服务端,在模拟器和真机上都运行的很好。

用法

简单版本

1
[[FLEXManager sharedManager] showExplorer];

完整版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#if DEBUG
#import "FLEXManager.h"
#endif

...

- (void)handleSixFingerQuadrupleTap:(UITapGestureRecognizer *)tapRecognizer
{
#if DEBUG
    if (tapRecognizer.state == UIGestureRecognizerStateRecognized) {
        // This could also live in a handler for a keyboard shortcut, debug menu item, etc.
        [[FLEXManager sharedManager] showExplorer];
    }
#endif
}

功能示例

修改视图

点击views,从工具栏下面弹出界面,显示视图的详细信息,并能修改属性值和调用方法。

Views

查看对象

FLEX在malloc分配的内存块中查找相关的对象,如下:

Object in Heap

文件浏览

查看APP沙盒内的文件系统,包括文件大小、图片预览、以友好的方式显示json和plist文件。也能将文本和图片文件拷贝和剪贴板中,

File Browser

探索系统库资源

深挖框架内部的class,创建相应的实例,并访问其状态。

System Library Exploration

编辑NSUserDefaults

FLEX允许修改NSUserDefaults的strings, numbers, arrays, and dictionaries,及其它们的组合,输入格式为json;如果使用其它数据作为key,如NSDate,则是只读的。

NSUserDefaults

探索其它APP

代码注入留给大家去摸索了

InjectionInjection

避免将FLEX编译到正式版本

尽管FLEX很适合在开发调试的时候使用,但它不应该让最终用户看到。在Xcode –> Project –> Build Setting,点+选择Add User-Defined Setting

Excluding FLEX

命名为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会捕获并将其抛出,但是这样会激活你的断点。

译自 FLEX README.md