78

iOS 6 内置了对远程调试的支持(1 分钟截屏)。它与新的 Safari Web Inspector 配合得很好,它似乎是 WebKit Inspector 的 1 年分支。它遗漏了一些功能,例如 JS 编辑和 WebSocket 帧检查。

Safari 的 Web 检查器确实使用 WebKit 远程调试协议。但是,Safari 不使用 TCP/HTTP 作为传输层,因此与 Chrome 不兼容。

苹果员工 Timothy Hatcher(又名 Xenon)说

  • Safari 将什么用于传输层?
  • 我可以从这个神秘的传输层到 HTTP 做一个代理,让它与 Chrome DevTools 一起工作吗?
4

2 回答 2

93

iOS WebKit 调试代理项目可以实现这一点。

截屏

首先,使用自制软件安装:

brew install ios-webkit-debug-proxy

运行模拟器(如果正在运行模拟器):

SIM_DIR=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
  "$SIM_DIR/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator" \
  -SimulateApplication \
  $SIM_DIR/SDKs/iPhoneSimulator6.1.sdk/Applications/MobileSafari.app/MobileSafari

运行代理:

ios_webkit_debug_proxy

检查错误

在设备上查看错误消息:

无法连接到lockdownd。退出。:没有这样的文件或目录。无法附加检查器 ios_webkit_debug_proxy

然后检查设备是否有这样的提示(iOS 7 示例:)

信任当前连接的计算机?

选择“信任”并尝试重新运行代理:

ios_webkit_debug_proxy

打开默认开发工具

然后打开http://localhost:9221

默认情况下,DevTools 是旧版本(大约 2012 年 3 月从 Chrome 18 开始)。

尝试现代开发工具

由于协议更改,现代 DevTools 前端的部分可能无法完全工作。你可以打开试试

chrome-devtools://devtools/bundled/inspector.html?ws=localhost:9222/devtools/pag‌​e/2

其中portpage值是您从中看到的值http://localhost:9221。同样,这可能确实是错误的。

ios-webkit-debug-proxy 项目页面上阅读更多文档。


更新:这也适用于iOS7更新:通过patrick添加新devtools前端说明。ws

于 2013-06-03T18:27:44.303 回答
3

根据https://github.com/andydavies/node-iosdriver

Safari 使用与 Chrome 相同的调试命令,但使用 RPC 上的二进制 plist 而不是 websocket 上的 JSON。

所以,是的,可以编写一个代理。

我通过查看 Safari 在连接到 MobileSafari 检查器时所做的 TCP 连接发现了这个线程webinspectord,发现它连接到一个名为的进程并在谷歌上搜索:

# pgrep -lf /Applications/Safari.app
33170 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_21144617
# lsof -p 33170 | grep TCP
Safari  33170 ryan   16u    IPv6 0x799d5f43b472a241       0t0      TCP localhost:54892->localhost:27753 (ESTABLISHED)
# lsof -i :27753
COMMAND     PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
launchd     371 ryan   42u  IPv6 0x799d5f43b472aa01      0t0  TCP localhost:27753 (LISTEN)
Safari    33170 ryan   16u  IPv6 0x799d5f43b472a241      0t0  TCP localhost:54892->localhost:27753 (ESTABLISHED)
webinspec 33182 ryan    6u  IPv6 0x799d5f43b472aa01      0t0  TCP localhost:27753 (LISTEN)
webinspec 33182 ryan    7u  IPv6 0x799d5f43b181a621      0t0  TCP localhost:27753->localhost:54892 (ESTABLISHED)
# ps p 33182
  PID   TT  STAT      TIME COMMAND
33182   ??  S      0:00.28 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk/usr/libexec/webinspectord
于 2013-04-24T03:56:28.943 回答