Ionic 2 iPad应用ionic cordova run ios -c无法查看控制台日志问题
ionic cordova run命令查看的问题 我完全能理解你现在的困扰——每次改完代码还要手动执行cordova platform prepare再从Xcode重新运行,效率实在太低了。结合你给出的环境信息,我来分析下可能的原因和对应的解决方案:
可能的问题根源
- 工具版本兼容性问题:你的Ionic CLI(3.19.0)、Cordova iOS平台(4.5.2)和
ios-deploy(1.9.2)版本相对较旧,和Xcode 9.2可能存在适配bug,导致日志捕获失败。 - 日志路径配置或权限问题:即使手动创建了日志文件并设置777权限,CLI可能因为路径解析错误或者终端权限不足,无法正常写入日志。
- CLI日志捕获逻辑故障:Ionic/Cordova CLI的日志捕获模块可能因为某些配置错误,无法正确抓取模拟器/设备的输出。
分步解决方案
1. 更新核心工具,修复兼容性问题
旧版本的工具往往是这类问题的元凶,先把关键组件更新到兼容Xcode 9.2的版本:
- 更新
ios-deploy:这个工具负责和iOS设备/模拟器通信,旧版本可能无法正确捕获日志:
(1.10.x版本对Xcode 9.x的兼容性更好,比你当前的1.9.2更稳定)npm install -g ios-deploy@1.10.0 - 更新Cordova iOS平台:移除旧平台再重新安装兼容版本:
(4.5.5是4.5.x分支的稳定版,修复了不少Xcode 9的适配问题)ionic cordova platform remove ios ionic cordova platform add ios@4.5.5 - 升级Ionic CLI到同大版本的最新版:
(3.20.1是Ionic 3.x的最后稳定版,修复了CLI日志捕获的一些bug)npm install -g ionic@3.20.1
2. 调整命令参数,强制日志输出
尝试直接用Cordova原生命令测试日志捕获,排除Ionic CLI的干扰:
cordova run ios --target="iPad-Air" --consolelogs --verbose
如果这个命令能输出日志,说明问题出在Ionic CLI的封装层,此时可以改用ionic cordova run的完整参数:
ionic cordova run ios --target="iPad-Air" -c -l --verbose
(-l开启livereload,--verbose会输出更多调试信息,帮你定位日志捕获失败的具体原因)
3. 手动指定日志输出路径
如果默认路径无法生成日志文件,手动指定一个明确的路径试试:
ionic cordova run ios --target="iPad-Air" -c --log-path ./ios-debug.log
运行后查看当前目录下的ios-debug.log文件,看看是否有日志内容。如果有,说明之前的默认路径配置有问题,后续可以一直用这个参数指定日志位置。
4. 用系统工具直接查看日志(兜底方案)
如果上述方法都无效,你可以直接用系统工具查看日志,同时不影响livereload:
- 启动livereload:
ionic cordova run ios --target="iPad-Air" -l - 打开终端,运行以下命令过滤出你的应用的实时日志:
把xcrun simctl spawn booted log stream --level debug --predicate 'processImagePath contains "YourAppName"'YourAppName换成你的应用名称,这样就能看到包括Native插件在内的所有应用日志。
5. 检查Xcode命令行工具配置
确保Xcode的命令行工具已经正确配置:
xcrun simctl list devices
如果能正常列出模拟器,说明配置没问题;如果报错,运行以下命令指定Xcode路径:
xcode-select -s /Applications/Xcode.app/Contents/Developer
同时打开Xcode,确认你已经登录了开发者账号,模拟器/真机的调试权限已开启(真机需要在设置->通用->设备管理中信任你的开发者证书)。
关于Livereload的补充
当日志问题解决后,只要你的电脑和iPad设备在同一局域网,ionic cordova run ios --target="iPad-Air" -lc命令应该就能正常开启livereload并同步日志输出了——Ionic默认已经配置了允许livereload的域名,不需要额外修改。
内容的提问来源于stack exchange,提问作者Bluebox

