Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[iosApp] org.jetbrains.compose.resources.MissingResourceException with CocoaPods #4720

Closed
GuilhE opened this issue Apr 27, 2024 · 18 comments · Fixed by #4783 or #4900
Closed

[iosApp] org.jetbrains.compose.resources.MissingResourceException with CocoaPods #4720

GuilhE opened this issue Apr 27, 2024 · 18 comments · Fixed by #4783 or #4900
Assignees
Labels
bug Something isn't working ios

Comments

@GuilhE
Copy link
Contributor

GuilhE commented Apr 27, 2024

Describe the bug
I’m using compose 1.6.10-beta02 with compose.components.resources and cocoapods to share the CMP module.
androidApp and desktopApp run fine, but iosApp fails with:

Uncaught Kotlin exception: org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: .../Library/Developer/CoreSimulator/Devices/72BBFDFF-8A49-4E5C-8B31-6D4E15312D29/data/Containers/Bundle/Application/13415EF2-8FB8-40C7-AF7C-3904BACEA495/iosApp.app/compose-resources/composeResources/expressus.shared_ui_compose.generated.resources/font/led_panel_panels_station_on.ttf

I’ve the same setup in another project and it works. It uses XCFramework could it be related?

Affected platforms

  • iOS

Versions

  • Kotlin version*: 2.0.0-RC1
  • Compose Multiplatform version*: 1.6.10-beta02
  • OS version(s)* (required for Desktop and iOS issues): 14.4.1
  • OS architecture (x86 or arm64): arm64
  • Device (model or simulator for iOS issues): simulator

To Reproduce
Steps and/or the code snippet to reproduce the behavior:

  1. Clone https://github.com/GuilhE/Expressus
  2. Run iosApp via AndroidStudio or Xcode (trying to render previews will fail)

Expected behavior
Run without problems like on android and desktop

Screenshots
Screenshot 2024-04-27 at 14 45 09

Additional context
https://github.com/GuilhE/WhosNext has the same setup but uses XCFramework and it works with no problems.

@GuilhE GuilhE added bug Something isn't working submitted labels Apr 27, 2024
@Schahen Schahen added the ios label Apr 29, 2024
@Schahen Schahen removed the submitted label Apr 29, 2024
@GuilhE
Copy link
Contributor Author

GuilhE commented May 1, 2024

Still failing with:

Kotlin 2.0.0-RC2
Compose 1.6.10-beta03
Xcode 15.2.0/15.3.0

@GuilhE GuilhE changed the title [iosApp] org.jetbrains.compose.resources.MissingResourceException [iosApp] org.jetbrains.compose.resources.MissingResourceException with CocoaPods May 1, 2024
@kasem-sm
Copy link

kasem-sm commented May 2, 2024

I'm using regular framework and facing the issue!

@igordmn
Copy link
Collaborator

igordmn commented May 3, 2024

We discovered an issue with upgrading from Kotlin 1.9 to 2.0 (or from 2.0 to 1.9).

You need to remove all build folders in your project, otherwise you'll have MissingResourceException.

Could you try it?

@igordmn igordmn added the wait for reply Further information is requested label May 3, 2024
@GuilhE
Copy link
Contributor Author

GuilhE commented May 3, 2024

@igordmn Unfortunately it doesn't work, I did that when testing (and now again just to double check)

@GuilhE
Copy link
Contributor Author

GuilhE commented May 4, 2024

Still fails with:

Kotlin 2.0.0-RC2
Compose 1.6.10-rc01
Xcode 15.2.0/15.3.0

@igordmn igordmn removed the wait for reply Further information is requested label May 8, 2024
@terrakok
Copy link
Member

terrakok commented May 8, 2024

That is how Cocoapods works: the podspec has a path to resources:

    spec.resources = ['build/compose/ios/SharedComposables/compose-resources']

but before the first build the directory doesn't exist. So, if you call pod install in that state then cocoapods configures the ios project without resources. (it ignores empty directory 🤷 )

To fix the problem you have to:

  1. clone the project
  2. call mkdir -p ./shared-ui-compose/build/compose/ios/SharedComposables/compose-resources to generate a dummy resources dir
  3. call ./gradlew generateDummyFramework to generate dummy frameworks (by the same reason)
  4. reconfigure the xcode project cd ./iosApp and pod install
  5. open the project: open ./iosApp.xcworkspace

