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
不要添加
FLEX.framework
到目标的嵌入式二进制文件中,否则它会包含在所有构建中(因此也包含在发布版本中)。相反,添加
$(PROJECT_DIR)/Carthage/Build/iOS
到您的目标框架搜索路径(如果您已经在 Carthage 中包含了其他框架,则此设置可能已经存在)。这使得从源文件导入 FLEX 框架成为可能。如果为所有配置添加此设置也无害,但至少应为调试添加此设置。向您的目标添加一个运行脚本阶段(
Link Binary with Libraries
例如,在现有阶段之后插入它),并且它只会嵌入FLEX.framework
到调试版本中:
if [ "$CONFIGURATION" == "Debug" ]; then
/usr/local/bin/carthage copy-frameworks
fi
最后,添加
$(SRCROOT)/Carthage/Build/iOS/FLEX.framework
手动添加到项目的 FLEX 文件
Build Settings > Build Options > Excluded Source File Names
. 对于您的Release
配置,将其设置为FLEX*
这样以排除具有FLEX
前缀的所有文件