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
15.38k stars 1.12k forks source link

[Component.Resources] generateComposeResClass fails with an exception #4073

Closed yuroyami closed 5 months ago

yuroyami commented 6 months ago

Kotlin: 1.9.21 and 2.0.0-Beta1 Compose: 1.6.0-dev1350 and 1.6.0-dev1347

I have several projects where resource generation seems to be working fine (I put all my resources in a composeRes folder under resources, each under their respective type, be it font drawable or values).

But for this specific project, I am not sure whether this is an issue in my Android Studio (latest Hedgehog) or the compose plugin. But it seems that the plugin is never able to generate the resources in my project and it keeps creating a blank Res.kt with nothing in it, after throwing the following exception stacktrace (it's worth noting that Android Studio keeps complaining about my project having "duplicate content roots" on my resources folder, but I haven't declared my resources to be a content root anywhere, so I don't even know why it's doing that)

> > GenerateResClassTask was failed: > java.util.NoSuchElementException: Char sequence is empty. > at kotlin.text.StringsKt___StringsKt.first(_Strings.kt:72) > at com.squareup.kotlinpoet.UtilKt.escapeIfNotJavaIdentifier(Util.kt:298) > at com.squareup.kotlinpoet.UtilKt.escapeIfNecessary(Util.kt:282) > at com.squareup.kotlinpoet.UtilKt.escapeIfNecessary$default(Util.kt:282) > at com.squareup.kotlinpoet.CodeBlock$Builder.addArgument(CodeBlock.kt:344) > at com.squareup.kotlinpoet.CodeBlock$Builder.add(CodeBlock.kt:320) > at com.squareup.kotlinpoet.CodeBlock$Companion.of(CodeBlock.kt:481) > at com.squareup.kotlinpoet.CodeWriter.emitCode(CodeWriter.kt:235) > at com.squareup.kotlinpoet.PropertySpec.emit$kotlinpoet(PropertySpec.kt:94) > at com.squareup.kotlinpoet.PropertySpec.emit$kotlinpoet$default(PropertySpec.kt:65) > at com.squareup.kotlinpoet.TypeSpec.emit$kotlinpoet(TypeSpec.kt:286) > at com.squareup.kotlinpoet.TypeSpec.emit$kotlinpoet(TypeSpec.kt:319) > at com.squareup.kotlinpoet.TypeSpec.emit$kotlinpoet$default(TypeSpec.kt:108) > at com.squareup.kotlinpoet.FileSpec.emit(FileSpec.kt:170) > at com.squareup.kotlinpoet.FileSpec.access$emit(FileSpec.kt:46) > at com.squareup.kotlinpoet.FileSpec$writeTo$codeWriter$1.invoke(FileSpec.kt:68) > at com.squareup.kotlinpoet.FileSpec$writeTo$codeWriter$1.invoke(FileSpec.kt:64) > at com.squareup.kotlinpoet.CodeWriter$Companion.withCollectedImports(CodeWriter.kt:708) > at com.squareup.kotlinpoet.FileSpec.writeTo(FileSpec.kt:64) > at com.squareup.kotlinpoet.FileSpec.writeTo(FileSpec.kt:90) > at com.squareup.kotlinpoet.FileSpec.writeTo(FileSpec.kt:95) > at org.jetbrains.compose.resources.GenerateResClassTask.generate(GenerateResClassTask.kt:53) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) > at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) > at java.base/java.lang.reflect.Method.invoke(Unknown Source) > at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125) > at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58) > at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51) > at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29) > at org.gradle.api.internal.tasks.execution.TaskExecution$3.run(TaskExecution.java:248) > at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29) > at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47) > at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:73) > at org.gradle.api.internal.tasks.execution.TaskExecution.executeAction(TaskExecution.java:233) > at org.gradle.api.internal.tasks.execution.TaskExecution.executeActions(TaskExecution.java:216) > at org.gradle.api.internal.tasks.execution.TaskExecution.executeWithPreviousOutputFiles(TaskExecution.java:199) > at org.gradle.api.internal.tasks.execution.TaskExecution.execute(TaskExecution.java:166) > at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:105) > at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:44) > at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:59) > at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:56) > at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) > at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) > at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:78) > at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:56) > at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:44) > at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:67) > at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:37) > at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41) > at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74) > at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55) > at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:50) > at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:28) > at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.executeDelegateBroadcastingChanges(CaptureStateAfterExecutionStep.java:100) > at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:72) > at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:50) > at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:40) > at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:29) > at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:179) > at org.gradle.internal.execution.steps.BuildCacheStep.lambda$execute$1(BuildCacheStep.java:70) > at org.gradle.internal.Either$Right.fold(Either.java:175) > at org.gradle.internal.execution.caching.CachingState.fold(CachingState.java:59) > at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:68) > at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:46) > at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:36) > at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:25) > at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36) > at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22) > at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:91) > at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$2(SkipUpToDateStep.java:55) > at java.base/java.util.Optional.orElseGet(Unknown Source) > at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55) > at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:37) > at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:65) > at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:36) > at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37) > at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27) > at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:77) > at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:38) > at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:108) > at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:55) > at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:71) > at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:45) > at org.gradle.internal.execution.steps.SkipEmptyWorkStep.executeWithNonEmptySources(SkipEmptyWorkStep.java:177) > at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:81) > at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:53) > at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:32) > at org.gradle.internal.execution.steps.RemoveUntrackedExecutionStateStep.execute(RemoveUntrackedExecutionStateStep.java:21) > at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38) > at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:36) > at org.gradle.internal.execution.steps.LoadPreviousExecutionStateStep.execute(LoadPreviousExecutionStateStep.java:23) > at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:75) > at org.gradle.internal.execution.steps.CleanupStaleOutputsStep.execute(CleanupStaleOutputsStep.java:41) > at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.lambda$execute$2(ExecuteWorkBuildOperationFiringStep.java:66) > at java.base/java.util.Optional.orElseGet(Unknown Source) > at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:66) > at org.gradle.internal.execution.steps.ExecuteWorkBuildOperationFiringStep.execute(ExecuteWorkBuildOperationFiringStep.java:38) > at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:32) > at org.gradle.api.internal.tasks.execution.TaskExecution$4.withWorkspace(TaskExecution.java:293) > at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30) > at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:21) > at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37) > at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27) > at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:47) > at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:34) > at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:64) > at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:145) > at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:134) > at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) > at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51) > at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) > at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:74) > at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) > at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77) > at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55) > at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) > at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) > at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66) > at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157) > at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59) > at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:53) > at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:78) > at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) > at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:42) > at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:331) > at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:318) > at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.lambda$execute$0(DefaultTaskExecutionGraph.java:314) > at org.gradle.internal.operations.CurrentBuildOperationRef.with(CurrentBuildOperationRef.java:80) > at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:314) > at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:303) > at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:463) > at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:380)

