Flutter版本升级至3.29.2后出现NSInternalInconsistencyException致命异常求助
Flutter版本升级至3.29.2后出现NSInternalInconsistencyException致命异常求助
问题描述
我将Flutter版本从3.24.4升级到3.29.2之后,Crashlytics里开始出现以下致命异常:
Fatal Exception: NSInternalInconsistencyException
Sending a message before the FlutterEngine has been run.
这个异常看起来会随机出现在App内的不同页面或操作中,我完全找不到规律。而且在升级版本之前,从来没有出现过这个问题。有没有人能帮忙分析下原因或者给出解决办法?
我的解决建议
兄弟,我之前升级Flutter版本时也碰到过类似的iOS端引擎异常,给你几个实际可行的排查方向:
- 优先检查FlutterEngine的初始化时机:你得确保所有跨端通信(比如MethodChannel调用、原生给Flutter发消息)都是在FlutterEngine执行完
run()之后才触发的。如果是iOS原生手动初始化引擎的话,一定要等引擎就绪再做后续操作,别着急在启动初期就调用跨端方法。 - 排查第三方插件兼容性:很多时候这种异常都是插件没跟上Flutter版本更新导致的。你可以先把那些和原生交互多的插件暂时禁用掉,一个个试,看看禁用哪个之后异常消失,找到问题插件后要么等作者更新,要么自己调整下插件里的调用时机。
- 调整App启动流程:如果你的App启动时就有触发Flutter页面跳转或者跨端调用的逻辑,试着把这些操作延迟一下,比如等App完全启动、FlutterEngine初始化完成后再执行,别赶在启动初期忙乱的时候触发。
- 临时回退版本验证:要是实在找不到问题,先回退到3.28.x版本试试,看看异常是不是就没了,这样能确认是不是3.29版本的兼容性问题,同时可以去Flutter官方的issue列表里搜搜,说不定已经有其他开发者报过这个问题,官方可能正在修复。
另外,你可以在iOS端加些日志,记录下FlutterEngine的状态变化和每次发送消息的时机,这样能精准定位到是哪个操作触发的异常,排查起来更高效。
备注:内容来源于stack exchange,提问作者Chris




