JetBrains / compose-multiplatform

Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
https://jetbrains.com/lp/compose-multiplatform
Apache License 2.0
16.15k stars 1.17k forks source link

Navigation NullPointerException in iOS #4701

Closed JakkeJ closed 6 months ago

JakkeJ commented 6 months ago

Describe the bug Getting NullPointerException on iPhone with the same code that works on Android (both KMP/CMP and regular Jetpack Compose non KMP/CMP)

Affected platforms

Versions

To Reproduce Steps and/or the code snippet to reproduce the behavior: Just add a regular bottombar, clicking on some of the buttons will cause a NullPointerException, but it is not consistent, and it is for all buttons, even those leading to an empty screen (with placeholder text).

Expected behavior Navigate to the selected screen without crashing?

Additional context Exception, only happens on iPhone simulator, not on my Android 14 Pixel Pro emulator: Uncaught Kotlin exception: kotlin.NullPointerException at 0 shared 0x1073fa3a7 kfun:kotlin.Throwable#(){} + 95 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Throwable.kt:32:21) at 1 shared 0x1073f35df kfun:kotlin.Exception#(){} + 87 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:21:28) at 2 shared 0x1073f37ff kfun:kotlin.RuntimeException#(){} + 87 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:32:28) at 3 shared 0x1073f3a1f kfun:kotlin.NullPointerException#(){} + 87 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:43:28) at 4 shared 0x10742f6cf ThrowNullPointerException + 131 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/native/internal/RuntimeUtils.kt:19:11) at 5 shared 0x10847f117 kfun:androidx.navigation.NavController.launchSingleTopInternal#internal + 2059 (/opt/buildAgent/work/8a20760945d0aeba/navigation/navigation-runtime/src/jbMain/kotlin/androidx/navigation/NavController.jb.kt:858:63) at 6 shared 0x10847e56f kfun:androidx.navigation.NavController.navigate#internal + 2031 (/opt/buildAgent/work/8a20760945d0aeba/navigation/navigation-runtime/src/jbMain/kotlin/androidx/navigation/NavController.jb.kt:806:17) at 7 shared 0x108482d73 kfun:androidx.navigation.NavController#navigate(kotlin.String;androidx.navigation.NavOptions?;androidx.navigation.Navigator.Extras?){} + 979 (/opt/buildAgent/work/8a20760945d0aeba/navigation/navigation-runtime/src/jbMain/kotlin/androidx/navigation/NavController.jb.kt:1099:13) at 8 shared 0x108482feb kfun:androidx.navigation.NavController#navigate$default(kotlin.String;androidx.navigation.NavOptions?;androidx.navigation.Navigator.Extras?;kotlin.Int){} + 327 (/opt/buildAgent/work/8a20760945d0aeba/navigation/navigation-runtime/src/jbMain/kotlin/androidx/navigation/NavController.jb.kt:1088:19) at 9 shared 0x10848297b kfun:androidx.navigation.NavController#navigate(kotlin.String;kotlin.Function1<androidx.navigation.NavOptionsBuilder,kotlin.Unit>){} + 215 (/opt/buildAgent/work/8a20760945d0aeba/navigation/navigation-runtime/src/jbMain/kotlin/androidx/navigation/NavController.jb.kt:1083:9) at 10 shared 0x106b10337 kfun:com.sar.app.ui.screen.AddItem$lambda$16#internal + 231 at 11 shared 0x106b11793 kfun:com.sar.app.ui.screen.$AddItem$lambda$16$FUNCTION_REFERENCE$6.invoke#internal + 75 at 12 shared 0x106b1188f kfun:com.sar.app.ui.screen.$AddItem$lambda$16$FUNCTION_REFERENCE$6.$invoke(){}#internal + 71 at 13 shared 0x10752deab kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 (/Users/teamcity/.gradle/daemon/8.2.1/[K][Suspend]Functions:1:1) at 14 shared 0x107c103ef kfun:androidx.compose.foundation.ClickablePointerInputNode.pointerInput$lambda$1#internal + 195 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:991:36) at 15 shared 0x107c10697 kfun:androidx.compose.foundation.ClickablePointerInputNode.$pointerInput$lambda$1$FUNCTION_REFERENCE$14.invoke#internal + 87 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:984:9) at 16 shared 0x107c1079b kfun:androidx.compose.foundation.ClickablePointerInputNode.$pointerInput$lambda$1$FUNCTION_REFERENCE$14.$invoke(androidx.compose.ui.geometry.Offset){}#internal + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:984:9) at 17 shared 0x10752c943 kfun:kotlin.Function1#invoke(1:0){}1:1-trampoline + 107 (/Users/teamcity/.gradle/daemon/8.2.1/[K][Suspend]Functions:1:1) at 18 shared 0x107c62d23 kfun:androidx.compose.foundation.gestures.$detectTapAndPress$lambda$21$lambda$20COROUTINE$6.invokeSuspend#internal + 1803 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/TapGestureDetector.kt:258:24) at 19 shared 0x10753157f kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#invokeSuspend(kotlin.Result<kotlin.Any?>){}kotlin.Any?-trampoline + 67 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationImpl.kt:50:24) at 20 shared 0x1073ff0eb kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} + 623 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationImpl.kt:30:39) at 21 shared 0x10753165f kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/libraries/stdlib/src/kotlin/coroutines/Continuation.kt:26:12) at 22 shared 0x107623683 kfun:kotlinx.coroutines#resumeatkotlinx.coroutines.DispatchedTask<0:0>(kotlin.coroutines.Continuation<0:0>;kotlin.Boolean){0§<kotlin.Any?>} + 1019 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/internal/DispatchedTask.kt:175:26) at 23 shared 0x10762325b kfun:kotlinx.coroutines#dispatchatkotlinx.coroutines.DispatchedTask<0:0>(kotlin.Int){0§<kotlin.Any?>} + 647 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/internal/DispatchedTask.kt:164:9) at 24 shared 0x1075b667f kfun:kotlinx.coroutines.CancellableContinuationImpl.dispatchResume#internal + 119 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/CancellableContinuationImpl.kt:470:9) at 25 shared 0x1075b6c07 kfun:kotlinx.coroutines.CancellableContinuationImpl.resumeImpl#internal + 583 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/CancellableContinuationImpl.kt:504:21) at 26 shared 0x1075b6e5f kfun:kotlinx.coroutines.CancellableContinuationImpl#resumeImpl$default(kotlin.Any?;kotlin.Int;kotlin.Function1<kotlin.Throwable,kotlin.Unit>?;kotlin.Int){} + 251 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/CancellableContinuationImpl.kt:493:13) at 27 shared 0x1075b54ab kfun:kotlinx.coroutines.CancellableContinuationImpl#resumeWith(kotlin.Result<1:0>){} + 211 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/CancellableContinuationImpl.kt:364:9) at 28 shared 0x10753165f kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/libraries/stdlib/src/kotlin/coroutines/Continuation.kt:26:12) at 29 shared 0x107985a73 kfun:androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.PointerEventHandlerCoroutine.offerPointerEvent#internal + 591 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt:672:28) at 30 shared 0x10798382b kfun:androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent#internal + 1383 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt:549:16) at 31 shared 0x107983c1f kfun:androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){} + 639 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt:571:9) at 32 shared 0x107b5686f kfun:androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNode#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){}-trampoline + 115 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/SuspendingPointerInputFilter.kt:57:50) at 33 shared 0x107c0f35b kfun:androidx.compose.foundation.AbstractClickablePointerInputNode#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){} + 207 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:950:26) at 34 shared 0x107d939af kfun:androidx.compose.foundation.AbstractClickablePointerInputNode#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){}-trampoline + 75 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:) at 35 shared 0x107c0cfcb kfun:androidx.compose.foundation.AbstractClickableNode#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){} + 207 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt:798:35) at 36 shared 0x107b54f3f kfun:androidx.compose.ui.node.PointerInputModifierNode#onPointerEvent(androidx.compose.ui.input.pointer.PointerEvent;androidx.compose.ui.input.pointer.PointerEventPass;androidx.compose.ui.unit.IntSize){}-trampoline + 115 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/PointerInputModifierNode.kt:52:5) at 37 shared 0x10797085f kfun:androidx.compose.ui.input.pointer.Node#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 3883 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:326:24) at 38 shared 0x10797069b kfun:androidx.compose.ui.input.pointer.Node#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 3431 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:312:24) at 39 shared 0x10797069b kfun:androidx.compose.ui.input.pointer.Node#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 3431 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:312:24) at 40 shared 0x10797069b kfun:androidx.compose.ui.input.pointer.Node#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 3431 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:312:24) at 41 shared 0x10796e61b kfun:androidx.compose.ui.input.pointer.NodeParent#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 487 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:187:29) at 42 shared 0x107b54def kfun:androidx.compose.ui.input.pointer.NodeParent#dispatchMainEventPass(androidx.collection.LongSparseArray;androidx.compose.ui.layout.LayoutCoordinates;androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean-trampoline + 87 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:179:10) at 43 shared 0x10796ddcf kfun:androidx.compose.ui.input.pointer.HitPathTracker#dispatchChanges(androidx.compose.ui.input.pointer.InternalPointerEvent;kotlin.Boolean){}kotlin.Boolean + 495 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/HitPathTracker.kt:106:32) at 44 shared 0x10797ff4b kfun:androidx.compose.ui.input.pointer.PointerInputEventProcessor#process(androidx.compose.ui.input.pointer.PointerInputEvent;androidx.compose.ui.input.pointer.PositionCalculator;kotlin.Boolean){}androidx.compose.ui.input.pointer.ProcessResult + 1619 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/input/pointer/PointerInputEventProcessor.kt:114:32) at 45 shared 0x107a7a5a7 kfun:androidx.compose.ui.node.RootNodeOwner#onPointerInput(androidx.compose.ui.input.pointer.PointerInputEvent){} + 931 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/node/RootNodeOwner.skiko.kt:212:36) at 46 shared 0x107aae3f3 kfun:androidx.compose.ui.scene.SingleLayerComposeSceneImpl.processPointerInputEvent#internal + 167 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/SingleLayerComposeScene.skiko.kt:165:19) at 47 shared 0x107b6df57 kfun:androidx.compose.ui.scene.BaseComposeScene#processPointerInputEvent(androidx.compose.ui.input.pointer.PointerInputEvent){}-trampoline + 59 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/BaseComposeScene.skiko.kt:) at 48 shared 0x107a9893b kfun:androidx.compose.ui.scene.BaseComposeScene.$processPointerInputEvent$FUNCTION_REFERENCE$5.invoke#internal + 99 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/BaseComposeScene.skiko.kt:62:40) at 49 shared 0x107a98aaf kfun:androidx.compose.ui.scene.BaseComposeScene.$processPointerInputEvent$FUNCTION_REFERENCE$5.$invoke(androidx.compose.ui.input.pointer.PointerInputEvent){}#internal + 99 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/BaseComposeScene.skiko.kt:62:40) at 50 shared 0x10752c943 kfun:kotlin.Function1#invoke(1:0){}1:1-trampoline + 107 (/Users/teamcity/.gradle/daemon/8.2.1/[K][Suspend]Functions:1:1) at 51 shared 0x107a70a2f kfun:androidx.compose.ui.input.pointer.SyntheticEventSender.sendInternal#internal + 191 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/input/pointer/SyntheticEventSender.skiko.kt:175:9) at 52 shared 0x107a6f4d3 kfun:androidx.compose.ui.input.pointer.SyntheticEventSender#send(androidx.compose.ui.input.pointer.PointerInputEvent){} + 167 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/input/pointer/SyntheticEventSender.skiko.kt:79:9) at 53 shared 0x107a9b113 kfun:androidx.compose.ui.scene.ComposeSceneInputHandler#onPointerEvent(androidx.compose.ui.input.pointer.PointerEventType;kotlin.collections.List;androidx.compose.ui.input.pointer.PointerButtons;androidx.compose.ui.input.pointer.PointerKeyboardModifiers;androidx.compose.ui.geometry.Offset;kotlin.Long;kotlin.Any?;androidx.compose.ui.input.pointer.PointerButton?){} + 455 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/ComposeSceneInputHandler.skiko.kt:123:30) at 54 shared 0x107a972c3 kfun:androidx.compose.ui.scene.BaseComposeScene#sendPointerEvent(androidx.compose.ui.input.pointer.PointerEventType;kotlin.collections.List;androidx.compose.ui.input.pointer.PointerButtons;androidx.compose.ui.input.pointer.PointerKeyboardModifiers;androidx.compose.ui.geometry.Offset;kotlin.Long;kotlin.Any?;androidx.compose.ui.input.pointer.PointerButton?){} + 1267 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/BaseComposeScene.skiko.kt:) at 55 shared 0x107b699e7 kfun:androidx.compose.ui.scene.ComposeScene#sendPointerEvent(androidx.compose.ui.input.pointer.PointerEventType;kotlin.collections.List;androidx.compose.ui.input.pointer.PointerButtons;androidx.compose.ui.input.pointer.PointerKeyboardModifiers;androidx.compose.ui.geometry.Offset;kotlin.Long;kotlin.Any?;androidx.compose.ui.input.pointer.PointerButton?){}-trampoline + 167 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/ComposeScene.skiko.kt:218:5) at 56 shared 0x107a9a017 kfun:androidx.compose.ui.scene.ComposeScene#sendPointerEvent$default(androidx.compose.ui.input.pointer.PointerEventType;kotlin.collections.List;androidx.compose.ui.input.pointer.PointerButtons;androidx.compose.ui.input.pointer.PointerKeyboardModifiers;androidx.compose.ui.geometry.Offset;kotlin.Long;kotlin.Any?;androidx.compose.ui.input.pointer.PointerButton?;kotlin.Int){} + 767 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/ComposeScene.skiko.kt:218:5) at 57 shared 0x107affe07 kfun:androidx.compose.ui.scene.ComposeSceneMediator.object-3.onTouchesEvent#internal + 1815 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/scene/ComposeSceneMediator.uikit.kt:372:23) at 58 shared 0x107b73b0f kfun:androidx.compose.ui.window.InteractionUIView.Delegate#onTouchesEvent(platform.UIKit.UIView;platform.UIKit.UIEvent;androidx.compose.ui.window.UITouchesEventPhase){}-trampoline + 115 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/InteractionUIView.uikit.kt:40:9) at 59 shared 0x107b26b5b kfun:androidx.compose.ui.window.InteractionUIView#objc:touchesEnded:withEvent: + 619 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/InteractionUIView.uikit.kt:88:47) at 60 shared 0x107b27e2b _6f72672e6a6574627261696e732e636f6d706f73652e75693a75692f6f70742f6275696c644167656e742f776f726b2f386132303736303934356430616562612f636f6d706f73652f75692f75692f7372632f75696b69744d61696e2f6b6f746c696e2f616e64726f6964782f636f6d706f73652f75692f77696e646f772f496e746572616374696f6e5549566965772e75696b69742e6b74_knbridge32 + 235 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/InteractionUIView.uikit.kt:87:14) at 61 UIKitCore 0x1854208e3 -[UIWindow _sendTouchesForEvent:] + 899 at 62 UIKitCore 0x185421e07 -[UIWindow sendEvent:] + 3103 at 63 UIKitCore 0x1854017c7 -[UIApplication sendEvent:] + 575 at 64 UIKit 0x1c52c668f -[UIApplicationAccessibility sendEvent:] + 119 at 65 UIKitCore 0x1854849d7 dispatchPreprocessedEventFromEventQueue + 1683 at 66 UIKitCore 0x185487823 processEventQueue + 5523 at 67 UIKitCore 0x185480217 eventFetcherSourceCallback + 155 at 68 CoreFoundation 0x18040ee87 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 23 at 69 CoreFoundation 0x18040edcf CFRunLoopDoSource0 + 171 at 70 CoreFoundation 0x18040e53f CFRunLoopDoSources0 + 231 at 71 CoreFoundation 0x180408c27 CFRunLoopRun + 767 at 72 CoreFoundation 0x180408513 CFRunLoopRunSpecific + 571 at 73 GraphicsServices 0x18ef06ae3 GSEventRunModal + 159 at 74 UIKitCore 0x1853e803f -[UIApplication _run] + 867 at 75 UIKitCore 0x1853ebcc7 UIApplicationMain + 123 at 76 SwiftUI 0x1cc1fcb67 OUTLINED_FUNCTION_65 + 491 at 77 SwiftUI 0x1cc1fca0f OUTLINED_FUNCTION_65 + 147 at 78 SwiftUI 0x1cbebb067 OUTLINED_FUNCTION_0 + 91 at 79 SAR App iOS 0x1006bc423 $s11SAR_App_iOS6iOSAppV5$mainyyFZ + 39 at 80 SAR App iOS 0x1006bc4d3 main + 11 (/Users/jimtj/Datateknikk/Bachelor/Bachelor-Gr4-SAR-Mobil-MP/iosApp/iosApp/iOSApp.swift:) at 81 dyld 0x10071d543 0x0 + 4302427459 at 82 ??? 0x10083a0df 0x0 + 4303593695 at 83 ??? 0xf559ffffffffffff 0x0 + -767300786513248257 Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.runtime.BroadcastFrameClock@12c0a68, StandaloneCoroutine{Cancelling}@12000de0, FlushCoroutineDispatcher@1624890] at 0 shared 0x1073fa20f kfun:kotlin.Throwable#(kotlin.String?){} + 119 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Throwable.kt:28:37) at 1 shared 0x1073f3667 kfun:kotlin.Exception#(kotlin.String?){} + 115 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:23:44) at 2 shared 0x1073f3887 kfun:kotlin.RuntimeException#(kotlin.String?){} + 115 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:34:44) at 3 shared 0x10764a2bf kfun:kotlinx.coroutines.internal.DiagnosticCoroutineContextException#(kotlin.coroutines.CoroutineContext){} + 167 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/internal/CoroutineExceptionHandlerImpl.kt:27:5) at 4 shared 0x10761ecaf kfun:kotlinx.coroutines.internal#handleUncaughtCoroutineException(kotlin.coroutines.CoroutineContext;kotlin.Throwable){} + 647 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/internal/CoroutineExceptionHandlerImpl.common.kt:43:33) at 5 shared 0x1075bcb47 kfun:kotlinx.coroutines#handleCoroutineException(kotlin.coroutines.CoroutineContext;kotlin.Throwable){} + 515 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/CoroutineExceptionHandler.kt:28:5) at 6 shared 0x1075b0c23 kfun:kotlinx.coroutines.StandaloneCoroutine.handleJobException#internal + 167 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/Builders.common.kt:190:9) at 7 shared 0x107652587 kfun:kotlinx.coroutines.JobSupport#handleJobException(kotlin.Throwable){}kotlin.Boolean-trampoline + 59 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/JobSupport.kt:1028:20) at 8 shared 0x1075c6dcf kfun:kotlinx.coroutines.JobSupport.finalizeFinishingState#internal + 1135 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/JobSupport.kt:228:59) at 9 shared 0x1075cf16b kfun:kotlinx.coroutines.JobSupport.tryMakeCompletingSlowPath#internal + 1983 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/JobSupport.kt:907:16) at 10 shared 0x1075ce973 kfun:kotlinx.coroutines.JobSupport.tryMakeCompleting#internal + 755 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/JobSupport.kt:864:16) at 11 shared 0x1075ce4a3 kfun:kotlinx.coroutines.JobSupport#makeCompletingOnce(kotlin.Any?){}kotlin.Any? + 379 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/JobSupport.kt:829:30) at 12 shared 0x1075ad06b kfun:kotlinx.coroutines.AbstractCoroutine#resumeWith(kotlin.Result<1:0>){} + 211 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/AbstractCoroutine.kt:97:21) at 13 shared 0x10753165f kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/libraries/stdlib/src/kotlin/coroutines/Continuation.kt:26:12) at 14 shared 0x1073ff307 kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} + 1163 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationImpl.kt:43:32) at 15 shared 0x10753165f kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 (/opt/buildAgent/work/2fed3917837e7e79/kotlin/libraries/stdlib/src/kotlin/coroutines/Continuation.kt:26:12) at 16 shared 0x107622947 kfun:kotlinx.coroutines.DispatchedTask#run(){} + 1691 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/internal/DispatchedTask.kt:102:58) at 17 shared 0x107650df3 kfun:kotlinx.coroutines.Runnable#run(){}-trampoline + 91 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/Runnable.kt:10:19) at 18 shared 0x107a84667 kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.flush$lambda$2#internal + 787 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt:88:14) at 19 shared 0x107a8523f kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.$flush$lambda$2$FUNCTION_REFERENCE$1.invoke#internal + 71 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt:78:19) at 20 shared 0x107a8530f kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.$flush$lambda$2$FUNCTION_REFERENCE$1.$invoke(){}#internal + 71 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt:78:19) at 21 shared 0x10752deab kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 (/Users/teamcity/.gradle/daemon/8.2.1/[K][Suspend]Functions:1:1) at 22 shared 0x107a83b2f kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher.performRun#internal + 303 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt:99:13) at 23 shared 0x107a839db kfun:androidx.compose.ui.platform.FlushCoroutineDispatcher#flush(){} + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/FlushCoroutineDispatcher.skiko.kt:78:19) at 24 shared 0x107aa0547 kfun:androidx.compose.ui.scene.ComposeSceneRecomposer#performScheduledEffects(){} + 583 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/ComposeSceneRecomposer.skiko.kt:) at 25 shared 0x107a95d27 kfun:androidx.compose.ui.scene.BaseComposeScene#render(androidx.compose.ui.graphics.Canvas;kotlin.Long){} + 1179 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/BaseComposeScene.skiko.kt:) at 26 shared 0x107b698e7 kfun:androidx.compose.ui.scene.ComposeScene#render(androidx.compose.ui.graphics.Canvas;kotlin.Long){}-trampoline + 107 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/scene/ComposeScene.skiko.kt:167:5) at 27 shared 0x107af049f kfun:androidx.compose.ui.scene.RenderingUIViewDelegateImpl.onRender#internal + 515 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/scene/ComposeSceneMediator.uikit.kt:175:19) at 28 shared 0x106d44e0b kfun:org.jetbrains.skiko.SkikoRenderDelegate#onRender(org.jetbrains.skia.Canvas;kotlin.Int;kotlin.Int;kotlin.Long){}-trampoline + 123 (/opt/buildAgent/work/a64d3aa477d12f6b/skiko/src/commonMain/kotlin/org/jetbrains/skiko/SkikoRenderDelegate.kt:6:5) at 29 shared 0x107b4802f kfun:androidx.compose.ui.window.RenderingUIView.object-1.render#internal + 299 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/RenderingUIView.uikit.kt:66:32) at 30 shared 0x107b743d3 kfun:androidx.compose.ui.window.MetalRedrawerCallbacks#render(org.jetbrains.skia.Canvas;kotlin.Double){}-trampoline + 107 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:116:5) at 31 shared 0x107b3e893 kfun:androidx.compose.ui.window.MetalRedrawer.draw#internal + 4175 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:) at 32 shared 0x107b4117f kfun:androidx.compose.ui.window.MetalRedrawer.$lambda$0#internal + 435 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:216:17) at 33 shared 0x107b43283 kfun:androidx.compose.ui.window.MetalRedrawer.$$lambda$0$FUNCTION_REFERENCE$0.invoke#internal + 71 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:211:63) at 34 shared 0x107b43353 kfun:androidx.compose.ui.window.MetalRedrawer.$$lambda$0$FUNCTION_REFERENCE$0.$invoke(){}#internal + 71 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:211:63) at 35 shared 0x10752deab kfun:kotlin.Function0#invoke(){}1:0-trampoline + 99 (/Users/teamcity/.gradle/daemon/8.2.1/[K][Suspend]Functions:1:1) at 36 shared 0x107b4409b kfun:androidx.compose.ui.window.DisplayLinkProxy.handleDisplayLinkTick#internal + 151 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:481:9) at 37 shared 0x107b4414f kfun:androidx.compose.ui.window.DisplayLinkProxy.$imp:handleDisplayLinkTick#internal + 143 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/uikitMain/kotlin/androidx/compose/ui/window/MetalRedrawer.uikit.kt:480:5) at 38 QuartzCore 0x18a02a547 _ZN2CA7Display15DisplayLinkItem9dispatch_ERNS_8SignPost8IntervalILNS2_11CAEventCodeE835322056EEE + 43 at 39 QuartzCore 0x18a026d1f _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 803 at 40 QuartzCore 0x18a127a6f _ZL22display_timer_callbackP12_CFMachPortPvlS1 + 335 at 41 CoreFoundation 0x1803d8a5f CFMachPortPerform + 171 at 42 CoreFoundation 0x18040f5c7 CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION + 55 at 43 CoreFoundation 0x18040eb97 CFRunLoopDoSource1 + 495 at 44 CoreFoundation 0x1804091a7 __CFRunLoopRun + 2175 at 45 CoreFoundation 0x180408513 CFRunLoopRunSpecific + 571 ... and 11 more common stack frames skipped

