Flutter应用TestFlight启动频繁崩溃求助(附Firebase崩溃堆栈)
Flutter TestFlight启动频繁崩溃排查方案
问题背景
Flutter应用在Android设备、有线调试的iOS设备上运行正常,但用Xcode 15.3构建并上传至TestFlight的版本,启动阶段频繁崩溃(10次启动约8次触发),且调试模式下无法复现。以下是Firebase Crashlytics捕获的崩溃堆栈:
Crashed: com.apple.main-thread 0 nanopb 0x6904 pb_check_proto3_default_value + 342 1 nanopb 0x6074 pb_encode + 172 2 FirebaseSessions 0x413c FIRSESEncodeProto + 64 3 FirebaseSessions 0xef10 $s16FirebaseSessions17SessionStartEventC14transportBytes10Foundation4DataVyF + 232 4 FirebaseSessions 0xf198 $s16FirebaseSessions17SessionStartEventC14transportBytes10Foundation4DataVyFTo + 28 5 GoogleDataTransport 0xdfd0 -[GDTCOREvent setDataObject:] + 68 6 GoogleDataTransport 0xde60 -[GDTCOREvent copy] + 72 7 GoogleDataTransport 0x1b070 -[GDTCORTransport sendEvent:onComplete:] + 44 8 FirebaseSessions 0xa74c $sSo15GDTCORTransportC16FirebaseSessions27GoogleDataTransportProtocolA2cDP11logGDTEvent5event10completionySo11GDTCOREventC_ys6ResultOyyts5Error_pGctFTW + 176 9 FirebaseSessions 0x5efc $s16FirebaseSessions14EventGDTLoggerC03logC05event10completionyAA012SessionStartC0C_ys6ResultOyyts5Error_pGctF + 224 10 FirebaseSessions 0x5f80 $s16FirebaseSessions14EventGDTLoggerCAA0cD8ProtocolA2aDP03logC05event10completionyAA012SessionStartC0C_ys6ResultOyyts5Error_pGctFTW + 20 11 FirebaseSessions 0xd0c8 $s16FirebaseSessions18SessionCoordinatorC014attemptLoggingC5Start5event8callbackyAA0cG5EventC_ys6ResultOyytAA0aB5ErrorOGctFyAMcfU_ + 176 12 FirebaseSessions 0xd2c8 $s16FirebaseSessions18SessionCoordinatorC10fillInFIID33_A99E81F187A7BA47A5374F4DC053A423LL5event8callbackyAA0C10StartEventC_ys6ResultOyytAA0aB5ErrorOGctFyAKySSs0V0_pGcfU_ + 180 13 FirebaseSessions 0xaafc $sSo16FIRInstallationsC16FirebaseSessionsE14installationID10completionyys6ResultOySSs5Error_pGc_tFySSSg_sAH_pSgtcfU_TA + 48 14 FirebaseSessions 0xa9c0 $sSSSgs5Error_pSgIeggg_So8NSStringCSgSo7NSErrorCSgIeyByy_TR + 96 15 FirebaseInstallations 0x49c0 __49-[FIRInstallations installationIDWithCompletion:]_block_invoke + 56 16 FBLPromises 0x5138 __56-[FBLPromise chainOnQueue:chainedFulfill:chainedReject:]_block_invoke.18 + 52 17 libdispatch.dylib 0x213c _dispatch_call_block_and_release + 32 18 libdispatch.dylib 0x3dd4 _dispatch_client_callout + 20 19 libdispatch.dylib 0x125ec _dispatch_main_queue_drain + 1060 20 libdispatch.dylib 0x121b8 _dispatch_main_queue_callback_4CF + 44 21 CoreFoundation 0x3751c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 16 22 CoreFoundation 0x34218 __CFRunLoopRun + 1996 23 CoreFoundation 0x33968 CFRunLoopRunSpecific + 608 24 GraphicsServices 0x34e0 GSEventRunModal + 164 25 UIKitCore 0x22aedc -[UIApplication _run] + 888 26 UIKitCore 0x22a518 UIApplicationMain + 340 27 Runner 0x8f0c main + 10 (AppDelegate.swift:10) 28 ??? 0x1b3802d84 (Missing)
崩溃原因分析
从堆栈可以看出,崩溃发生在nanopb库的pb_check_proto3_default_value方法,是FirebaseSessions在编码SessionStartEvent事件时触发的异常。流程上是FirebaseInstallations获取设备ID后,FirebaseSessions准备将启动事件编码并通过GoogleDataTransport发送,此时nanopb对proto3默认值的校验逻辑出现问题,这大概率是Xcode 15.3的编译优化与旧版本Firebase依赖库的兼容性问题。
解决方案
- 升级Firebase相关依赖:将pubspec.yaml中
firebase_core、firebase_crashlytics等Firebase相关包升级到最新稳定版,执行flutter pub upgrade后,进入iOS目录执行pod update,确保所有Firebase子库(包括FirebaseSessions、nanopb、GoogleDataTransport)都更新到兼容Xcode 15.3的版本。 - 调整Xcode编译设置:
- 打开Xcode项目,在Build Settings中找到
Enable Bitcode,设置为No; - 找到
Optimization Level(Release模式下),暂时改为None [-O0],重新构建上传TestFlight测试,若崩溃消失则是编译优化导致的问题,后续可尝试保留优化并升级依赖解决。
- 打开Xcode项目,在Build Settings中找到
- 临时禁用FirebaseSessions自动收集:如果升级依赖后仍未解决,可在App初始化时临时关闭Sessions的自动事件收集,代码示例:
import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_sessions/firebase_sessions.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); // 临时禁用Session自动收集 await FirebaseSessions.instance.setSessionCollectionEnabled(false); runApp(const MyApp()); } - 清理构建缓存:执行
flutter clean,删除iOS目录下的Pods文件夹和Podfile.lock,重新执行pod install,再用Xcode 15.3重新归档上传TestFlight,避免旧缓存导致的构建异常。 - 校验Firebase配置文件:确认
GoogleService-Info.plist是从Firebase控制台下载的最新版本,配置项无缺失或错误,尤其是与FIRInstallations相关的配置。
内容的提问来源于stack exchange,提问作者imASR
相关产品推荐
相关产品推荐

