Flutter iOS应用处于终止状态时的最优调试方法是什么
Flutter iOS 应用终止状态启动调试最优方案
核心调试方案
针对终止状态(尤其是VoIP推送唤醒场景)的调试,最高效的方案是使用Xcode的等待启动附加调试功能,无需依赖release模式,debug/profile模式都可正常调试,具体操作步骤如下:
- 打开项目ios目录下的
Runner.xcworkspace,进入Xcode界面 - 点击顶部工具栏Runner旁边的下拉箭头,选择Edit Scheme
- 选中左侧Run栏目,切换到Info标签页,将Launch选项改为Wait for the executable to be launched
- 点击Run按钮,此时Xcode不会主动启动应用,会处于等待唤醒状态
- 触发VoIP推送唤醒终止状态的应用,Xcode调试器会自动附加到进程,断点、日志输出都可正常使用,不会断开连接
常见问题解决方案
1. release模式下logger包无日志输出
logger默认配置下会过滤release模式的日志,修改配置即可正常输出:
- 自定义LogFilter,重写shouldLog方法,不管编译模式都返回true,初始化Logger时传入自定义过滤器
- 同时可将日志输出重定向到iOS系统日志,在Mac上打开Console.app,选择连接的iOS设备,可直接查看所有模式下的应用日志,不需要额外部署远端存储
- 也可直接在终端运行
flutter logs命令,连接设备后可实时抓取所有模式下的应用输出日志
2. debug/profile模式应用终止后断连
上文提到的Xcode等待启动配置即可完全解决该问题:
- 该模式下Xcode会监听应用的启动事件,不管应用是被用户手动点击启动,还是被VoIP推送等系统事件唤醒,都会自动附加调试器,连接不会丢失
- 支持断点调试、内存查看、实时日志输出等所有调试功能,不需要切换到release模式测试
3. 写入Firestore日志效率低
替换为本地持久化日志方案即可大幅提升迭代效率:
- 给logger添加文件输出适配器,将日志直接写入应用沙盒的本地文件,按时间分片存储
- 应用内增加一个调试页面,支持查看本地日志、一键导出日志到系统文件应用或者AirDrop发送到电脑,全程不需要网络请求
- 测试阶段直接用Console.app或者
flutter logs看实时日志,不需要做持久化存储,效率更高
内容的提问来源于stack exchange,提问作者Dokook Choe
相关产品推荐
相关产品推荐

