My game has one scene which gets loaded at the start of the app. This works on il2cpp as well as with Mono on the device (ipad).
However when I want to restart the game within the game with SceneManager.LoadSceneAsync("MainScene"); the app crashes on the device with il2cpp.
This is the stacktrace:
∫* thread #1: tid = 0x9131, 0x0000000100f1cbb8 TestGameil2cpp::vm::LivenessState::AddProcessObject(Il2CppObject*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::Class::HasParentUnsafe(klass=<unavailable>, parent=0x00000001256f5e30) + 24 at Class.h:70, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x39c0ffe897ff70cd) frame #0: 0x0000000100f1cbb8 TestGameil2cpp::vm::LivenessState::AddProcessObject(Il2CppObject*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::Class::HasParentUnsafe(klass=, parent=0x00000001256f5e30) + 24 at Class.h:70 [opt]
frame #1: 0x0000000100f1cba0 TestGameil2cpp::vm::LivenessState::AddProcessObject(Il2CppObject*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::ShouldProcessValue(val=<unavailable>, filter=0x00000001256f5e30) at Liveness.cpp:333 [opt] frame #2: 0x0000000100f1cba0 TestGameil2cpp::vm::LivenessState::AddProcessObject(object=0x000000016fd08910, state=0x00000001269ef720) + 60 at Liveness.cpp:313 [opt]
frame #3: 0x0000000100f1c768 TestGameil2cpp::vm::LivenessState::TraverseGenericObject(Il2CppObject*, il2cpp::vm::LivenessState*) + 28 at Liveness.cpp:191 [opt] frame #4: 0x0000000100f1c74c TestGameil2cpp::vm::LivenessState::TraverseGenericObject(object=, state=) + 84 at Liveness.cpp:163 [opt]
frame #5: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #6: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #7: 0x0000000100f1ca14 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #8: 0x0000000100f1c9fc TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 348 at Liveness.cpp:290 [opt]
frame #9: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #10: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #11: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #12: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #13: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #14: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #15: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #16: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #17: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #18: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #19: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #20: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #21: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #22: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #23: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #24: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #25: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #26: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #27: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #28: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #29: 0x0000000100f1c998 TestGameil2cpp::vm::LivenessState::TraverseArray(Il2CppArray*, il2cpp::vm::LivenessState*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 24 at Liveness.cpp:129 [opt] frame #30: 0x0000000100f1c980 TestGameil2cpp::vm::LivenessState::TraverseArray(array=, state=) + 224 at Liveness.cpp:302 [opt]
frame #31: 0x0000000100f1d0d0 TestGameil2cpp::vm::Liveness::FromStatics(void*) [inlined] il2cpp::vm::LivenessState::TraverseGenericObject(object=0x000000010f4e1000) + 36 at Liveness.cpp:167 [opt] frame #32: 0x0000000100f1d0ac TestGameil2cpp::vm::Liveness::FromStatics(void*) [inlined] il2cpp::vm::LivenessState::TraverseObjects() + 36 at Liveness.cpp:129 [opt]
frame #33: 0x0000000100f1d088 TestGameil2cpp::vm::Liveness::FromStatics(state=<unavailable>) + 348 at Liveness.cpp:461 [opt] frame #34: 0x000000010092019c TestGame::GarbageCollectSharedAssets() [inlined] MarkManagedStaticVariableRoots + 1264 at GarbageCollectSharedAssets.cpp:623 [opt]
frame #35: 0x0000000100920188 TestGame::GarbageCollectSharedAssets() + 1244 at GarbageCollectSharedAssets.cpp:278 [opt] frame #36: 0x00000001009878f4 TestGame::IntegrateMainThread() + 24 at UnloadUnusedAssetsOperation.cpp:45 [opt]
frame #37: 0x00000001009871c0 TestGame::UpdatePreloadingSingleStep() + 316 at PreloadManager.cpp:475 [opt] frame #38: 0x00000001009876d0 TestGame::WaitForAllAsyncOperationsToComplete() + 68 at PreloadManager.cpp:552 [opt]
frame #39: 0x00000001009877ac TestGame::UpdatePreloading() + 172 at PreloadManager.cpp:593 [opt] frame #40: 0x00000001009216ec TestGame::PlayerLoop() + 344 at PlayerLoop.cpp:102 [opt]
frame #41: 0x0000000100ac91d0 TestGame::UnityPlayerLoopImpl() + 32 at LibEntryPoint.mm:221 [opt] frame #42: 0x00000001000ff590 TestGame::UnityRepaint() + 140 at UnityAppController+Rendering.mm:268 [opt]
frame #43: 0x00000001000ff47c TestGame::-[UnityAppController(self=0x0000000125570650, _cmd=<unavailable>) repaintDisplayLink]() + 88 at UnityAppController+Rendering.mm:77 [opt] frame #44: 0x0000000102d38aa8 libMTLInterpose.dylib-[DYDisplayLinkInterposer forwardDisplayLinkCallback:] + 184
frame #45: 0x0000000186a43814 QuartzCoreCA::smile:isplay::smile:isplayLinkItem::dispatch() + 40 frame #46: 0x0000000186a436c8 QuartzCoreCA: isplay: isplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 424
frame #47: 0x000000018456e1e8 IOKitIODispatchCalloutFromCFMessage + 372 frame #48: 0x000000018429b1f8 CoreFoundation__CFMachPortPerform + 180
frame #49: 0x00000001842b1634 CoreFoundation__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56 frame #50: 0x00000001842b0d6c CoreFoundation__CFRunLoopDoSource1 + 436
frame #51: 0x00000001842aeac4 CoreFoundation__CFRunLoopRun + 1800 frame #52: 0x00000001841dd680 CoreFoundationCFRunLoopRunSpecific + 384
frame #53: 0x00000001856ec088 GraphicsServicesGSEventRunModal + 180 frame #54: 0x0000000189054d90 UIKitUIApplicationMain + 204
frame #55: 0x00000001000f914c TestGamemain(argc=1, argv=0x000000016fd0ba60) + 172 at main.mm:35 [opt] frame #56: 0x0000000183d7e8b8 libdyld.dylibstart + 4
It works on the device when I use Mono.
I also tried to have another scene in between and load from there, as well as loading it async. Nothing works on il2cpp.
Does anyone has an idea how to solve this?
zlSimon
September 19, 2017, 8:07am
2
I still have no solution to this.
Any help would be appreciated.