moko-resources
moko-resources copied to clipboard
Expected object 'MR' has no actual declaration in module <composeApp_debug> for JVM
Hi, so, I've just
- created a new CMP project with the wizard ( https://kmp.jetbrains.com )
- added moko resources to composeApp build.gradle
- added a font to composeApp/src/commonMain/resources/MR/fonts
- synchronised ( no errors )
- then run composeApp
- and get. ...
Expected object 'MR' has no actual declaration in module <composeApp_debug> for JVM
The MR file has been generated I assume by the plugin, but something is up ??
It would be great if anyone could shine some light on this?
/Stephen.
Here's my files:
import org.jetbrains.compose.ExperimentalComposeLibrary
import org.jetbrains.compose.desktop.application.dsl.TargetFormat
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.jetbrainsCompose)
alias(libs.plugins.multiplatformResources)
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
sourceSets {
androidMain.dependencies {
implementation(libs.compose.ui.tooling.preview)
implementation(libs.androidx.activity.compose)
}
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
@OptIn(ExperimentalComposeLibrary::class)
implementation(compose.components.resources)
// resources
implementation(libs.moko.resources)
implementation(libs.moko.resources.compose)
}
}
multiplatformResources {
multiplatformResourcesPackage = "sw.test.resources" // required
multiplatformResourcesSourceSet = "commonMain" // optional, default "commonMain"
}
}
android {
namespace = "sw.test"
compileSdk = libs.versions.android.compileSdk.get().toInt()
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
sourceSets["main"].res.srcDirs("src/androidMain/res")
sourceSets["main"].resources.srcDirs("src/commonMain/resources")
defaultConfig {
applicationId = "sw.test"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = 1
versionName = "1.0"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
buildTypes {
getByName("release") {
isMinifyEnabled = false
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
dependencies {
debugImplementation(libs.compose.ui.tooling)
}
}
package ResourceTest.composeApp
import dev.icerock.moko.resources.AssetResource
import dev.icerock.moko.resources.ColorResource
import dev.icerock.moko.resources.FileResource
import dev.icerock.moko.resources.FontResource
import dev.icerock.moko.resources.ImageResource
import dev.icerock.moko.resources.PluralsResource
import dev.icerock.moko.resources.ResourceContainer
import dev.icerock.moko.resources.StringResource
public expect object MR {
public object strings : ResourceContainer<StringResource>
public object plurals : ResourceContainer<PluralsResource>
public object images : ResourceContainer<ImageResource>
public object fonts : ResourceContainer<FontResource> {
public object Interstate {
public val regularCondensed: FontResource
}
}
public object files : ResourceContainer<FileResource>
public object colors : ResourceContainer<ColorResource>
public object assets : ResourceContainer<AssetResource>
}
Hello @maitriyogin !
I was facing the same problem that you, what worked for me is putting this to the top of sourceSets:
sourceSets {
getByName("androidMain").dependsOn(commonMain.get())
getByName("desktopMain").dependsOn(commonMain.get())
getByName("iosArm64Main").dependsOn(commonMain.get())
getByName("iosX64Main").dependsOn(commonMain.get())
getByName("iosSimulatorArm64Main").dependsOn(commonMain.get())
... }
I was facing the same problem that you, what worked for me is putting this to the top of sourceSets:
It really did help. I don't know how many time I lost trying to connect this library and your soultion really did the job
PS: But i crashed another part of my App. First I had error that there's not actual class for iOS. Somehow I managed it. But after that I started getting and error that there's not drawable resource. Maybe it's because I didn't use drawables of moco but used shared resources provided by KMM.
should be fixed in 0.24.0-beta-1