本文记录了如何在 iOS Simulator 和 Android 设备上调试 h5 页面,并在提供了 Alfred 脚本来便捷地管理 Simulator。
iOS 模拟器调试
1.启动Simulator.app
open -a /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
|
tips:xcode-select -p
会打印当前 xcode developer 目录:
/Applications/Xcode.app/Contents/Developer
|
上述命令可以写为
open -a `xcode-select -p`/Applications/Simulator.app
|
2.模拟器上打开要调试的页面
2.1 在 Safari 中打开
xcrun simctl openurl booted https://www.baidu.com
|
xcrun
会自动在 xcode developer 目录下查找simctl
命令,而simctl
是操作Simulator.app
的命令。
参数 booted
将操作目标指向当前启动的模拟器。
2.2 在 app 中打开
模拟器安装 app
xcrun simctl install booted youriPhone.app
|
在 app 上打开网页
xcrun simctl openurl booted APP_SCHEME:URL
|
APP_SCHEME
及后面的路径根据自己 app 注册的去更改。
3.打开 mac 上的Safari
Menu -> Develop -> Simulator
,选择打开的网址即可调试了。
Android 真机调试
- usb 链接 Android 设备到 mac
- 打开开发者选项模式,开启 usb debug
- Chrome 浏览器打开
chrome://inspect/#devices
- 如果该页面没有显示设备,全局翻墙或者重新拔插 usb 后刷新页面重试。
有的 app 使用的是手Q X5 内核,在 app 中打开http://debugx5.qq.com
-
在 “X5调试页面” 上,点击进入 “信息” Tab。
-
找到TBS settings栏目,勾选"是否打开TBS内核Inspector调试功能",然后点击确认,进程自动退出。
-
重新打开Web页面,使用Inspector页面调试功能。
(有时候,为了确认是 X5内核引起的兼容性问题,还可以打开http://debugtbs.qq.com
,选择使用系统自带内核。)
利用 Alfred 快捷打开 Simulator
利用 xcode command 提供的命令,可以在 Alfred 中快速打开 Simulator 并导航到待调试页面。
import json import re import subprocess import sys import urllib
from workflow import Workflow3
APP_NAME = 'Mogujie4iPhone.10.4.0.app' APP_SCHEME = 'mogujie://open?url='
def luanch(): cmd = 'open -a `xcode-select -p`/Applications/Simulator.app' return subprocess.check_call(cmd, shell=True)
def install(json_str=''): option = json.loads(json_str) if option['identifier'] == '': luanch() cmd = 'xcrun simctl install booted ~/.ios-simulator/' + APP_NAME return subprocess.check_call(cmd, shell=True) else: cmd = 'xcrun simctl install {identifier} ~/.ios-simulator/' + APP_NAME cmd = cmd.format(identifier=option['identifier']) return subprocess.check_call(cmd, shell=True)
def open(json_str=''): option = json.loads(json_str)
url = APP_SCHEME + urllib.pathname2url(option['url']) cmd = 'xcrun simctl openurl {identifier} {url}' cmd = cmd.format(identifier=option['identifier'], url=url)
return subprocess.check_call(cmd, shell=True)
def get_booted(): cmd = 'xcrun simctl list | grep Booted' return subprocess.check_output(cmd, shell=True).splitlines()
def main(wf): args = wf.args
try: booted_list = get_booted() items = [] for booted in booted_list: match = re.search(r'\((.*?)\)', booted) if match: identifier = match.group(1) items.append({ 'title': booted.strip(), 'subtitle': identifier, 'identifier': identifier, })
for item in items: if len(args) > 0: url = args[0] else: url = '' arg = json.dumps({'url': url, 'identifier': item['identifier']}) wf.add_item(title=item['title'], subtitle=item['subtitle'], arg=arg, valid=True) except subprocess.CalledProcessError: luanch()
wf.send_feedback()
if __name__ == '__main__': wf = Workflow3() sys.exit(wf.run(main))
|
注意更改代码中的 APP_NAME
和 APP_SCHEME
可以使用下面快捷命令:
is luanch
is install
is open http://xxxx.com
|
最终效果如图