• Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    Objective-C
  • Created over 8 years ago
  • Updated about 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

一个可以脱离Xcode的debug,直接在app里,打印内存对象,动态改UI,动态跑oc代码的多功能控制台

VKDevTooL

App内调试工具 VKDevTool

允许在

  • 在脱离Xcode Debug的情况下
  • 黑盒真机情况下

进行App的调试工作,包括:

  • 调试内存对象
  • 打印内存数据
  • 修改UI
  • 查看NSLog
  • 查看所有网络请求记录
  • 查看App界面层级

方便在黑盒测试+内部体验的环境下,发现Bug后,直接在Bug现场调试内存,分析问题

这个工具在早期的VKDebugConsole的基础上完全推翻重做了,核心思路都不变,只是重新整理了工具的使用方式,工具的界面呈现,工具的模块划分,模块化可扩展支持

旧文档链接 -- VKDebugConsole App黑盒控制台

使用介绍

工程配置

  • VKDevTool文件夹拖入工程文件
  • VKDevToolLogHeader.h写入pch,以便开启NSLog的动态拦截记录,不导入ConsoleLog模块无法捕获NSLog
  • 可以修改VKDevToolDefine.h中的#ifdef DEBUG来进行自定义的编译控制,如果不修改,默认Debug模式下VKDevTool工具才有效

编写代码

[VKDevTool enableDebugMode];

一行代码即可开启DevTool的功能,该功能内部有编译控制,Release版本会自动失效,无需使用者在这行代码外围在套一层#ifdef DEBUG

如何使用

进行完工程配置与写入代码之后可以通过如下方式,在App内打开工程模式菜单

  • 模拟器下,使用键盘command+x快捷键唤起菜单
  • 真机运行下,使用摇一摇唤起菜单

main

主菜单模块包含4个模块

  • DebugScript
  • ConsoleLog
  • NetworkLog
  • ViewHierarchy3D

VKDevTool采取模块化设计,每个模块Module都可以独立分拆分离,同时支持用户定义扩展自己的模块,图中的额外2个模块为自定义模块

黑盒调试功能DebugScript

  • 在主菜单中选择DebugScript
  • 按提示点选任意一个界面元素
  • 进入代码控制台
  • 上面是代码输入框
  • 下面是输出框

main

以上是一个预览界面,上方输入的代码都是基于JSPatch的,所有JSPatch的语法规则这里都一模一样可以使用,戳这里看JSPatch如何使用 JSPatch语法

  • 真机摇一摇 or 模拟器Command+X 可以唤起DebugScript模块子菜单
  • 模拟器下如果输入过代码Command+X可能不好使,通过模拟器菜单Shake Gesture功能模拟摇一摇,依旧可以唤起

子菜单包含以下几个功能

  • GetTarget:自动往输入框中输入getTarget的脚本代码,执行以后print Target信息,便于后续直接调试target的任意内存数据和执行方法

  • Get TargetVC:自动往输入框中输入getTargetVC的脚本代码,执行以后print Target所在的当前vc的信息,便于后续直接调试targetVC的任意内存数据和执行方法

  • ChangeTarget:自动往输入框中输入切换所选target的代码,执行后,重新返回选择target界面

  • ClearInput:清空输入区域

  • ClearOutput:清空输出区域

  • Exit:退出DebugScript

除此之外,DebugScript为JS代码添加了一个功能print()函数,可以print任意OC对象,如果对象是View,还会有额外的frame等信息输出

我们通过一个GIF动画,大体看一下调试JS代码如何使用,此处的Gif是旧的Gif,新版本的颜色样式都已经调整,加了子菜单快捷方式,但是用法完全不变

git

日志拦截功能ConsoleLog

在PCH中加入了VKDevToolLogHeader.h后,本模块会拦截所有NSLog打印日志,以及NSError生成记录,在这个界面进行列表展示

  • NSLog记录采用宏覆盖的方式,拦截接管了所有NSLog请求,以白色展现在界面内。
  • NSError记录采用Runtime Swizzle的方式,拦截了NSError的init,以红色展现在界面内

log1

真机摇一摇 or 模拟器Command+X 可以唤起ConsoleLog模块子菜单

  • NSError Hook:开启和关闭NSError拦截
  • Copy to Pasteboard:把所有日志信息拷贝到剪切板
  • Search Keyword:在众多日志中搜索关键字,关键字以蓝色展示
  • Exit:退出

网络拦截功能NetworkLog

VKDevTool会采用NSURLProtocol的方案,拦截hook所有的http请求,一一记录起来,以列表的形式,展现在NetworkLog模块内

