FLEX (Flipboard Explorer) 是一套用于 iOS 开发的内联调试和探索工具。当 FLEX 出现时,它会在您应用窗口上方显示一个工具栏。在这个工具栏中,您可以查看和修改运行中的应用程序中的几乎每一个状态。
pod
添加了对 iOS6 的支持,但不能在 iOS8 以下使用。
NSLog
)。[UIApplication sharedApplication]
、应用程序代理、键窗口上的根视图控制器等。NSUserDefaults
值。与许多其他调试工具不同,FLEX 完全在您的应用程序中运行,因此不需要连接到 LLDB/Xcode 或不同的远程调试服务器。它在模拟器和物理设备上工作得很好。
在 iOS 模拟器中,您可以使用键盘快捷键激活 FLEX。 按 f
会切换 FLEX 工具栏。按 ?
键查看完整快捷键列表。您也可以通过代码显示 FLEX
简版
[[FLEXManager sharedManager] showExplorer];
完整版
#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
}
一旦选择了一个视图,您可以在工具栏下面的信息栏中点击以显示关于视图的更多详细信息。从那里,您可以修改属性和调用方法。
当启用时,网络调试允许您查看使用 NSURLConnection 或 NSURLSession 发出的所有请求。设置允许您调整哪些类型的响应体会被缓存以及响应缓存的最大大小限制。您可以选择在应用启动时自动启用网络调试。此设置在启动之间会持续。
FLEX 会对所有活动的已分配内存块进行查询,并寻找类似对象的内容。您可以在这里看到所有内容。
默认键盘快捷键允许您激活FLEX工具、使用箭头键滚动以及使用Esc键关闭模态窗口。您还可以通过-[FLEXMananger registerSimulatorShortcutWithKey:modifiers:action:description]
添加自定义的键盘快捷键。
在您的应用沙盒内查看文件系统。FLEX显示文件大小、图像预览,并美化打印 .json
和 .plist
文件。如果要检查应用程序之外,您可以复制文本和图像文件到剪贴板。
可以使用 FLEX 探索 SQLite 数据库文件(具有 .db
或 .sqlite
扩展名),或 Realm 数据库文件。数据库浏览器允许您查看所有表,并且可以通过点击列标题对单独的表进行排序。
通过组合使用命令、控制和shift键,您可以在模拟器中模拟不同的3D Touch压力级别。每个键贡献最大可能力量的1/3。请注意,您需要稍微移动触摸以获取压力更新。
探索所有公共和私有内容。要了解更多关于类的信息,您可以为其创建一个实例,并探索其默认状态。
FLEX 允许您编辑任何组合的字符串、数字、数组和字典的预定义值。输入被解析为 JSON
。如果为预定义密钥设置了其他类型的对象(例如,NSDate
),您可以查看它们但不能编辑它们。
代码注入留给读者作为练习。
FLEX 可在 CocoaPods 上使用。只需将以下行添加到您的 podfile 中
pod 'FLEX', '~> 2.0', :configurations => ['Debug']
或者,您也可以手动将 Classes/
中的文件添加到您的 Xcode 项目中。FLEX 需要 iOS 7 或更高版本。
FLEX可以轻松探索您应用的内部,所以您不应该把它暴露给用户。幸运的是,排除FLEX文件从发布构建中非常简单。策略取决于您在项目中如何集成FLEX,下面将进行描述。
在您代码中集成FLEX的地方,进行一个#if DEBUG
检查,以确保工具仅可在您的Debug
构建中访问,并避免在您的Release
构建中出错。有关集成FLEX的更多帮助,请参阅示例项目。
在Xcode中,导航到您项目的“构建设置”选项卡。单击加号并选择添加用户定义设置
。
将设置命名为EXCLUDED_SOURCE_FILE_NAMES
。对于您的Release
配置,将值设置为FLEX*
。这将排除所有以FLEX为前缀的文件进行编译。请为您的Debug
配置保留空白值。
id
的字段或NSUserDefaults
中的值时,FLEX会尝试将输入字符串解析为JSON
。这允许您使用字符串、数字、数组和字典的组合。如果您想设置一个字符串值,它必须用引号括起来。对于显式设置为NSStrings
的ivars或属性,不需要引号。NSGetSizeAndAlignment()
)。FLEX会捕获这些异常以避免崩溃,但如果您的断点处于活动状态,则会导致断点被触中。FLEX借鉴了先前开源工具的想法和灵感。以下资源对这个项目特别有帮助
objc_debug_isa_class_mask
变量。请参见我们的贡献指南。