firebase / firebase-unity-sdk

The Firebase SDK for Unity
http://firebase.google.com
Apache License 2.0
216 stars 35 forks source link

[Bug] Crash on iOS 12 (happens on 50%+ of sessions) #820

Closed UlulabDev closed 1 year ago

UlulabDev commented 1 year ago

[REQUIRED] Please fill in the following fields:

[REQUIRED] Please describe the issue here:

Since our last app update, we are getting a lot of crash reports from Apple. Crashlytics and our own custom crash handling system don't see this crash, so it went undetected for months. As the call stack shows, it happens in the awake of a manager class so it's really early on in the lifecycle of a session. This crash only occurs for iOS 12 - further iOS versions never trigger this issue. We are getting more reports recently of iPads on iOS 16 hanging, but we don't know if this is related to this issue or not.

At least 50% of sessions on iOS 12 have got this crash, so it's pretty critical.

Unfortunately I don't have a good explanation as to why this crash started with this version only. We resolved dependencies in Unity to update the version of a different package (RevenueCat), and that did update the ExternalDependencyManager from version 1.2.175 to version 1.2.176. Not sure which libraries were changed on iOS as a result of this though.

The call stack seems to point to firebase. So my best guess is that this change in dependency manager version got another version of iOS libraries, which now causes the crash.

Steps to reproduce:

Open the app and it crashes.

We will soon be getting a device that can run iOS 12 to try and repro, but we don't have one at the moment so we can't repro. So far these statistics are coming from App Store Connect.

Built with XCode version 13.4.1

Relevant Code:

This is the code in our Awake function which is part of the callstack below:
private void Awake()
    {
        // This should not be necessary as it is supposed to be true by default.
        // It has been noted somewhere that never calling this may result in Firebase not working due to a bug.
        FirebaseAnalytics.SetAnalyticsCollectionEnabled(true);

        //From https://firebase.google.com/docs/unity/setup#confirm-google-play-version
        FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
        {
            var dependencyStatus = task.Result;
            if (dependencyStatus == DependencyStatus.Available)
            {
                // Create and hold a reference to your FirebaseApp,
                // where app is a Firebase.FirebaseApp property of your application class.
                app = FirebaseApp.DefaultInstance;

                delayedMessages.Enqueue("Firebase is Initialized");
            }
            else
            {
                delayedMessages.Enqueue($"Could not resolve all Firebase dependencies: {dependencyStatus}");
            }
        });
    }