I tried to create another compose multiplatform project using the wizard, and I copied the same resources to the new project as well as the same dependencies but no code literally, I kept the build.gradle.kts as is, I just copied the dependencies, but apparently the problem happened again. I am thinking maybe one of the dependencies is clashing with one another or something. Here's my build.gradle.kts :

```kotlin plugins { id("org.jetbrains.kotlin.multiplatform") id("org.jetbrains.kotlin.native.cocoapods") id("com.android.application") id("org.jetbrains.compose") kotlin("plugin.serialization") } kotlin { androidTarget { compilations.all { kotlinOptions { jvmTarget = "1.8" } } } iosX64() iosArm64() iosSimulatorArm64() cocoapods { summary = "Common Code" homepage = "." version = "1.0.0" ios.deploymentTarget = "14.0" podfile = project.file("../iosApp/Podfile") framework { baseName = "ComposeApp" isStatic = true } } sourceSets { all { languageSettings { optIn("kotlin.RequiresOptIn") optIn("kotlinx.cinterop.ExperimentalForeignApi") optIn("kotlin.experimental.ExperimentalNativeApi") optIn("org.jetbrains.compose.resources.ExperimentalResourceApi") optIn("androidx.compose.material3.ExperimentalMaterial3Api") } } val ktor = "3.0.0-beta-1" val commonMain by getting { /** Multiplatform dependencies */ dependencies { api("org.jetbrains.kotlinx:kotlinx-io-core:0.3.0") implementation("io.github.alexzhirkevich:qrose:1.0.0-beta02") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3") implementation("io.ktor:ktor-client-core:$ktor") /* TCP Networking */ implementation("io.ktor:ktor-network:$ktor") val datastore = "1.1.0-alpha07" api("androidx.datastore:datastore-preferences-core:$datastore") api("androidx.datastore:datastore-core-okio:$datastore") /* Compose multiplatform */ implementation(compose.runtime) implementation(compose.foundation) implementation(compose.material3) implementation(compose.materialIconsExtended) implementation(compose.uiUtil) @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) implementation(compose.components.resources) /* Navigation */ val voyagerVersion = "1.1.0-alpha01" implementation("cafe.adriel.voyager:voyager-navigator:$voyagerVersion") } } val androidMain by getting { dependencies { api("com.google.android.gms:play-services-nearby:19.1.0") implementation("io.ktor:ktor-client-android:$ktor") implementation("com.airbnb.android:lottie-compose:6.2.0") implementation("com.google.code.gson:gson:2.10.1") api("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.7.3") api("androidx.core:core-ktx:1.12.0") api("androidx.appcompat:appcompat:1.7.0-alpha03") api("androidx.documentfile:documentfile:1.0.1") /* Managing Scoped Storage */ api("androidx.core:core-splashscreen:1.1.0-alpha02") api("androidx.preference:preference-ktx:1.2.1") api("androidx.activity:activity-compose:1.8.2") val media3 = "1.2.0" api("androidx.media3:media3-exoplayer:$media3") api("androidx.media3:media3-exoplayer-workmanager:$media3") api("androidx.media3:media3-ui:$media3") api("androidx.media3:media3-session:$media3") api("androidx.media3:media3-extractor:$media3") api("androidx.media3:media3-decoder:$media3") api("androidx.media3:media3-datasource:$media3") api("androidx.media3:media3-common:$media3") } } } } android { namespace = "com.exampleapp" compileSdk = 34 sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") sourceSets["main"].res.srcDirs("src/androidMain/res") sourceSets["main"].resources.srcDirs("src/commonMain/resources") defaultConfig { applicationId = "com.exampleapp.android" minSdk = 24 targetSdk = 34 versionCode = 1000008006 versionName = "0.8.6" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" pickFirsts += "META-INF/INDEX.LIST" } } buildTypes { getByName("release") { isMinifyEnabled = false } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } ```
terrakok commented 6 months ago

