KMM项目中无法添加CocoaPods插件的问题求助
我试图在Kotlin Multiplatform项目的build.gradle中配置CocoaPods静态框架,但安装org.jetbrains.kotlin.native.cocoapods插件(版本1.15.2)时遇到以下错误:
Error resolving plugin [id: 'org.jetbrains.kotlin.native.cocoapods',
version: '1.15.2']The request for this plugin could not be satisfied because the plugin is already on the classpath with an unknown version, so compatibility cannot be checked.
项目的build.gradle代码如下:
import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING plugins { kotlin("multiplatform") kotlin("plugin.serialization") version "1.9.23" id("org.jetbrains.kotlin.native.cocoapods") version "1.15.2" id("com.android.library") id("com.google.devtools.ksp") version "1.9.24-1.0.20" id("com.squareup.sqldelight") id("koin") id("com.rickclephas.kmp.nativecoroutines") version "0.13.3" id("dev.icerock.moko.kswift") version "0.6.0" id("com.codingfeline.buildkonfig") version "+" id("io.kotest.multiplatform") version "5.8.0" id("org.jetbrains.kotlinx.kover") version "0.7.4" id("dev.icerock.mobile.multiplatform-resources") } val koinVersion = "3.1.4" buildkonfig { packageName = "id.test.shared" objectName = "TestSharedConfig" exposeObjectWithName = "TestSharedPublicConfig" // default config is required defaultConfigs { buildConfigField(STRING, "APP_STORE_BASE_URL", "itunes.apple.com") } defaultConfigs("staging") { buildConfigField(STRING, "APP_STORE_BASE_URL", "itunes.apple.com") } defaultConfigs("production") { buildConfigField(STRING, "APP_STORE_BASE_URL", "itunes.apple.com") } } @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) kotlin { iosX64() iosArm64() iosSimulatorArm64() targetHierarchy.default() androidTarget { compilations.all { kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } } } sourceSets { commonMain.dependencies { implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.0") implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0") implementation("io.insert-koin:koin-core:$koinVersion") implementation("com.squareup.sqldelight:runtime:1.5.4") implementation("io.ktor:ktor-client-core:2.3.0") implementation("io.ktor:ktor-client-auth:2.3.0") implementation("io.ktor:ktor-client-cio:2.3.0") implementation("io.ktor:ktor-client-logging:2.3.0") implementation("io.ktor:ktor-client-serialization:2.3.0") implementation("io.ktor:ktor-client-encoding:2.3.0") implementation("io.ktor:ktor-client-content-negotiation:2.3.0") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0") implementation("com.russhwolf:multiplatform-settings-no-arg:1.0.0-RC") implementation("co.touchlab:stately-isolate:1.2.2") api("co.touchlab:kermit:1.1.3") implementation(kotlin("stdlib-common")) implementation("co.touchlab:stately-common:1.2.2") implementation("com.badoo.reaktive:reaktive:1.2.2") implementation("com.badoo.reaktive:reaktive-annotations:1.2.2") implementation("com.badoo.reaktive:coroutines-interop:1.2.2") api("dev.icerock.moko:resources:0.24.0-beta-4") api("dev.icerock.moko:resources-compose:0.24.0-beta-4") // for compose multiplatform implementation("dev.icerock.moko:resources-test:0.24.0-beta-4") } commonTest.dependencies { implementation(kotlin("test")) implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) implementation("io.mockative:mockative:2.0.1") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.0") implementation("io.kotest:kotest-framework-engine:5.8.0") runtimeOnly("io.kotest:kotest-framework-api-jvm:5.8.0") implementation("io.insert-koin:koin-test:$koinVersion") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") implementation("io.ktor:ktor-client-content-negotiation:2.3.0") implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.0") } androidMain.dependencies { implementation("com.squareup.sqldelight:android-driver:1.5.4") implementation("io.ktor:ktor-client-android:2.3.0") implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") implementation("io.ktor:ktor-client-okhttp:2.3.0") } iosMain.dependencies { implementation("com.squareup.sqldelight:native-driver:1.5.4") implementation("io.ktor:ktor-client-ios:2.3.0") } } } // add support for kotlin extension function and sealed class to enum swift kswift { install(dev.icerock.moko.kswift.plugin.feature.SealedToSwiftEnumFeature) install(dev.icerock.moko.kswift.plugin.feature.PlatformExtensionFunctionsFeature) } android { compileSdk = 32 namespace = "id.Test.shared" defaultConfig { minSdk = 23 targetSdk = 32 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments["clearPackageData"] = "true" testOptions { execution = "ANDROIDX_TEST_ORCHESTRATOR" } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } dependencies { androidTestImplementation("androidx.test:runner:1.4.0") androidTestUtil("androidx.test:orchestrator:1.4.1") debugImplementation("com.github.chuckerteam.chucker:library:3.5.2") releaseImplementation("com.github.chuckerteam.chucker:library-no-op:3.5.2") } } dependencies { configurations .filter { it.name.startsWith("ksp") && it.name.contains("Test") } .forEach { add(it.name, "io.mockative:mockative-processor:1.2.6") } } sqldelight { database("TestDB") { packageName = "id.Test.shared.cache" sourceFolders = listOf("sqldelight") } } multiplatformResources { resourcesPackage.set("id.test.shared") resourcesClassName.set("id.test.shared") }
问题原因
org.jetbrains.kotlin.native.cocoapods是Kotlin Multiplatform插件的内置组件,不需要单独指定版本。你指定的1.15.2版本与当前项目使用的Kotlin版本(从kotlin("plugin.serialization") version "1.9.23"可知为1.9.23)严重不匹配,且KMP插件已经自动引入了该cocoapods组件,导致版本冲突。
修复步骤
移除CocoaPods插件的版本声明
在plugins块中,将id("org.jetbrains.kotlin.native.cocoapods") version "1.15.2"修改为:
id("org.jetbrains.kotlin.native.cocoapods")统一Kotlin插件版本
为避免版本不一致问题,建议为所有Kotlin官方插件指定统一版本,在plugins块顶部添加版本声明:plugins { kotlin("multiplatform") version "1.9.23" kotlin("plugin.serialization") version "1.9.23" id("org.jetbrains.kotlin.native.cocoapods") // 其他插件... }这样所有Kotlin相关插件都会使用1.9.23版本,确保兼容性。
配置静态CocoaPods框架
在kotlin块中添加cocoapods配置,启用静态框架:kotlin { // 已有目标配置... cocoapods { framework { isStatic = true // 启用静态框架 baseName = "TestShared" // 自定义框架名称 } // 可选:补充podspec基础信息 summary = "Shared KMP framework for Test app" homepage = "你的项目主页链接" } }
最终修改后的plugins块示例
plugins { kotlin("multiplatform") version "1.9.23" kotlin("plugin.serialization") version "1.9.23" id("org.jetbrains.kotlin.native.cocoapods") id("com.android.library") id("com.google.devtools.ksp") version "1.9.24-1.0.20" id("com.squareup.sqldelight") id("koin") id("com.rickclephas.kmp.nativecoroutines") version "0.13.3" id("dev.icerock.moko.kswift") version "0.6.0" id("com.codingfeline.buildkonfig") version "+" id("io.kotest.multiplatform") version "5.8.0" id("org.jetbrains.kotlinx.kover") version "0.7.4" id("dev.icerock.mobile.multiplatform-resources") }
内容的提问来源于stack exchange,提问作者Evan Laksana