JakkeJ commented 6 months ago

This might be something I've done wrong of course, but the exception is crazy long, so it is hard to get anything useful out of it.

JakkeJ commented 6 months ago

This seems to only be when navigating to startDestination. If I change startDestination from one screen to another, I get the exception on that screen instead when navigating to it.

lspradeep commented 6 months ago

_Crash : iOS simulator (iPhone 15 - iOS 17.4) Reproducible when launchSingleTop = true and clicking same destinations twice

@Composable
fun MainScreen() {
    val navController = rememberNavController()

    Scaffold(
        bottomBar = {
            BottomAppBar {
                val navBackStackEntry by navController.currentBackStackEntryAsState()
                val currentDestination = navBackStackEntry?.destination
                BottomNavRoutes.entries.forEach { bottomNavRoute ->
                    NavigationBarItem(
                        icon = { Icon(Icons.Filled.Favorite, contentDescription = null) },
                        label = { Text(bottomNavRoute.name) },
                        selected = currentDestination?.hierarchy?.any { it.route == bottomNavRoute.name } == true,
                        onClick = {
                            navController.navigate(bottomNavRoute.name) {
                                // Pop up to the start destination of the graph to
                                // avoid building up a large stack of destinations
                                // on the back stack as users select items
                                popUpTo(navController.graph.findStartDestination().navigatorName) {
                                    saveState = true
                                }
                                // Avoid multiple copies of the same destination when
                                // reselecting the same item
                                launchSingleTop = true
                                // Restore state when reselecting a previously selected item
                                restoreState = true
                            }
                        }
                    )
                }
            }
        }
    ) { innerPadding ->
        NavHost(
            navController,
            startDestination = BottomNavRoutes.Home.name,
            Modifier.padding(innerPadding)
        ) {
            composable(BottomNavRoutes.Home.name) { HomeScreen() }
            composable(BottomNavRoutes.Account.name) { AccountScreen() }
        }
    }
}
MatkovIvan commented 6 months ago

