FLEX_Bell 2.4.0.1

FLEX_Bell 2.4.0.1

测试已测试
语言语言 Objective-CObjective C
许可证 BSD
发布最后发布2016 年 12 月

Bell 维护。




FLEX_Bell 2.4.0.1

  • Ryan Olson 和 Bell

FLEX

FLEX (Flipboard Explorer) 是一套用于 iOS 开发的内联调试和探索工具。当 FLEX 出现时,它会在您应用窗口上方显示一个工具栏。在这个工具栏中,您可以查看和修改运行中的应用程序中的几乎每一个状态。

View Hierarchy Exploration

Flipboard/FLEX 的区别

pod 添加了对 iOS6 的支持,但不能在 iOS8 以下使用。

赋予自己调试超级能力

  • 检查和修改层次结构中的视图。
  • 查看任何对象的属性和实例变量。
  • 动态修改许多属性和实例变量。
  • 动态调用实例和类方法。
  • 以时间、头部和完整响应等方式详细观察网络请求历史。
  • 添加自己的模拟器键盘快捷方式。
  • 查看系统日志消息(例如来自 NSLog)。
  • 通过堆扫描访问任何活动对象。
  • 查看应用程序的沙盒中的文件系统。
  • 在文件系统中浏览 SQLite/Realm 数据库。
  • 使用 control、shift 和 command 键在模拟器中触发 3D 触摸。
  • 探索应用程序中所有类和链接的系统框架(公共和私有)。
  • 快速访问有用的对象,如 [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
}

功能示例

修改视图

一旦选择了一个视图,您可以在工具栏下面的信息栏中点击以显示关于视图的更多详细信息。从那里,您可以修改属性和调用方法。

View Modification

网络历史记录

当启用时,网络调试允许您查看使用 NSURLConnection 或 NSURLSession 发出的所有请求。设置允许您调整哪些类型的响应体会被缓存以及响应缓存的最大大小限制。您可以选择在应用启动时自动启用网络调试。此设置在启动之间会持续。

Network History

堆上的所有对象

FLEX 会对所有活动的已分配内存块进行查询,并寻找类似对象的内容。您可以在这里看到所有内容。

Heap Exploration

模拟器键盘快捷键

默认键盘快捷键允许您激活FLEX工具、使用箭头键滚动以及使用Esc键关闭模态窗口。您还可以通过-[FLEXMananger registerSimulatorShortcutWithKey:modifiers:action:description]添加自定义的键盘快捷键。

Simulator Shortcuts

文件浏览器

在您的应用沙盒内查看文件系统。FLEX显示文件大小、图像预览,并美化打印 .json.plist 文件。如果要检查应用程序之外,您可以复制文本和图像文件到剪贴板。

File Browser

SQLite 浏览器

可以使用 FLEX 探索 SQLite 数据库文件(具有 .db.sqlite 扩展名),或 Realm 数据库文件。数据库浏览器允许您查看所有表,并且可以通过点击列标题对单独的表进行排序。

Database Browser

模拟器中的3D Touch

通过组合使用命令、控制和shift键,您可以在模拟器中模拟不同的3D Touch压力级别。每个键贡献最大可能力量的1/3。请注意,您需要稍微移动触摸以获取压力更新。

Simulator 3D Touch

系统库探索

探索所有公共和私有内容。要了解更多关于类的信息,您可以为其创建一个实例,并探索其默认状态。

System Libraries Browser

NSUserDefaults 编辑

FLEX 允许您编辑任何组合的字符串、数字、数组和字典的预定义值。输入被解析为 JSON。如果为预定义密钥设置了其他类型的对象(例如,NSDate),您可以查看它们但不能编辑它们。

NSUserDefaults Editor

从其他应用学习

代码注入留给读者作为练习。😇

Springboard Lock Screen Springboard Home Screen

安装

FLEX 可在 CocoaPods 上使用。只需将以下行添加到您的 podfile 中

pod 'FLEX', '~> 2.0', :configurations => ['Debug']

或者,您也可以手动将 Classes/ 中的文件添加到您的 Xcode 项目中。FLEX 需要 iOS 7 或更高版本。

从发布(应用商店)构建中排除 FLEX

FLEX可以轻松探索您应用的内部,所以您不应该把它暴露给用户。幸运的是,排除FLEX文件从发布构建中非常简单。策略取决于您在项目中如何集成FLEX,下面将进行描述。

在您代码中集成FLEX的地方,进行一个#if DEBUG检查,以确保工具仅可在您的Debug构建中访问,并避免在您的Release构建中出错。有关集成FLEX的更多帮助,请参阅示例项目。

手动添加到项目中的FLEX文件

在Xcode中,导航到您项目的“构建设置”选项卡。单击加号并选择添加用户定义设置

Add User-Defined Setting

将设置命名为EXCLUDED_SOURCE_FILE_NAMES。对于您的Release配置,将值设置为FLEX*。这将排除所有以FLEX为前缀的文件进行编译。请为您的Debug配置保留空白值。

EXCLUDED_SOURCE_FILE_NAMES

附加说明

  • 当设置类型为id的字段或NSUserDefaults中的值时,FLEX会尝试将输入字符串解析为JSON。这允许您使用字符串、数字、数组和字典的组合。如果您想设置一个字符串值,它必须用引号括起来。对于显式设置为NSStrings的ivars或属性,不需要引号。
  • 当使用FLEX时,您可能想要禁用异常断点。FLEX使用的某些函数在接收到无法处理的输入时会抛出异常(例如NSGetSizeAndAlignment())。FLEX会捕获这些异常以避免崩溃,但如果您的断点处于活动状态,则会导致断点被触中。

感谢与鸣谢

FLEX借鉴了先前开源工具的想法和灵感。以下资源对这个项目特别有帮助

  • DCIntrospect:iOS模拟器的视图层次结构调试。
  • PonyDebugger:使用Chrome开发者工具界面进行网络、核心数据及视图层次结构的调试。
  • Mike Ash:关于所有obj-c话题以及其他主题的文笔优美、信息丰富的博客文章。以下链接对该项目的帮助很大
  • RHObjectiveBeagle:一个用于在堆上扫描活动的对象的工具。需要注意的是,由于许可问题,未查阅RHObjectiveBeagle的源代码。
  • heap_find.cpp:枚举malloc块以在堆上查找对象的一个示例。
  • Gist from @samdmarshall:另一个枚举malloc块的示例。
  • Non-pointer isa:解释iOS上isa字段的变化,并提到了有用的objc_debug_isa_class_mask变量。
  • GZIP:一个用于iOS上使用libz进行数据压缩/解压缩的库。
  • FMDB:这是围绕SQLite的自定义Objective-C封装器。

贡献

请参见我们的贡献指南

待办事项

  • Swift运行时代码反查(Swift类、堆上的Swift对象等)
  • 在文件浏览器中改进文件类型检测和显示
  • 动态添加新的NSUserDefault键值对