@terrakok
Copy link
Member

terrakok commented May 8, 2024

But I see another problem on our side: podspec is being regenerated with a wrong resources path during the project import. I will fix it.

@terrakok
Copy link
Member

terrakok commented May 8, 2024

After the fix the empty directory will be generated automatically.

@terrakok
Copy link
Member

terrakok commented May 8, 2024

Thank you for the report 👍

terrakok added a commit that referenced this issue May 8, 2024
The PR sets a static path to the compose resources for the cocoapods
integration because there maybe only one integration framework for a
gradle module.

Fixes #4720

## Release Notes
### Fixes - Resources
- _(prerelease fix)_ Fix resources with cocoapods integration
terrakok added a commit that referenced this issue May 8, 2024
The PR sets a static path to the compose resources for the cocoapods
integration because there maybe only one integration framework for a
gradle module.

Fixes #4720

## Release Notes
### Fixes - Resources
- _(prerelease fix)_ Fix resources with cocoapods integration

(cherry picked from commit b884678)
@GuilhE
Copy link
Contributor Author

GuilhE commented May 16, 2024

@terrakok Testing with rc03, since rc02 had a regression, and still fails. Any configuration missing?

Uncaught Kotlin exception: org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: /Users/guilhermedelgado/Library/Developer/CoreSimulator/Devices/72BBFDFF-8A49-4E5C-8B31-6D4E15312D29/data/Containers/Bundle/Application/2BE51598-6379-4EA7-BBAC-8852F01C721B/iosApp.app/compose-resources/composeResources/expressus.shared_ui_compose.generated.resources/font/led_panel_panels_station_on.ttf
    at 0   SharedComposables                   0x10a0dc2ab        kfun:kotlin.Throwable#<init>(kotlin.String?){} + 119 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Throwable.kt:28:44)
    at 1   SharedComposables                   0x10a0d59ab        kfun:kotlin.Exception#<init>(kotlin.String?){} + 115 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/Exceptions.kt:23:51)
    at 2   SharedComposables                   0x10a93978f        kfun:org.jetbrains.compose.resources.MissingResourceException#<init>(kotlin.String){} + 175 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceReader.kt:5:48)
    at 3   SharedComposables                   0x10a93b77b        kfun:org.jetbrains.compose.resources.object-2.readData#internal + 499 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/iosMain/kotlin/org/jetbrains/compose/resources/ResourceReader.ios.kt:28:77)
    at 4   SharedComposables                   0x10a93a8db        kfun:org.jetbrains.compose.resources.object-2.read#internal + 367 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/iosMain/kotlin/org/jetbrains/compose/resources/ResourceReader.ios.kt:10:20)
    at 5   SharedComposables                   0x10a93d9f3        kfun:org.jetbrains.compose.resources.ResourceReader#read#suspend(kotlin.String;kotlin.coroutines.Continuation<kotlin.ByteArray>){}kotlin.Any-trampoline + 115 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/commonMain/kotlin/org/jetbrains/compose/resources/ResourceReader.kt:26:13)
    at 6   SharedComposables                   0x10a93d15f        kfun:org.jetbrains.compose.resources.$Font$lambda$3COROUTINE$0.invokeSuspend#internal + 599 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt:37:40)
    at 7   SharedComposables                   0x10a93d53b        kfun:org.jetbrains.compose.resources.Font$lambda$3#internal + 459 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt:35:90)
    at 8   SharedComposables                   0x10a93d773        kfun:org.jetbrains.compose.resources.$Font$lambda$3$FUNCTION_REFERENCE$3.invoke#internal + 147 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt:35:21)
    at 9   SharedComposables                   0x10a1f9e8f        kfun:kotlin.coroutines.SuspendFunction1#invoke#suspend(1:0;kotlin.coroutines.Continuation<1:1>){}kotlin.Any?-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 10  SharedComposables                   0x10a932e37        kfun:org.jetbrains.compose.resources.rememberResourceState$lambda$2#internal + 143 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/blockingMain/kotlin/org/jetbrains/compose/resources/ResourceState.blocking.kt:46:27)
    at 11  SharedComposables                   0x10a932eeb        kfun:org.jetbrains.compose.resources.$rememberResourceState$lambda$2$FUNCTION_REFERENCE$2.invoke#internal + 139 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/blockingMain/kotlin/org/jetbrains/compose/resources/ResourceState.blocking.kt:46:13)
    at 12  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 13  SharedComposables                   0x10a0e4543        kfun:kotlin.coroutines.intrinsics.object-4.invokeSuspend#internal + 731 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/intrinsics/IntrinsicsNative.kt:254:35)
    at 14  SharedComposables                   0x10a1f93ff        kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#invokeSuspend(kotlin.Result<kotlin.Any?>){}kotlin.Any?-trampoline + 67 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationImpl.kt:50:24)
    at 15  SharedComposables                   0x10a0e104b        kfun:kotlin.coroutines.native.internal.BaseContinuationImpl#resumeWith(kotlin.Result<kotlin.Any?>){} + 623 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/kotlin-native/runtime/src/main/kotlin/kotlin/coroutines/ContinuationImpl.kt:30:39)
    at 16  SharedComposables                   0x10a1f94df        kfun:kotlin.coroutines.Continuation#resumeWith(kotlin.Result<1:0>){}-trampoline + 99 (/opt/buildAgent/work/b2e1db4d8d903ca4/kotlin/libraries/stdlib/src/kotlin/coroutines/Continuation.kt:26:12)
    at 17  SharedComposables                   0x10a2d72f3        kfun:kotlinx.coroutines.DispatchedTask#run(){} + 1879 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/internal/DispatchedTask.kt:104:71)
    at 18  SharedComposables                   0x10a304acb        kfun:kotlinx.coroutines.Runnable#run(){}-trampoline + 91 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/Runnable.kt:10:19)
    at 19  SharedComposables                   0x10a2805a7        kfun:kotlinx.coroutines.EventLoopImplBase#processNextEvent(){}kotlin.Long + 1247 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/EventLoop.common.kt:277:44)
    at 20  SharedComposables                   0x10a304817        kfun:kotlinx.coroutines.EventLoop#processNextEvent(){}kotlin.Long-trampoline + 51 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/common/src/EventLoop.common.kt:49:10)
    at 21  SharedComposables                   0x10a2f61cf        kfun:kotlinx.coroutines.BlockingCoroutine.joinBlocking#internal + 435 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/Builders.kt:129:43)
    at 22  SharedComposables                   0x10a2f5033        kfun:kotlinx.coroutines#runBlocking(kotlin.coroutines.CoroutineContext;kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>){0§<kotlin.Any?>}0:0 + 1395 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/Builders.kt:68:26)
    at 23  SharedComposables                   0x10a2f5213        kfun:kotlinx.coroutines#runBlocking$default(kotlin.coroutines.CoroutineContext?;kotlin.coroutines.SuspendFunction1<kotlinx.coroutines.CoroutineScope,0:0>;kotlin.Int){0§<kotlin.Any?>}0:0 + 239 (/opt/buildAgent/work/44ec6e850d5c63f0/kotlinx-coroutines-core/native/src/Builders.kt:45:15)
    at 24  SharedComposables                   0x10a932c4b        kfun:org.jetbrains.compose.resources#rememberResourceState(kotlin.Any;kotlin.Any;kotlin.Any;kotlin.Function0<0:0>;kotlin.coroutines.SuspendFunction1<org.jetbrains.compose.resources.ResourceEnvironment,0:0>;androidx.compose.runtime.Composer?;kotlin.Int){0§<kotlin.Any?>}androidx.compose.runtime.State<0:0> + 1551 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/blockingMain/kotlin/org/jetbrains/compose/resources/ResourceState.blocking.kt:46:13)
    at 25  SharedComposables                   0x10a93c9e3        kfun:org.jetbrains.compose.resources#Font(org.jetbrains.compose.resources.FontResource;androidx.compose.ui.text.font.FontWeight?;androidx.compose.ui.text.font.FontStyle;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){}androidx.compose.ui.text.font.Font + 1475 (/opt/buildAgent/work/3eb902016bd3838/components/resources/library/src/skikoMain/kotlin/org/jetbrains/compose/resources/FontResources.skiko.kt:35:21)
    at 26  SharedComposables                   0x109900553        kfun:com.expressus.compose.themes.<get-ledFontFamily>#internal + 411 
    at 27  SharedComposables                   0x109900adf        kfun:com.expressus.compose.themes#<get-machineTypography>(androidx.compose.runtime.Composer?;kotlin.Int){}androidx.compose.material3.Typography + 1179 
    at 28  SharedComposables                   0x1098fd6ab        kfun:com.expressus.compose.themes#CoffeeSelectorsTheme(kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){} + 1279 
    at 29  SharedComposables                   0x1098ea0e3        kfun:com.expressus.compose.components.rightPanel#CoffeeTile(kotlin.String;kotlin.Boolean;kotlin.Boolean;kotlin.Function0<kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){} + 1787 
    at 30  SharedComposables                   0x1098eb8b7        kfun:com.expressus.compose.components.rightPanel.CoffeeSelectors$lambda$8$lambda$7#internal + 1643 
    at 31  SharedComposables                   0x1098ef3ab        kfun:com.expressus.compose.components.rightPanel.$CoffeeSelectors$lambda$8$lambda$7$FUNCTION_REFERENCE$7.invoke#internal + 171 
    at 32  SharedComposables                   0x1098ef5bf        kfun:com.expressus.compose.components.rightPanel.$CoffeeSelectors$lambda$8$lambda$7$FUNCTION_REFERENCE$7.$<bridge-UNNNNB>invoke(androidx.compose.foundation.lazy.LazyItemScope;androidx.compose.runtime.Composer;kotlin.Int){}#internal + 195 
    at 33  SharedComposables                   0x10a1f9bd7        kfun:kotlin.Function3#invoke(1:0;1:1;1:2){}1:3-trampoline + 123 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 34  SharedComposables                   0x10a43602f        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 635 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:116:22)
    at 35  SharedComposables                   0x10a4442c7        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNNB>invoke(kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 199 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:112:30)
    at 36  SharedComposables                   0x10a1f9bd7        kfun:kotlin.Function3#invoke(1:0;1:1;1:2){}1:3-trampoline + 123 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 37  SharedComposables                   0x10a84f597        kfun:androidx.compose.foundation.lazy.LazyListIntervalContent.item$lambda$2#internal + 695 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListIntervalContent.kt:59:26)
    at 38  SharedComposables                   0x10a84fa23        kfun:androidx.compose.foundation.lazy.LazyListIntervalContent.$item$lambda$2$FUNCTION_REFERENCE$2.invoke#internal + 159 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListIntervalContent.kt:59:24)
    at 39  SharedComposables                   0x10a84fb9b        kfun:androidx.compose.foundation.lazy.LazyListIntervalContent.$item$lambda$2$FUNCTION_REFERENCE$2.$<bridge-UNNNBNB>invoke(androidx.compose.foundation.lazy.LazyItemScope;kotlin.Int;androidx.compose.runtime.Composer;kotlin.Int){}#internal + 239 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListIntervalContent.kt:59:24)
    at 40  SharedComposables                   0x10a206373        kfun:kotlin.Function4#invoke(1:0;1:1;1:2;1:3){}1:4-trampoline + 131 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 41  SharedComposables                   0x10a4363d3        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(kotlin.Any?;kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 679 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:137:22)
    at 42  SharedComposables                   0x10a4443e7        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNNNB>invoke(kotlin.Any?;kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(kotlin.Any?;kotlin.Any?;androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 235 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:133:30)
    at 43  SharedComposables                   0x10a206373        kfun:kotlin.Function4#invoke(1:0;1:1;1:2;1:3){}1:4-trampoline + 131 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 44  SharedComposables                   0x10a856317        kfun:androidx.compose.foundation.lazy.LazyListItemProviderImpl.Item$lambda$0#internal + 839 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt:79:25)
    at 45  SharedComposables                   0x10a8564fb        kfun:androidx.compose.foundation.lazy.LazyListItemProviderImpl.$Item$lambda$0$FUNCTION_REFERENCE$3.invoke#internal + 119 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt:77:63)
    at 46  SharedComposables                   0x10a85663f        kfun:androidx.compose.foundation.lazy.LazyListItemProviderImpl.$Item$lambda$0$FUNCTION_REFERENCE$3.$<bridge-UNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}#internal + 159 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt:77:63)
    at 47  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 48  SharedComposables                   0x10a435cd3        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 603 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:107:22)
    at 49  SharedComposables                   0x10a4441cb        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:103:30)
    at 50  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 51  SharedComposables                   0x10a345e1b        kfun:androidx.compose.runtime#CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<*>;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){} + 595 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionLocal.kt:248:5)
    at 52  SharedComposables                   0x10a8a8d47        kfun:androidx.compose.foundation.lazy.layout#LazyLayoutPinnableItem(kotlin.Any?;kotlin.Int;androidx.compose.foundation.lazy.layout.LazyLayoutPinnedItemList;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){} + 2527 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem.kt:58:5)
    at 53  SharedComposables                   0x10a85586b        kfun:androidx.compose.foundation.lazy.LazyListItemProviderImpl.Item#internal + 747 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListItemProvider.kt:77:9)
    at 54  SharedComposables                   0x10a924f97        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutItemProvider#Item(kotlin.Int;kotlin.Any;androidx.compose.runtime.Composer?;kotlin.Int){}-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemProvider.kt:44:5)
    at 55  SharedComposables                   0x10a8a4957        kfun:androidx.compose.foundation.lazy.layout.SkippableItem$lambda$0#internal + 535 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:136:22)
    at 56  SharedComposables                   0x10a8a4b5b        kfun:androidx.compose.foundation.lazy.layout.$SkippableItem$lambda$0$FUNCTION_REFERENCE$2.invoke#internal + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:135:64)
    at 57  SharedComposables                   0x10a8a4cc7        kfun:androidx.compose.foundation.lazy.layout.$SkippableItem$lambda$0$FUNCTION_REFERENCE$2.$<bridge-UNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}#internal + 159 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:135:64)
    at 58  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 59  SharedComposables                   0x10a435cd3        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 603 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:107:22)
    at 60  SharedComposables                   0x10a4441cb        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:103:30)
    at 61  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 62  SharedComposables                   0x10a345e1b        kfun:androidx.compose.runtime#CompositionLocalProvider(androidx.compose.runtime.ProvidedValue<*>;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){} + 595 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionLocal.kt:248:5)
    at 63  SharedComposables                   0x10a03f71b        kfun:androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider#internal + 2247 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/SaveableStateHolder.kt:84:13)
    at 64  SharedComposables                   0x10a043eb7        kfun:androidx.compose.runtime.saveable.SaveableStateHolder#SaveableStateProvider(kotlin.Any;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){}-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/SaveableStateHolder.kt:47:5)
    at 65  SharedComposables                   0x10a8afd2b        kfun:androidx.compose.foundation.lazy.layout.LazySaveableStateHolder.SaveableStateProvider#internal + 823 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazySaveableStateHolder.kt:85:14)
    at 66  SharedComposables                   0x10a043eb7        kfun:androidx.compose.runtime.saveable.SaveableStateHolder#SaveableStateProvider(kotlin.Any;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int){}-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime-saveable/src/commonMain/kotlin/androidx/compose/runtime/saveable/SaveableStateHolder.kt:47:5)
    at 67  SharedComposables                   0x10a8a45fb        kfun:androidx.compose.foundation.lazy.layout.SkippableItem#internal + 1463 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:135:31)
    at 68  SharedComposables                   0x10a8a3a4b        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory.CachedItemContent.createContentLambda$lambda$1#internal + 2059 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:102:17)
    at 69  SharedComposables                   0x10a8a3cf7        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory.CachedItemContent.$createContentLambda$lambda$1$FUNCTION_REFERENCE$0.invoke#internal + 119 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:92:57)
    at 70  SharedComposables                   0x10a8a3e4b        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutItemContentFactory.CachedItemContent.$createContentLambda$lambda$1$FUNCTION_REFERENCE$0.$<bridge-UNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}#internal + 159 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory.kt:92:57)
    at 71  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 72  SharedComposables                   0x10a435cd3        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 603 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:107:22)
    at 73  SharedComposables                   0x10a4441cb        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:103:30)
    at 74  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 75  SharedComposables                   0x10a600a7b        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose$lambda$0#internal + 827 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:478:61)
    at 76  SharedComposables                   0x10a60261b        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.$subcompose$lambda$0$FUNCTION_REFERENCE$7.invoke#internal + 119 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:477:34)
    at 77  SharedComposables                   0x10a60276f        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.$subcompose$lambda$0$FUNCTION_REFERENCE$7.$<bridge-UNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}#internal + 159 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:477:34)
    at 78  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 79  SharedComposables                   0x10a435cd3        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any? + 603 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:107:22)
    at 80  SharedComposables                   0x10a4441cb        kfun:androidx.compose.runtime.internal.ComposableLambdaImpl#$<bridge-NNNNB>invoke(androidx.compose.runtime.Composer;kotlin.Int){}kotlin.Any?(androidx.compose.runtime.Composer;kotlin.Any?){}kotlin.Any? + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/jbMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.jb.kt:103:30)
    at 81  SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 82  SharedComposables                   0x10a4484bf        kfun:androidx.compose.runtime#invokeComposable(androidx.compose.runtime.Composer;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){} + 215 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/nativeMain/kotlin/androidx/compose/runtime/Composer.native.kt:24:5)
    at 83  SharedComposables                   0x10a328767        kfun:androidx.compose.runtime.ComposerImpl.doCompose#internal + 1835 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt:3303:25)
    at 84  SharedComposables                   0x10a327b9b        kfun:androidx.compose.runtime.ComposerImpl#composeContent(androidx.compose.runtime.collection.IdentityArrayMap<androidx.compose.runtime.RecomposeScopeImpl,androidx.compose.runtime.collection.IdentityArraySet<kotlin.Any>?>;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){} + 327 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt:3236:9)
    at 85  SharedComposables                   0x10a335cc3        kfun:androidx.compose.runtime.CompositionImpl#composeContent(kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){} + 887 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt:725:30)
    at 86  SharedComposables                   0x10a44d297        kfun:androidx.compose.runtime.ControlledComposition#composeContent(kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}-trampoline + 99 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt:183:5)
    at 87  SharedComposables                   0x10a35a30b        kfun:androidx.compose.runtime.Recomposer#composeInitial(androidx.compose.runtime.ControlledComposition;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){} + 767 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt:1071:29)
    at 88  SharedComposables                   0x10a44c5f3        kfun:androidx.compose.runtime.CompositionContext#composeInitial(androidx.compose.runtime.ControlledComposition;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}-trampoline + 67 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt:<unknown>)
    at 89  SharedComposables                   0x10a32ae9b        kfun:androidx.compose.runtime.ComposerImpl.CompositionContextImpl.composeInitial#internal + 195 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt:3600:27)
    at 90  SharedComposables                   0x10a44c5f3        kfun:androidx.compose.runtime.CompositionContext#composeInitial(androidx.compose.runtime.ControlledComposition;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}-trampoline + 67 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionContext.kt:<unknown>)
    at 91  SharedComposables                   0x10a33509b        kfun:androidx.compose.runtime.CompositionImpl.composeInitial#internal + 423 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt:633:16)
    at 92  SharedComposables                   0x10a334ddb        kfun:androidx.compose.runtime.CompositionImpl#setContent(kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){} + 95 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt:619:9)
    at 93  SharedComposables                   0x10a44d113        kfun:androidx.compose.runtime.ReusableComposition#setContent(kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}-trampoline + 99 (/opt/buildAgent/work/8a20760945d0aeba/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt:91:1)
    at 94  SharedComposables                   0x10a5fa60f        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcomposeInto#internal + 419 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:500:21)
    at 95  SharedComposables                   0x10a5fa2bb        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose#internal.28 + 1091 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:472:41)
    at 96  SharedComposables                   0x10a5f9e37        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.subcompose#internal + 935 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:463:13)
    at 97  SharedComposables                   0x10a5f996b        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState#subcompose(kotlin.Any?;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}kotlin.collections.List<androidx.compose.ui.layout.Measurable> + 2567 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:447:9)
    at 98  SharedComposables                   0x10a5feabb        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.Scope.subcompose#internal + 135 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:872:49)
    at 99  SharedComposables                   0x10a7910fb        kfun:androidx.compose.ui.layout.SubcomposeMeasureScope#subcompose(kotlin.Any?;kotlin.Function2<androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>){}kotlin.collections.List<androidx.compose.ui.layout.Measurable>-trampoline + 115 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:154:5)
    at 100 SharedComposables                   0x10a8a6dc7        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScopeImpl#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List<androidx.compose.ui.layout.Placeable> + 775 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope.kt:125:54)
    at 101 SharedComposables                   0x10a921e67        kfun:androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope#measure(kotlin.Int;androidx.compose.ui.unit.Constraints){}kotlin.collections.List<androidx.compose.ui.layout.Placeable>-trampoline + 115 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope.kt:62:5)
    at 102 SharedComposables                   0x10a86014f        kfun:androidx.compose.foundation.lazy.LazyListMeasuredItemProvider#getAndMeasure(kotlin.Int){}androidx.compose.foundation.lazy.LazyListMeasuredItem + 395 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasuredItemProvider.kt:48:39)
    at 103 SharedComposables                   0x10a857b73        kfun:androidx.compose.foundation.lazy#measureLazyList(kotlin.Int;androidx.compose.foundation.lazy.LazyListMeasuredItemProvider;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Int;kotlin.Float;androidx.compose.ui.unit.Constraints;kotlin.Boolean;kotlin.collections.List<kotlin.Int>;androidx.compose.foundation.layout.Arrangement.Vertical?;androidx.compose.foundation.layout.Arrangement.Horizontal?;kotlin.Boolean;androidx.compose.ui.unit.Density;androidx.compose.foundation.lazy.LazyListItemAnimator + 3127 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListMeasure.kt:195:53)
    at 104 SharedComposables                   0x10a84b44b        kfun:androidx.compose.foundation.lazy.rememberLazyListMeasurePolicy$lambda$3#internal + 4559 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt:313:9)
    at 105 SharedComposables                   0x10a84c08f        kfun:androidx.compose.foundation.lazy.$rememberLazyListMeasurePolicy$lambda$3$FUNCTION_REFERENCE$2.invoke#internal + 187 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt:178:5)
    at 106 SharedComposables                   0x10a84c34f        kfun:androidx.compose.foundation.lazy.$rememberLazyListMeasurePolicy$lambda$3$FUNCTION_REFERENCE$2.$<bridge-NNNNB>invoke(androidx.compose.foundation.lazy.layout.LazyLayoutMeasureScope;androidx.compose.ui.unit.Constraints){}androidx.compose.foundation.lazy.LazyListMeasureResult#internal + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt:178:5)
    at 107 SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 108 SharedComposables                   0x10a897493        kfun:androidx.compose.foundation.lazy.layout.LazyLayout$lambda$4$lambda$3#internal + 359 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt:107:25)
    at 109 SharedComposables                   0x10a898933        kfun:androidx.compose.foundation.lazy.layout.$LazyLayout$lambda$4$lambda$3$FUNCTION_REFERENCE$5.invoke#internal + 127 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt:100:17)
    at 110 SharedComposables                   0x10a898aab        kfun:androidx.compose.foundation.lazy.layout.$LazyLayout$lambda$4$lambda$3$FUNCTION_REFERENCE$5.$<bridge-NNNNB>invoke(androidx.compose.ui.layout.SubcomposeMeasureScope;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult#internal + 163 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/layout/LazyLayout.kt:100:17)
    at 111 SharedComposables                   0x10a1f9ae3        kfun:kotlin.Function2#invoke(1:0;1:1){}1:2-trampoline + 115 (/Users/teamcity/.gradle/daemon/8.4/[K][Suspend]Functions:1:1)
    at 112 SharedComposables                   0x10a6012af        kfun:androidx.compose.ui.layout.LayoutNodeSubcompositionsState.object-1.measure#internal + 1067 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/SubcomposeLayout.kt:709:40)
    at 113 SharedComposables                   0x10a78f6bf        kfun:androidx.compose.ui.layout.MeasurePolicy#measure__at__androidx.compose.ui.layout.MeasureScope(kotlin.collections.List<androidx.compose.ui.layout.Measurable>;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/MeasurePolicy.kt:88:5)
    at 114 SharedComposables                   0x10a61a6a7        kfun:androidx.compose.ui.node.InnerNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 875 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/InnerNodeCoordinator.kt:126:13)
    at 115 SharedComposables                   0x10a782803        kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Measurable.kt:30:5)
    at 116 SharedComposables                   0x10a7c1d9b        kfun:androidx.compose.foundation.layout.OffsetPxNode.measure#internal + 203 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Offset.kt:245:36)
    at 117 SharedComposables                   0x10a794b77        kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt:65:5)
    at 118 SharedComposables                   0x10a621afb        kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNodeCoordinator.kt:116:21)
    at 119 SharedComposables                   0x10a782803        kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Measurable.kt:30:5)
    at 120 SharedComposables                   0x10a5b159b        kfun:androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure#internal + 203 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/graphics/GraphicsLayerModifier.kt:646:36)
    at 121 SharedComposables                   0x10a794b77        kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt:65:5)
    at 122 SharedComposables                   0x10a621afb        kfun:androidx.compose.ui.node.LayoutModifierNodeCoordinator#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable + 931 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNodeCoordinator.kt:116:21)
    at 123 SharedComposables                   0x10a782803        kfun:androidx.compose.ui.layout.Measurable#measure(androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.Placeable-trampoline + 107 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/layout/Measurable.kt:30:5)
    at 124 SharedComposables                   0x10a7c55fb        kfun:androidx.compose.foundation.layout.PaddingNode.measure#internal + 487 (/opt/buildAgent/work/8a20760945d0aeba/compose/foundation/foundation-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Padding.kt:397:36)
    at 125 SharedComposables                   0x10a794b77        kfun:androidx.compose.ui.node.LayoutModifierNode#measure__at__androidx.compose.ui.layout.MeasureScope(androidx.compose.ui.layout.Measurable;androidx.compose.ui.unit.Constraints){}androidx.compose.ui.layout.MeasureResult-trampoline + 123 (/opt/buildAgent/work/8a20760945d0aeba/compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/node/LayoutModifierNode.kt:65:5)

