You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMP项目引入Koin Compose ViewModel依赖后iOS编译失败,请求确认Koin部署是否正确并解决问题

KMP项目引入Koin Compose ViewModel依赖后iOS编译失败,请求确认Koin部署是否正确并解决问题

看起来你遇到的问题是Koin Compose ViewModel的依赖在iOS平台引入了Android专属的SavedState库,导致iOS编译时找不到这个仅Android可用的依赖,所以才会报Could not find "org.jetbrains.androidx.savedstate:savedstate"的错误。先帮你梳理下Koin的部署问题,再给出具体修复方案:

一、先确认你的Koin依赖配置问题

你的commonMain里直接引入了libs.koin.compose.viewmodel,但这个依赖是带有Android Jetpack ViewModel SavedState特性的,它依赖Android专属的savedstate库,而iOS平台根本不需要也找不到这个库,所以才会在iOS编译流程中失败。Koin的跨平台ViewModel依赖应该区分平台配置,而不是直接在common模块引入Android专属的依赖。

二、具体修复步骤

1. 拆分Koin依赖的平台配置

把commonMain里的libs.koin.compose.viewmodel移到androidMain中,同时在commonMain使用Koin的跨平台ViewModel核心依赖,替换掉原来的Android专属依赖:

  • 在commonMain.dependencies中保留跨平台通用的Koin依赖:
implementation(libs.koin.core)
implementation(libs.koin.compose)
// 替换原viewmodel依赖为跨平台核心版本
implementation(libs.koin.compose.viewmodel.core) // 若libs.toml无此依赖,可直接用坐标:io.insert-koin:koin-compose-viewmodel-core:$koin_version
  • 在androidMain.dependencies中添加Android专属的Koin ViewModel依赖:
implementation(libs.koin.androidx.compose)
implementation(libs.koin.compose.viewmodel) // 把原来common里的这个依赖移到这里

2. 检查libs.toml中的Koin版本配置

确保你的Koin依赖是支持跨平台的3.5+版本(这个版本对KMP的适配更完善),示例libs.toml配置如下:

[versions]
koin = "3.5.6"

[libraries]
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" }
koin-compose-viewmodel-core = { module = "io.insert-koin:koin-compose-viewmodel-core", version.ref = "koin" }
koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin" }
koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" }

3. 清理缓存重新编译

做完依赖调整后,执行以下操作确保缓存清理干净:

  • 执行Gradle的clean任务
  • 进入iOS项目目录,执行pod deintegrate && pod install清理Pods缓存
  • 重新在Xcode中打开iosApp.xcworkspace编译

三、问题根源说明

koin-compose-viewmodel这个依赖默认会引入Android的SavedStateHandle相关库,这是Android Jetpack ViewModel的专属特性,Kotlin Multiplatform的iOS平台完全不需要这个依赖。当你在commonMain中引入它时,Gradle会尝试在iOS平台也解析这个Android专属库,最终导致找不到依赖的编译错误。

通过拆分依赖到对应平台,就能让Android使用带SavedState的ViewModel,iOS使用Koin的跨平台ViewModel核心实现,完美规避不必要的Android依赖侵入iOS编译流程。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 09:20:28