Call stack:
UnityFramework: specialized _NativeDictionary.mutatingFind(_:isUnique:) + 128
#23 (null) in specialized _NativeDictionary.ensureUnique(isUnique:capacity:) ()
#24 (null) in specialized _NativeDictionary.mutatingFind(_:isUnique:) ()
#25 (null) in specialized _NativeDictionary.setValue(_:forKey:isUnique:) ()
#26 (null) in specialized Dictionary._Variant.setValue(_:forKey:) ()
#27 (null) in specialized Dictionary.subscript.setter ()
#28 0x00000001007a038c in specialized static HeartbeatStorage.getInstance(id:) at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatStorage.swift:64
#29 0x0000000100792b60 in static HeartbeatStorage.getInstance(id:) at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatController.swift:45
#30 0x0000000100792b60 in HeartbeatController.__allocating_init(id:dateProvider:) at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCoreInternal/FirebaseCore/Internal/Sources/HeartbeatLogging/HeartbeatController.swift:36
#31 (null) in HeartbeatController.__allocating_init(id:) ()
#32 (null) in specialized _ObjC_HeartbeatController.init(id:) ()
#33 (null) in _ObjC_HeartbeatController.init(id:) ()
#34 (null) in @objc _ObjC_HeartbeatController.init(id:) ()
#35 0x000000010078eed8 in -[FIRHeartbeatLogger initWithAppID:userAgentProvider:] at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatLogger.m:52
#36 0x000000010078ee2c in -[FIRHeartbeatLogger initWithAppID:] at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCore/FirebaseCore/Sources/FIRHeartbeatLogger.m:44
#37 0x000000010078b2a8 in -[FIRApp initInstanceWithName:options:] at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m:342
#38 0x000000010078a9b8 in +[FIRApp configureWithName:options:] at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m:204
#39 0x000000010078a6ac in +[FIRApp configureWithOptions:] at /Users/ululabbuild/repos/numbers/BuildsProd/Pods/FirebaseCore/FirebaseCore/Sources/FIRApp.m:146
#40 (null) in invocation function for block in firebase::(anonymous namespace)::CreatePlatformApp(firebase::AppOptions const&, char const*) ()
#41 (null) in firebase::(anonymous namespace)::CreatePlatformApp(firebase::AppOptions const&, char const*) ()
#42 (null) in firebase::(anonymous namespace)::CreateOrGetPlatformApp(firebase::AppOptions const&, char const*) ()
#43 (null) in firebase::App::Create(firebase::AppOptions const&, char const*) ()
#44 (null) in firebase::App::Create(firebase::AppOptions const&) ()
#45 (null) in firebase::App::Create() ()
#46 (null) in firebase::AppCreate(firebase::AppOptions const*, char const*) ()
#47 (null) in firebase::AppGetOrCreateInstance(firebase::AppOptions const*, char const*) ()
#48 (null) in firebase_App_CreateInternal__SWIG_0() ()
#49 (null) in Firebase_App_CSharp_FirebaseApp_CreateInternal__SWIG_0 ()
#50 0x000000010190f148 in AppUtilPINVOKE_FirebaseApp_CreateInternal__SWIG_0_m8C61ECBE5407D4A591827E10595AE28EFE8C6CE5 at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Firebase.App.cpp:30894
#51 0x000000010190f148 in FirebaseApp_CreateInternal_m63EB3F64189DA8E6C5B2E1C95B11D63EF7F7BC4B at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Firebase.App.cpp:22376
#52 0x000000010190b348 in CreateDelegate_Invoke_m3C05F10053C0FD938376079571835049ADDD6186_inline(CreateDelegate_tC2B37930B020E09BB7E6EBC451C2864B0B29DE73*, MethodInfo const*) at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Firebase.App.cpp:34738
#53 0x000000010190b348 in FirebaseApp_CreateAndTrack_m3EFC2B1BFE4FF3BE069B04DE63E93A257CD65B3E at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Firebase.App.cpp:20829
#54 0x00000001018f3740 in FirebaseAnalytics__cctor_mC245C283209D04E164172DD540ACA071E394B5F0 at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Firebase.Analytics.cpp:5814
#55 0x00000001014c73dc in il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) ()
#56 0x00000001014c723c in il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) ()
#57 0x00000001014c576c in il2cpp::vm::Runtime::ClassInit(Il2CppClass*) ()
#58 0x00000001016c10bc in il2cpp_codegen_runtime_class_init_inline(Il2CppClass*) ()
#59 0x00000001016c10bc in FirebaseManagerBhvr_Awake_m6030513E14DEEBF484F7BC0FF2F9D807C36D4203 at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Assembly-CSharp1.cpp:17982
#60 0x00000001014c73dc in il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) ()
#61 0x00000001014c723c in il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) ()
#62 0x0000000100c18ae8 in scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) ()
#63 0x0000000100c248dc in ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) ()
#64 0x0000000100c275d8 in Invoke ()
#65 0x0000000100c275d8 in ScriptingInvocation::InvokeChecked(ScriptingExceptionPtr*) ()
#66 0x0000000100c69c48 in SerializableManagedRef::CallMethod(Object&, ScriptingMethodPtr) ()
#67 0x0000000100c35aec in CallMethodInactive ()
#68 0x0000000100c35aec in MonoBehaviour::CallAwake() ()
#69 0x0000000100c35f20 in MonoBehaviour::AddToManager() ()
#70 (null) in MonoBehaviour::AwakeFromLoad(AwakeFromLoadMode) ()
#71 0x0000000100c6b264 in AwakeFromLoadQueue::InvokeAwakeFromLoad(AwakeFromLoadQueue::Item*, unsigned int, AwakeFromLoadMode) ()
#72 0x0000000100c6b12c in AwakeFromLoadQueue::AwakeFromLoadAllQueues(AwakeFromLoadMode, bool) ()
#73 0x0000000100a956c0 in AwakeFromLoad ()
#74 0x0000000100a956c0 in GameObject::ActivateAwakeRecursively(DeactivateOperation) ()
#75 0x0000000100a02bdc in GameObject_CUSTOM_SetActive(ScriptingBackendNativeObjectPtrOpaque*, unsigned char) ()
#76 0x0000000101890844 in GameLoaderBhvr_U3CGameLoaderRoutineU3Eb__6_12_mD2571AB5D64980EC6B23A5512C93FD0DEBAC614B at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Assembly-CSharp6.cpp:34515
#77 0x0000000101a98754 in Option_Map_TisUnit_t135B1E794A325E2D5D5BE5F538101F2019378104_TisRuntimeObject_mBBE9EDCCB89FCB2531CDF4621175BBD4A9F5E0C9_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/GenericMethods18.cpp:36680
#78 0x0000000101c639d4 in U3CU3Ec__DisplayClass40_0_2_U3CMapU3Eb__0_m9AB914918F77BF3D81042A15DC410D5D6DE2F20A_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics1.cpp:50068
#79 0x0000000102497084 in Routine_1_Step_m4D02DF56C5C64B67BDB340FF34AFE9939ACF8FAA_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics78.cpp:24435
#80 0x0000000101dccd1c in U3CU3Ec__DisplayClass42_0_1_U3CFlattenU3Eb__0_mECA1AA3D2AD308DD9DB6544FDCDAE81EC1155817_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics2.cpp:16360
#81 0x0000000102497b6c in Routine_1_Step_mB89D02EB49527DE014D80E0D473477D15C91E867_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics78.cpp:24832
#82 0x0000000101c63a94 in U3CU3Ec__DisplayClass40_0_2_U3CMapU3Eb__0_m44BE290DF4538D224DD884C945836E26AD0DDE11_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics1.cpp:50132
#83 0x0000000102497b6c in Routine_1_Step_mB89D02EB49527DE014D80E0D473477D15C91E867_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics78.cpp:24832
#84 0x0000000101a7cee4 in Option_Bind_TisRuntimeObject_TisUnit_t135B1E794A325E2D5D5BE5F538101F2019378104_m68D157233FCBFF940BE1D7526CB8AEF6CE315B00_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/GenericMethods18.cpp:17313
#85 0x0000000101dcce50 in U3CU3Ec__DisplayClass42_0_1_U3CFlattenU3Eb__0_mECA1AA3D2AD308DD9DB6544FDCDAE81EC1155817_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics2.cpp:16390
#86 0x0000000102497b6c in Routine_1_Step_mB89D02EB49527DE014D80E0D473477D15C91E867_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics78.cpp:24832
#87 0x00000001024977e4 in Routine_1_get_keepWaiting_m808D6FC5BDA2991261DFFCF341EDF29FB659576D_gshared at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/Generics78.cpp:24702
#88 0x0000000102d476d4 in InterfaceFuncInvoker0<bool>::Invoke(unsigned short, Il2CppClass*, Il2CppObject*) at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/UnityEngine.CoreModule1.cpp:119
#89 0x0000000102d476d4 in SetupCoroutine_InvokeMoveNext_m72FC77384CAC3133B6EE650E0581D055B34B2F5F at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/Native/UnityEngine.CoreModule1.cpp:24267
#90 0x00000001014c73dc in il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) ()
#91 0x00000001014c723c in il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) ()
#92 0x0000000100c18ae8 in scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) ()
#93 0x0000000100c248dc in ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) ()
#94 0x0000000100c32204 in Invoke ()
#95 0x0000000100c32204 in Coroutine::InvokeMoveNext(ScriptingExceptionPtr*) ()
#96 0x0000000100c31db8 in Coroutine::Run(bool*) ()
#97 0x0000000100c33ff8 in MonoBehaviour::TryCreateAndRunCoroutine(ScriptingObjectPtr, ScriptingMethodPtr, Coroutine**) ()
#98 0x0000000100c34458 in CreateCoroutine ()
#99 0x0000000100c34458 in MonoBehaviour::StartCoroutineManaged2(ScriptingObjectPtr) ()
#100 0x0000000100a04e0c in MonoBehaviour_CUSTOM_StartCoroutineManaged2(ScriptingBackendNativeObjectPtrOpaque*, ScriptingBackendNativeObjectPtrOpaque*) ()
#101 0x00000001014c73dc in il2cpp::vm::Runtime::InvokeWithThrow(MethodInfo const*, void*, void**) ()
#102 0x00000001014c723c in il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) ()
#103 0x0000000100c18ae8 in scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) ()
#104 0x0000000100c248dc in ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) ()
#105 (null) in MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingExceptionPtr*) ()
#106 0x0000000100c34f18 in MonoBehaviour::InvokeMethodOrCoroutineChecked(ScriptingMethodPtr, ScriptingObjectPtr) ()
#107 0x0000000100c3579c in Start ()
#108 0x0000000100c3579c in MonoBehaviour::DelayedStartCall(Object*, void*) ()
#109 0x0000000100aad2cc in DelayedCallManager::Update(int) ()
#110 0x0000000100b5e088 in ExecutePlayerLoop(NativePlayerLoopSystem*) ()
#111 0x0000000100b5e0c8 in ExecutePlayerLoop(NativePlayerLoopSystem*) ()
#112 0x0000000100b5e324 in PlayerLoop() ()
#113 0x000000010116a310 in UnityPlayerLoopImpl(bool) ()
#114 0x00000001004ce7b4 in UnityRepaint at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/UnityAppController+Rendering.mm:236
#115 0x00000001004ce7b4 in -[UnityAppController(Rendering) repaint] at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/UnityAppController+Rendering.mm:90
#116 0x00000001004ce744 in -[UnityAppController(Rendering) repaintDisplayLink] at /Users/ululabbuild/repos/numbers/BuildsProd/Classes/UnityAppController+Rendering.mm:71
#117 (null) in CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) ()
#118 (null) in IODispatchCalloutFromCFMessage ()
#119 (null) in __CFMachPortPerform ()
#120 (null) in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#121 (null) in __CFRunLoopDoSource1 ()
#122 (null) in __CFRunLoopRun ()
#123 (null) in CFRunLoopRunSpecific ()
#124 (null) in GSEventRunModal ()
#125 (null) in UIApplicationMain ()
#126 0x00000001004cdfb4 in -[UnityFramework runUIApplicationMainWithArgc:argv:] at /Users/ululabbuild/repos/numbers/BuildsProd/MainApp/main.mm:96
#127 0x000000010027eb04 in main at /Users/ululabbuild/repos/numbers/BuildsProd/MainApp/main.mm:26
#128 (null) in start ()
paulinon commented 1 year ago

Hi @UlulabDev,

Thanks for reporting this. It seems that you're already in touch with one of our engineers in another GitHub ticket. That said, I'll be closing this for now so that all discussion could be contained in one thread.