@terrakok
Copy link
Member

Did you run "pod install" and reopen xcworkspace?

@GuilhE
Copy link
Contributor Author

GuilhE commented May 16, 2024

Did you run "pod install" and reopen xcworkspace?

My bad, forgot it, after a pod install it works 😉

terrakok added a commit that referenced this issue May 31, 2024
…dInstall" (#4900)

By mistake the generation resources directory was linked to "podInstall"
task instead "podspec".

Fixes #4720

## Testing
- create a new Compose App project with an iOS integration via Cocoapods
 - add some multiplatform resources
 - clean all caches and build dirs
 - call "pod install"
 - check that first run of the iOS app works fine

## Release Notes
### Fixes - Resources
- Create an empty resource dir with "podspec" task instead "podInstall"
@yuroyami
Copy link

yuroyami commented Aug 7, 2024

A quick and effective workaround I discovered involves toggling the isStatic boolean within the framework lambda. Essentially, if it's true (which is the default if you haven't explicitly set it), switch it to false, and if it's false, switch it to true. Then, sync the project. Once the sync is complete, the [CP] Copy Pods resources will be generated. After that, you can revert isStatic to its original value.

cocoapods {
        summary = "Some description for the Shared Module"
        homepage = "Link to the Shared Module homepage"
        version = "1.0"
        ios.deploymentTarget = "14.0"
        podfile = project.file("../iosApp/Podfile")

        framework {
            baseName = "shared"
            isStatic = true <-- toggle this, sync, then bring it back to its original state
        }

@okushnikov
Copy link
Collaborator

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

@tamimattafi
Copy link

Hello @terrakok!
I'm still having this issue on Kotlin 2.0.20 and CMP 1.7.0-beta02.

When I build Android, everything works as expected. However, iOS does crash due to missing resources.

Uncaught Kotlin exception: org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: ..../drawable/icon.xml

This crash goes away if I close Xcode, run pod install, then open the workspace again (As you mentioned here).

But this solution with pod install isn't consistent, as it gets altered once I open Android Studio and do some operations that require clean and sync tasks.

My resources are in a separate module <root>:presentation:resources, which has CMP plugin applied, this module is used inside <root>:app:composeApp, which is my shared module. It's linked to iosApp using CocoaPods (As a dynamic framework, isStatic = false)

I started facing this issue when I upgraded from Kotlin 1.9.24 and CMP 1.6.11. I used to have a script in Build Phase to copy resources, and it worked just fine. But I removed this script as I suppose multimodule support is now available since 2.0, and it became redundant.

Is there something I might have missed during migration?

@GuilhE
Copy link
Contributor Author

GuilhE commented Sep 26, 2024

@tamimattafi I believe I have a sample with similar setup. Check it if you can run iosApp by following this instructions.

@terrakok
Copy link
Member

Could you share a reproducer project on the youtrack, please?

@tamimattafi
Copy link

@GuilhE Thank you for the sample. I tried to reproduce the crash, but it doesn't happen, even If I run the project without the instructions.
@terrakok I will investigate more on the issue, since the sample app doesn't crash, it's probably an issue with my project's configuration. I will also try to create a reproducer If I don't come to a solution.

@JetBrains JetBrains locked and limited conversation to collaborators Sep 26, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working ios
Projects
None yet
8 participants