前言
一般情况下,如果要调试 iOS app中调用webview的表现,需要在 iOS 系统设置中为 Safari 开启 Web 检查器,并用 macOS 上的 Safari 开发者工具调试。但是早已习惯了强大的 Chrome DevTools 的我们,在使用 Safari 的开发者工具时,还是会有很多不习惯。 因此 Google 利用 Apple 的 远程 Web 检查器服务 制作了可以将 Chrome DevTools 的操作转为 Apple 远程 Web 检查器服务调用的协议和工具:iOS WebKit Debug Proxy(又称 iwdp)。 下面就来简单介绍一下如何使用这个工具来让我们用 Chrome DevTools 调试 iOS Safari 页面。
安装
首先我们通过homebrew
来安装ios-webkit-debug-proxy,可以通过查看github页面的文档和issues来详细了解使用方法。
$ brew update
$ brew install libimobiledevice
$ brew install ios-webkit-debug-proxy
使用
可以使用真机,也可以使用模拟器,但是要注意的是必须先于代理启动。
通过命令行启动模拟器:
# Xcode changes these paths frequently, so doublecheck them
SDK_DIR="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs"
SIM_APP="/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app/Contents/MacOS/Simulator"
$SIM_APP -SimulateApplication $SDK_DIR/iPhoneSimulator8.4.sdk/Applications/MobileSafari.app/MobileSafari
如果是真机的话需要在设置 - Safari - 高级中,打开web检查器。
开启代理
用 -f
可以选择指定的 DevTools UI 介面,这个介面可以是任意的,这里我们用 Chrome 自带的开发者工具:
$ ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html
Listing devices on :9221
Connected :9222 to xxxx (xxxxxxxxxxxxxxxxx)
打开 http://localhost:9221/,然后点击对应的链接,之后按上头的英文指示复制链接到新tab打开就可以了:
Note: Your browser may block1,2 the above links with JavaScript console error:
Not allowed to load local resource: chrome-devtools://...
To open a link: right-click on the link (control-click on Mac), 'Copy Link Address', and paste it into address bar.
注意:因为 Chrome 不允许打开 chrome-devtools:// 协议的链接,所以不能直接点击链接
错误处理
问题 1:
$ ios_webkit_debug_proxy
Listing devices on :9221
Could not connect to lockdownd. Exiting.: Permission deniedConnected :9222 to SIMULATOR (SIMULATOR)
Invalid message _rpc_reportConnectedDriverList: <dict>
<key>WIRDriverDictionaryKey</key>
<dict>
</dict>
</dict>
解决方式:
sudo chmod +x /var/db/lockdown
问题 2:
$ ios_webkit_debug_proxy
Listing devices on :9221
Connected :9222 to SIMULATOR (SIMULATOR)
Invalid message _rpc_reportConnectedDriverList: <dict>
<key>WIRDriverDictionaryKey</key>
<dict>
</dict>
</dict>
Disconnected :9222 from SIMULATOR (SIMULATOR)
send failed: Socket is not connected
解决方式,重装依赖工具:
$ brew uninstall --force ignore-dependencies -libimobiledevice ios-webkit-debug-proxy
$ brew install libimobiledevice ios-webkit-debug-proxy
问题3:
$ ios_webkit_debug_proxy
Listing devices on :9221
Connected :9222 to SIMULATOR (SIMULATOR)
send failed: Socket is not connected
recv failed: Operation timed out
解决方式,指定 UI 介面:
$ ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html
问题4:
连接 iOS 10 设备可能会出以下报错,无法连接设备:
$ ios_webkit_debug_proxy -f chrome-devtools://devtools/bundled/inspector.html
Listing devices on :9221
Could not connect to lockdownd. Exiting.: Broken pipe
Unable to attach <id> inspector
更新最新的 libimobiledevice 即可:
$ brew upgrade libimobiledevice --HEAD