iOS 开发的应用内调试和探索工具-FLEX

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

给自己调试超能力

  • 检查和修改层次结构中的视图。
  • 查看任何对象的属性和变量。
  • 动态修改许多属性和变量。
  • 动态调用实例和类方法。
  • 通过时间、标头和完整响应观察详细的网络请求历史记录。
  • 添加您自己的模拟器键盘快捷键。
  • 查看系统日志消息(例如来自NSLog)。
  • 通过扫描堆访问任何活动对象。
  • 查看应用程序沙箱中的文件系统。
  • 浏览文件系统中的 SQLite/Realm 数据库。
  • 使用 control、shift 和 command 键在模拟器中触发 3D 触摸。
  • 探索您的应用程序和链接系统框架(公共和私有)中的所有类。
  • 快速访问有用的对象,例如[UIApplication sharedApplication]应用程序委托、关键窗口上的根视图控制器等。
  • 动态查看和修改NSUserDefaults值。

与许多其他调试工具不同,FLEX 完全在您的应用程序内部运行,因此您无需连接到 LLDB/Xcode 或其他远程调试服务器。它在模拟器和物理设备上运行良好。用法

在 iOS 模拟器中,您可以使用键盘快捷键来激活 FLEX。f将切换 FLEX 工具栏。敲击?快捷键的完整列表。您还可以以编程方式显示 FLEX:

// Objective-C
[[FLEXManager sharedManager] showExplorer];

// Swift
FLEXManager.shared.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 查询 malloc 以获取所有实时分配的内存块并搜索看起来像对象的内存块。你可以从这里看到一切。

堆/活动对象资源管理器


探索地址

如果您获得任意地址,您可以尝试探索该地址处的对象,如果 FLEX 可以验证该地址指向有效对象,则会打开它。如果 FLEX 不确定,它会警告您并拒绝取消对指针的引用。但是,如果您更了解,则可以通过选择“不安全探索”来选择探索它

地址浏览器


模拟器键盘快捷键

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

模拟器键盘快捷键


安装

CocoaPods

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

Carthage

  1. 不要添加FLEX.framework到目标的嵌入式二进制文件中,否则它会包含在所有构建中(因此也包含在发布版本中)。

  2. 相反,添加$(PROJECT_DIR)/Carthage/Build/iOS到您的目标框架搜索路径(如果您已经在 Carthage 中包含了其他框架,则此设置可能已经存在)。这使得从源文件导入 FLEX 框架成为可能。如果为所有配置添加此设置也无害,但至少应为调试添加此设置。

  3. 向您的目标添加一个运行脚本阶段Link Binary with Libraries例如,在现有阶段之后插入它),并且它只会嵌入FLEX.framework到调试版本中:

if [ "$CONFIGURATION" == "Debug" ]; then
/usr/local/bin/carthage copy-frameworks
fi
最后,添加
$(SRCROOT)/Carthage/Build/iOS/FLEX.framework为这个脚本阶段的输入文件。

手动添加到项目的 FLEX 文件

在 Xcode 中,导航到Build Settings > Build Options > Excluded Source File Names对于您的Release配置,将其设置为FLEX*这样以排除具有FLEX前缀的所有文件


常见问题及demo下载:https://github.com/FLEXTool/FLEX







1 个评论

已获取到调试超能力

要回复文章请先登录注册