每个cell,都可以点击查看每一条网络请求的真实返回数据,并且支持复制到剪切板

真机摇一摇 or 模拟器Command+X 可以唤起NetworkLog模块子菜单

  • Network Hook:可以选择开启和关闭http拦截
  • Change Filter:可以通过过滤器,过滤含有固定字符串的网络请求,方便查找搜索
  • Exit:退出

net1

如果NetworkHook无效,查看是否是因为AFN sessionManager,在创建session的时候,需要注册NSURLProtocol导致的

NSURLSessionConfiguration *configuration= [NSURLSessionConfiguration defaultSessionConfiguration];
NSArray *protocolArray = @[[VKURLProtocol class]];
configuration.protocolClasses = protocolArray

我看看后续这块如何改成无侵入版本吧。 todolist

页面层级ViewHierarchy3D

VKDevTool采用YY大神开源的YYViewHierarchy3D,实现了这个页面层级模块

  • 真机摇一摇 or 模拟器Command+X 可以唤起ViewHierarchy3D模块子菜单
  • 模拟器下Command+X可能不好使,通过模拟器菜单Shake Gesture功能模拟摇一摇,依旧可以唤起

view1

其他扩展代码

[VKDevTool changeNetworktModuleFilter:@“xxxxx”];

这个接口控制网络请求HookLog的过滤器,只拦截含有xxxx字符串的http网络请求,同时在DevTool内还可以通过菜单,修改网络拦截过滤器

如果全都拦截,可以省略

[VKDevTool registKeyName:@"custom module name" withExtensionFunction:^{
    //todo your code
}];

VKDevTool采取模块化设计,每个模块Module都可以独立分拆分离,同时支持用户定义扩展自己的模块

这个接口用于给VKDevTool扩展主菜单模块,可以省略不写,只使用自带的4个模块。

More Repositories

1

VKMsgSend

用起来很像performselector,但是完全没有参数个数限制,以及参数id类型限制,(任意类型 struct int bool),功能上很像运行时Objc_msgSend,但是在64位上无需强制类型转换,可以直接输入参数
Objective-C
210
star
2

AsyncDisplayKitDocTranslation

完全没有翻译文档的经验,碰到一些用词不合适的时候,还是推荐对比这原文进行观看,如果愿意,大家可以帮忙一起修改
113
star
3

VKURLAction

基于target-selector 而非基于block注册式的 openURL url参数解析+运行时行为处理,各自行为还需要自定义,定义好行为,无需统一注册,即可生效
Objective-C
92
star
4

VKCssProtocol

一个很像css,在iOS里用原生的方式,将样式和界面隔离解耦,多种样式属性自由组合,以类似协议的形式将样式生效在界面UI上的东西
Objective-C
91
star
5

VKKeychainIDFV

iOS下的UUID方案,没啥技术含量,idfv+keychain保证不变
Objective-C
72
star
6

VKSafariDomainBridge

一个在iOS9下才可以支持的,app跨域访问外部safari数据的工具,主要用于wap网页上产生了数据,在app下载后读取数据,延续wap的行为
Objective-C
46
star
7

JSPatchPlaygroundTool

不需要重新编译重新运行APP,直接在模拟器里就可以随时修改JS代码,随时看效果,实时报错提醒,实时Reload刷新
Assembly
29
star
8

VKSniffer

网络请求嗅探日志
Objective-C
18
star
9

iOSCodeReviewTipsCollection

www.reviewcode.cn平台案例整理汇总
12
star
10

VKFMDBHelper

针对FMDB,写的一套ORM和SQL辅助工具,1)自动的orm,将fmdb返回的字典转换成对象,2)自动的sql生成与处理,支持链式语法无需学习sql,生成sql语句
Objective-C
12
star
11

VKMarkHelper

标记位工具:对于第一次开启某模块,每自然日执行一次某功能,这两种标记位功能,进行动态的添加,动态的使用,并且可以享受xcode代码提示
Objective-C
10
star
12

antlrDemo

JavaScript
9
star
13

Awhisper.github.io

HTML
8
star
14

markdown2json

JavaScript
4
star
15

VKKeyCommands

一个简单的快捷键事件捕捉+摇一摇事件捕捉器
Objective-C
2
star
16

JSNativeInvocation-WebViewPlugin

施工中
Objective-C
1
star
17

VKEditor

开一个编辑器的坑
1
star
18

MyWxApp

JavaScript
1
star
19

ClipboardJSDemo

JavaScript
1
star