FLEX (翻页探查器) 是一组用于 iOS 开发的应用程序内调试和探索工具。当显示时,FLEX 在您应用程序窗口上方显示一个工具栏。通过此工具栏,您可以查看和修改运行中的应用程序中的几乎每一部分状态。
Socket Rocket 插件增加了使用 SocketRocket 库来跟踪发送或接收 WebSocket 消息的功能。
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 查看所有发出的请求。设置允许您调整哪些类型的响应体被缓存,以及响应缓存的最大尺寸限制。您可以选择在启动应用程序时自动启用网络调试。此设置在启动之间保持一致。
当启用网络历史记录时,来自 socket 的推送将在事务列表中列出。推送通知用铃铛标记。除了时间戳和大小,还显示了 Socket URL 以便于识别。此外,如果控制器中实现了 WebSocket,还会显示代理类名称以过滤来自不同类的通知。
FLEX 会为所有活动的内存分配块查询 malloc 并搜索外观类似于对象的那些。您可以从这里看到一切。
默认键盘快捷键允许您激活 FLEX 工具,使用箭头键进行滚动,并使用回车键关闭模态窗口。您还可以通过 -[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
。这允许您使用字符串、数字、数组和字典的组合。如果您想设置一个字符串值,它必须用引号括起来。对于明确设置为 NSString
类型的 ivars 或属性,不需要引号。NSGetSizeAndAlignment()
)。FLEX 捕获这些异常以避免崩溃,但如果断点处于活动状态,您的断点将被命中。FLEX 是基于之前的开源工具的理念和灵感构建的。以下资源特别有帮助
objc_debug_isa_class_mask
变量的提及。请参阅我们的贡献指南。