Compose Multiplatform version: 1.6.5

There is no such version of Compose Multiplatform. And there is no info about a navigation library version in the description. Please specify this essential info next time.

For this particular issue, I believe it's a duplicate of #4684 and was fixed in https://github.com/JetBrains/compose-multiplatform-core/pull/1311. It should be fixed in 2.8.0-alpha02

JakkeJ commented 6 months ago

Compose Multiplatform version: 1.6.5

There is no such version of Compose Multiplatform. And there is no info about a navigation library version in the description. Please specify this essential info next time.

For this particular issue, I believe it's a duplicate of #4684 and was fixed in JetBrains/compose-multiplatform-core#1311. It should be fixed in 2.8.0-alpha02

Compose Navigation is set to 2.8.0-alpha05, so I'll try alpha06. But outside Compose Navigation, I have no Compose libraries set to 2.X.X, everything is 1.6.X, and I couldn't find any references to the version with a quick glance on JetBrains website, only that you set it up with some KMP wizard. Hopefully it'll work.

MatkovIvan commented 6 months ago

Compose Navigation is set to 2.8.0-alpha05, so I'll try alpha06

It's again Google/Android versions. There is no such version for Multiplatform/iOS.

If you are not sure about the version - please share the reproduction project/sample

okushnikov commented 2 months ago

Please check the following ticket on YouTrack for follow-ups to this issue. GitHub issues will be closed in the coming weeks.