Xamarin集成Crashlytics遇构建ID缺失及iOS空引用问题求助
问题概述
开发Xamarin应用时集成Firebase Crashlytics,先后遇到Android端初始化报错和iOS端空引用崩溃问题,以下是问题详情及Android端解决方法、iOS端排查建议:
Android端初始问题与解决
问题现象
应用运行时抛出异常:
Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.
完整错误日志:
[FirebaseApp] Device unlocked: initializing all Firebase APIs for app [DEFAULT] [FirebaseCrashlytics] Initializing Firebase Crashlytics 18.3.2 for com.lorem.ipsum [FirebaseCrashlytics] . [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . \ | | / [FirebaseCrashlytics] . \ / [FirebaseCrashlytics] . \ / [FirebaseCrashlytics] . \/ [FirebaseCrashlytics] . [FirebaseCrashlytics] The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account. [FirebaseCrashlytics] . [FirebaseCrashlytics] . /\ [FirebaseCrashlytics] . / \ [FirebaseCrashlytics] . / \ [FirebaseCrashlytics] . / | | \ [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . | | [FirebaseCrashlytics] . [AndroidRuntime] Shutting down VM **Java.Lang.RuntimeException:** 'Unable to get provider com.google.firebase.provider.FirebaseInitProvider: java.lang.IllegalStateException: The Crashlytics build ID is missing. This occurs when Crashlytics tooling is absent from your app's build configuration. Please review Crashlytics onboarding instructions and ensure you have a valid Crashlytics account.'
尝试过的无效操作
- 在
app.Android/Resources/values/strings.xml手动添加Crashlytics相关配置:<?xml version="1.0" encoding="utf-8" ?> <resources> <string name="com.crashlytics.android.build_id">2.0</string> <string name="com.google.firebase.crashlytics.mapping_file_id">none</string> <string name="google_app_id">The "current_key" from the google-servicies.json</string> </resources> - 确认
google-services.json放置位置正确、内容有效,且已安装所有相关NuGet包。
解决方法
在Android项目的.csproj文件中添加以下配置,确保构建工具能正确识别google-services.json:
<GoogleServicesJson Include="google-services.json" />
补充:该Android项目包名与已集成Crashlytics的旧Android Studio项目一致。
iOS端当前问题与排查建议
问题现象
调用Crashlytics初始化代码时应用崩溃,抛出空引用异常:
Crashlytics.SharedInstance.Init(); Crashlytics.SharedInstance.SetCrashlyticsCollectionEnabled(true); Crashlytics.SharedInstance.SendUnsentReports();
错误日志:
[0:] An error occurred: 'Object reference not set to an instance of an object.'. Callstack: ' at diarioDeTeruelIOS.iOS.AppDelegate.FinishedLaunching (UIKit.UIApplication app, Foundation.NSDictionary options) [0x00021] in C:\App.iOS\AppDelegate.cs:31
已检查csproj、plist文件及Crashlytics、Firebase.Core相关NuGet包,问题未解决。
补充:iOS项目为全新项目。
排查与解决建议
验证Firebase配置文件导入
从Firebase控制台下载GoogleService-Info.plist,确保文件添加到iOS项目根目录,且在csproj中设置Build Action为BundleResource,可检查csproj中是否有如下配置:<BundleResource Include="GoogleService-Info.plist" />调整初始化顺序
在AppDelegate.FinishedLaunching中,必须先初始化Firebase Core,再初始化Crashlytics,修改代码如下:Firebase.Core.App.Configure(); Crashlytics.SharedInstance.Init(); Crashlytics.SharedInstance.SetCrashlyticsCollectionEnabled(true); Crashlytics.SharedInstance.SendUnsentReports();确保NuGet包版本一致
检查Xamarin.Firebase.iOS.Core和Xamarin.Firebase.iOS.Crashlytics的版本是否完全匹配,版本不兼容会导致初始化异常。配置Info.plist
若手动初始化Firebase,需在Info.plist中添加如下配置,避免代理冲突:<key>FirebaseAppDelegateProxyEnabled</key> <false/>清理重建项目
删除iOS项目的bin、obj文件夹,重启Visual Studio后重新生成解决方案,排除缓存干扰。
内容的提问来源于stack exchange,提问作者Lorem

