iOS 12设备Flutter混合应用MLKITx相关崩溃问题求助
iOS 12设备上Flutter/原生混合应用启动50秒后MLKITx模块崩溃问题解决方案
问题背景
运营的Flutter/原生iOS混合应用自十月初发版后,iOS 12设备出现大量启动后约50秒的崩溃,调用栈指向未主动集成的MLKITx模块,升级Flutter版本(3.10.0→3.13.9)后问题依旧,应用依赖Firebase。
崩溃调用栈:
Crashed: PHTFlatFilePhenotype 0 <App name> 0x104d6ac MLKITx_BuildData::BaselineChangelistAsInt() + 71964 1 <App name> 0x1012078 __82-[MLKITx_PHTFlatFilePhenotype registerPackage:version:logSources:params:callback:]_block_invoke.192 + 4329873528 2 libdispatch.dylib 0x5fa38 _dispatch_call_block_and_release + 24 3 libdispatch.dylib 0x607d4 _dispatch_client_callout + 16 4 libdispatch.dylib 0x9324 _dispatch_lane_serial_drain$VARIANT$mp + 592 5 libdispatch.dylib 0x9e40 _dispatch_lane_invoke$VARIANT$mp + 428 6 libdispatch.dylib 0x124ac _dispatch_workloop_worker_thread + 596 7 libsystem_pthread.dylib 0xc114 _pthread_wqthread + 304 8 libsystem_pthread.dylib 0xecd4 start_wqthread + 4
已确认的问题根源
不少开发者遇到过相同问题,核心原因是Firebase间接引入的MLKit组件与iOS 12系统不兼容:
- Firebase核心组件(如Analytics、Remote Config)会自动依赖MLKit的
PHTFlatFilePhenotype模块,即使未主动集成MLKit SDK; - MLKit新版本中
MLKITx_BuildData::BaselineChangelistAsInt()方法在iOS 12上存在内存访问或类型转换错误,启动后50秒左右的后台dispatch线程执行该逻辑时触发崩溃。
可行的解决方案
1. 锁定Firebase依赖版本
将Firebase相关组件锁定到兼容iOS 12的版本,例如:
- 在Podfile中指定Firebase/Core版本为
10.17.0及以下:pod 'Firebase/Core', '~> 10.17.0' - 执行
pod update Firebase/Core后,检查Podfile.lock确认MLKit相关子库版本低于6.0.0(MLKit 6.0+放弃了iOS 12支持)。
2. 禁用MLKit后台统计逻辑
通过配置关闭不必要的后台数据收集:
- 在Info.plist中添加
FirebaseAppDelegateProxyEnabled并设置为NO,减少Firebase自动初始化的后台模块; - 针对iOS 12设备调整Firebase Analytics收集策略:
if (@available(iOS 13.0, *)) { // 正常配置Analytics } else { [FIRAnalytics setAnalyticsCollectionEnabled:NO]; }
3. 排除MLKit冗余依赖
如果不需要MLKit相关功能,可在Podfile中强制排除MLKit组件:
pod 'Firebase/Core', :exclude => ['MLKitCommon']
注意:此操作需测试确认不影响Firebase核心功能正常使用。
验证步骤
- 查看Podfile.lock中的
MLKitCommon、MLKitCore等依赖版本,确认是否为不兼容iOS 12的高版本; - 在iOS 12测试设备上安装修改后的包,观察启动后50秒是否仍出现崩溃;
- 检查崩溃日志,确认调用栈中是否已无MLKITx相关条目。
内容的提问来源于stack exchange,提问作者andygeers
相关产品推荐
相关产品推荐

