KMP项目运行iOS应用遇配置任务错误及iOS项目打开异常求助
修复KMP项目iOS构建任务错误及iOS项目异常问题
针对你遇到的:shared:assembleDebugAppleFrameworkForXcodeIosSimulatorArm64任务配置错误及iOS项目打开异常问题,可通过以下步骤逐一修复:
1. 对齐Kotlin序列化插件版本
当前序列化插件版本(1.9.20)与Kotlin版本(2.1.0)不匹配,需将插件版本同步为2.1.0:
// 修改plugins块中的序列化插件配置 kotlin("plugin.serialization") version "2.1.0"
2. 升级SKIE插件至兼容版本
SKIE 0.10.1不支持Kotlin 2.1.x,需升级到兼容的最新版本(如0.16.0):
// 修改SKIE插件版本 id("co.touchlab.skie") version "0.16.0"
3. 启用iOS静态框架
取消注释isStatic = true,使用静态框架可避免Xcode兼容性问题:
listOf( iosX64(), iosArm64(), iosSimulatorArm64(), ).forEach { it.binaries.framework { baseName = "shared" isStatic = true // 取消注释启用静态框架 } }
4. 关联iOS源码集依赖
将各iOS目标的主源码集关联到统一的iosMain,确保依赖正确传递:
sourceSets { // ... 原有代码 ... val iosMain by creating { dependencies { implementation(libs.ktor.client.darwin) } } // 添加以下关联配置 val iosX64Main by getting { dependsOn(iosMain) } val iosArm64Main by getting { dependsOn(iosMain) } val iosSimulatorArm64Main by getting { dependsOn(iosMain) } // ... 原有代码 ... }
5. 清理缓存并重新构建
执行以下命令清理Gradle缓存并重新构建项目:
./gradlew clean ./gradlew :shared:assembleDebug
完成后重新打开iOS项目,同步Xcode即可。
修改后的完整build.gradle.kts示例
import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.kotlinMultiplatform) alias(libs.plugins.androidLibrary) id("co.touchlab.skie") version "0.16.0" kotlin("plugin.serialization") version "2.1.0" } kotlin { androidTarget { compilations.all { compileTaskProvider.configure { compilerOptions { jvmTarget.set(JvmTarget.JVM_1_8) } } } } listOf( iosX64(), iosArm64(), iosSimulatorArm64(), ).forEach { it.binaries.framework { baseName = "shared" isStatic = true } } sourceSets { val commonMain by getting { dependencies { implementation(libs.kotlinx.coroutines.core) implementation(libs.ktor.client.core) implementation(libs.ktor.client.content.negotiation) implementation(libs.ktor.serialization.kotlinx.json) implementation(libs.kotlinx.datetime) implementation(libs.koin.core) } } val androidMain by getting{ dependencies { implementation(libs.androidx.lifecycle.viewmodel.ktx) implementation(libs.ktor.client.android) } } val iosMain by creating { dependencies { implementation(libs.ktor.client.darwin) } } val iosX64Main by getting { dependsOn(iosMain) } val iosArm64Main by getting { dependsOn(iosMain) } val iosSimulatorArm64Main by getting { dependsOn(iosMain) } commonTest.dependencies { implementation(libs.kotlin.test) } } } android { namespace = "com.db.mycity" compileSdk = 35 defaultConfig { minSdk = 26 } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } packaging { resources { excludes += "META-INF/versions/9/previous-compilation-data.bin" } } }
内容的提问来源于stack exchange,提问作者Goku
相关产品推荐
相关产品推荐

