androidxcodekotlinkotlin-multiplatformandroid-koin

composeApp:cinteropGoogleMapsIosSimulatorArm64 FAILED


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?


Solution

  • Upgrading Koin version from 4.0.0 to 4.1.0 fixed this error.