I am building the KMP app on Android Studio, Meerkat Feature Drop | 2024.3.2 Patch 1. Using Cocoapods to run Google Maps in IOS. App works fine on an Android device when I run it in Xcode(iosApp.xcworkspace), I get this error -
> Task :composeApp:cinteropGoogleMapsIosSimulatorArm64 FAILED
e: KLIB resolver: Could not find "org.jetbrains.androidx.savedstate:savedstate" in [/Users/abc/Downloads/railwayApp/composeApp, /Users/abc/.konan/kotlin-native-prebuilt-macos-aarch64-2.1.21/klib/common, /Users/abc/.konan/kotlin-native-prebuilt-macos-aarch64-2.1.21/klib/platform/ios_simulator_arm64]
error: Process 'command '/Users/abc/Library/Java/JavaVirtualMachines/ms-17.0.15/Contents/Home/bin/java'' finished with non-zero exit value 1
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':composeApp:cinteropGoogleMapsIosSimulatorArm64'.
> Process 'command '/Users/abc/Library/Java/JavaVirtualMachines/ms-17.0.15/Contents/Home/bin/java'' finished with non-zero exit value 1
When I remove this dependency from the common main implementation(libs.koin.compose.viewmodel) it works fine.
ComposeApp/Shared build.gradle -
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidApplication)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
alias(libs.plugins.kotlinCocoapods)
}
kotlin {
androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "ComposeApp"
isStatic = true
}
}
kotlin {
cocoapods {
// Required properties
// Specify the required Pod version here
// Otherwise, the Gradle project version is used
version = "1.0"
summary = "Some description for a Kotlin/Native module"
homepage = "Link to a Kotlin/Native module homepage"
// Optional properties
// Configure the Pod name here instead of changing the Gradle project name
name = "composeApp"
ios.deploymentTarget = "18"
framework {
// Required properties
// Framework name configuration. Use this property instead of deprecated 'frameworkName'
baseName = "composeApp"
// Optional properties
// Specify the framework linking type. It's dynamic by default.
isStatic = false
// Dependency export
// Uncomment and specify another project module if you have one:
// export(project(":<your other KMP module>"))
transitiveExport = false // This is default.
}
pod("GoogleMaps") {
version = "10.0.0"
extraOpts += listOf("-compiler-option", "-fmodules")
}
// Maps custom Xcode configuration to NativeBuildType
xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = NativeBuildType.DEBUG
xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = NativeBuildType.RELEASE
}
}
sourceSets {
androidMain.dependencies {
implementation(compose.preview)
implementation(libs.androidx.activity.compose)
implementation(libs.koin.android)
implementation(libs.koin.androidx.compose)
// Maps Compose
implementation(libs.maps.compose)
implementation(libs.maps.compose.utils)
implementation(libs.maps.compose.widgets)
implementation(libs.play.services.maps)
implementation(libs.ktor.client.okhttp)
}
commonMain.dependencies {
// kotlinX date time
implementation(libs.kotlinx.datetime)
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.materialIconsExtended)
//navigation
implementation(libs.navigation.compose)
// Koin dependency injection
implementation(libs.koin.core)
implementation(libs.koin.compose)
implementation(libs.koin.compose.viewmodel)
implementation(libs.bundles.ktor)
// implementation(libs.ktor.client.cio)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.lifecycle.viewmodel)
implementation(libs.androidx.lifecycle.runtimeCompose)
}
nativeMain.dependencies {
implementation(libs.ktor.client.darwin)
}
commonTest.dependencies {
implementation(libs.kotlin.test)
}
}
}
android {
namespace = "org.example.project"
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
applicationId = "org.example.project"
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_11
targetCompatibility = JavaVersion.VERSION_11
}
}
dependencies {
debugImplementation(compose.uiTooling)
}
Is Koin correctly deployed?
Upgrading Koin version from 4.0.0 to 4.1.0 fixed this error.