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

Kotlin 2.0 KMP升级后iOS无法找到KSP生成的Koin模块

问题分析与解决方案

可能原因

  1. KSP 2.0.x 多平台路径变更:Kotlin 2.0.0 对 KSP 的生成文件路径做了调整,iOS 目标的生成代码不再默认被对应源集包含,导致编译时找不到生成的 Koin 模块。
  2. Koin 版本兼容性问题:旧版本 Koin KSP 编译器未适配 Kotlin 2.0.0 的新特性,无法为 iOS 目标正确生成代码。
  3. KSP 依赖配置方式失效:Kotlin 2.0.0 改变了多平台项目中 KSP 依赖的配置逻辑,原有的全局 add("kspIosX64", ...) 配置不再正确生效。

解决方案

1. 升级 Koin 到兼容 Kotlin 2.0 的版本

确保你的 Koin 依赖版本至少为 3.6.0(该版本开始支持 Kotlin 2.0 和对应 KSP 版本)。更新 libs.versions.toml 中的版本:

[versions]
koin = "3.6.0"
koin-ksp = "3.6.0"

[libraries]
koin-bom = { module = "io.insert-koin:koin-bom", version.ref = "koin" }
koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" }
koin-ksp-compiler = { module = "io.insert-koin:koin-ksp-compiler", version.ref = "koin-ksp" }
# 其他 Koin 依赖同步更新版本

2. 手动配置 iOS 源集包含 KSP 生成路径

在 build.gradle.kts 的 kotlin 块中,为每个 iOS 目标的源集添加 KSP 生成文件目录:

kotlin {
    // 声明 iOS 目标
    iosX64()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        val iosX64Main by getting {
            kotlin.srcDir("build/generated/ksp/iosX64/main/kotlin")
        }
        val iosArm64Main by getting {
            kotlin.srcDir("build/generated/ksp/iosArm64/main/kotlin")
        }
        val iosSimulatorArm64Main by getting {
            kotlin.srcDir("build/generated/ksp/iosSimulatorArm64/main/kotlin")
        }
    }
}

3. 调整 KSP 依赖配置方式

将原有的全局 add 配置改为在对应源集的依赖中声明,适配 Kotlin 2.0 的新逻辑:

kotlin {
    sourceSets {
        commonMain {
            dependencies {
                // ... 其他依赖
                ksp(libs.koin.ksp.compiler)
            }
        }
        androidMain {
            dependencies {
                ksp(libs.koin.ksp.compiler)
            }
        }
        iosX64Main {
            dependencies {
                ksp(libs.koin.ksp.compiler)
            }
        }
        iosArm64Main {
            dependencies {
                ksp(libs.koin.ksp.compiler)
            }
        }
        iosSimulatorArm64Main {
            dependencies {
                ksp(libs.koin.ksp.compiler)
            }
        }
    }
}

4. 清理构建缓存后重新构建

执行以下命令清理缓存并重新编译,避免旧生成文件干扰:

./gradlew clean
./gradlew assembleIosSimulatorArm64 # 或对应你要构建的 iOS 目标

内容的提问来源于stack exchange,提问作者doolle89

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:32:11