You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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编译设置:
    1. 打开Xcode项目,在Build Settings中找到Enable Bitcode,设置为No;
    2. 找到Optimization Level(Release模式下),暂时改为None [-O0],重新构建上传TestFlight测试,若崩溃消失则是编译优化导致的问题,后续可尝试保留优化并升级依赖解决。
  • 临时禁用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 20:17:03