I guess the problem is inside your resource file names. Could you provide a file name's list (e.g. with the tree tool):

> cd ./src/commonMain/resources
> tree
.
├── dir
│   └── img.png
└── img.webp

2 directories, 2 files
yuroyami commented 6 months ago

@terrakok The issue occurred again even when I had 1 resource (a single font Bahidj-Regular.ttf).

Anyway, here's what I got:

mac@MACs-MacBook-Air MusicPlayerKMM % cd ./shared/src/commonMain/resources
mac@MACs-MacBook-Air resources % tree
.
├── assets
│   ├── daynight_toggle.json
│   ├── gesture_2_finger_drag.json
│   ├── gesture_double_tap.json
│   ├── gesture_horizontal_drag.json
│   ├── gesture_indicator_swipe_left.json
│   ├── gesture_indicator_swipe_right.json
│   ├── gesture_long_press.json
│   ├── gesture_pinch_in.json
│   ├── gesture_pinch_out.json
│   ├── gesture_swipe_right.json
│   ├── gesture_swipe_up.json
│   ├── gesture_tap.json
│   ├── onboarding_up_arrow.json
│   ├── permission.json
│   └── playing_waveform.json
└── composeRes
   ├── drawable
    │   ├── default_art.png
    │   ├── ic_track.png
    │   ├── icon_cd_fill.xml
    │   ├── icon_cd_outline.xml
    │   ├── icon_musicnote_fill.xml
    │   ├── icon_musicnote_outline.xml
    │   ├── icon_star_fill.xml
    │   ├── icon_star_outline.xml
    │   ├── logo_day.png
    │   ├── logo_night.png
    │   ├── p2p_android.png
    │   └── p2p_apple.png
    └── font
        ├── Bahidj-Regular.ttf
        ├── Directive4-Regular.otf
        └── Inter-Regular.otf

5 directories, 30 files

I am not knowledgeable when it comes to command lines, but doing cd ./src/commonMain/resources in Android Studio's terminal echoes no such file or directory.

terrakok commented 6 months ago

If it reproduces in a simple project, could you share the project? It will help a lot!)

terrakok commented 5 months ago

The new version was released. Feel free to reopen the issue if it reproduces again