背景
众所周知,在iOS平台上,要想调试App中的WKWebView或JavaScriptCore中运行的javascript代码,一般都要求用Xcode将App工程以Debug配置布署到手机上,再使用PC侧Safari的Developer菜单中的对应选项进行调试。
问题
公司的内测包和线上包一般都是使用Disrubution或企业证书打包,经常出现问题需要现场排查的也是这两类包。这种包Safari调试功能不能支持。
方案
App中的Debugger模块在运行时得到WKWebView或JavaScriptCore对象地址,通过使用WebKit内部C++ API访问其调试消息相关接口- 消息接口的输入和输出支持的是
WebKit调试协议数据
- 消息接口的输入和输出支持的是
App内起一个WebSocket服务器,负责将外部请求转发给Debugger模块,转发时还需要将外部传进来的Chrome调试协议数据转化为WebKit调试协议数据Chrome到WebKit的协议转换参考 node.js版本的开源实现
PC用Chrome打开以下地址(填入正确的WebSocket服务器的IP地址和端口号),连接步骤2中的服务器,即可实现真机调试。chrome-devtools://devtools/bundled/inspector.html?ws=[IP地址]:[端口号]