参考:https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w
(来自周智老师的公众号)
概述
Safari 有一个内置的前端调试器,
在iPhone通过局域网或者USB连接MacBook 并启用Safari 远程调试之后,前端调试器默认情况下对 MobileSafari 和 Xcode 编译运行的 App 有效。
系统内置的 App 或者 AppStore 下载的 App 是不被JS控制台所观测到的。
在越狱过的手机上,通过一个动态补丁可以开启 WebView 调试功能。
https://github.com/ChiChou/GlobalWebInspect
(由周智老师开发)
安装教程
下载地址:
https://github.com/ChiChou/GlobalWebInspect/releases
iPhone下载deb文件
发送给Filza,使用Filza进行安装
开启调试
参考:https://cloud.tencent.com/developer/article/1680133
打开Mac的 Safari 浏览器的“开发”菜单
运行 Safari 浏览器,然后依次选取“Safari 浏览器”>“偏好设置”,点按“高级”面板,然后勾选“在菜单栏中显示开发菜单”。
开启iPhone的Safari调试模式
打开 iPhone 依次进入 设置 > Safari浏览器 > 高级 > 网页检查器 > 启用。
此后在MacBook上就能看到含wkwebivew的应用中的网页情况:
原理
WebView 相关的组件会和 webinspectord 服务进程通信。
当应用程序的数字签名当中有如下 entitlement 之一时,便会开启远程调试:
- com.apple.security.get-task-allow
- com.apple.private.webinspector.allow-remote-inspection
- com.apple.private.webinspector.allow-carrier-remote-inspection
- com.apple.webinspector.allow
比如系统自带的 Safari 浏览器就有 com.apple.private.webinspector.allow-remote-inspection,而所有通过 Xcode 运行的真机调试应用都会有 com.apple.security.get-task-allow。
为了检测相应的 entitlement,webinspectord 会调用到 SecTaskCopyValueForEntitlement 函数。
通过hook这个函数并篡改,可以实现对任意app的远程调试。可以通过插件实现这个功能。
调试技巧
保存JS等网页文件
浏览文件时按下Command+S