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

升级Kotlin至1.8后,KMM项目iOS代码报'Kotlin Not Configured'警告如何解决?

问题描述

我正在开发一个包含Android和iOS实现的Kotlin Multiplatform项目,使用Gradle Kotlin DSL构建。将Kotlin从1.6版本升级至1.8版本后,IntelliJ在库的iOS部分所有Kotlin文件上方显示黄色警告Kotlin not configured,且受影响文件无法使用代码补全功能。

我的build.gradle.kts代码如下:

import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework

plugins {
    kotlin("multiplatform") version "1.8.10"
    id("com.android.library")
}

kotlin {
    android()

    val xcf = XCFramework()
    listOf(iosSimulatorArm64(), iosX64(), iosArm64("ios")).forEach {
        it.binaries.framework {
            baseName = "SharedLibrary"
            xcf.add(this)
        }
    }

    sourceSets {
        val commonMain by getting

        val androidMain by getting

        val iosMain by getting
        val iosSimulatorArm64Main by getting
        iosSimulatorArm64Main.dependsOn(iosMain)
        val iosX64Main by getting
        iosX64Main.dependsOn(iosMain)
    }
}

android {
    namespace = "com.example"
    compileSdk = 32
    defaultConfig {
        minSdk = 27
        targetSdk = 32
    }
}
解决方法
  • 同步并清理IDE缓存
    点击IntelliJ右上角的「Sync Project with Gradle Files」按钮完成同步,然后执行File -> Invalidate Caches... -> Invalidate and Restart,清理缓存并重启IDE,多数配置类异常能通过此步骤解决。

  • 调整iOS源集配置逻辑
    Kotlin 1.8对KMP源集关联逻辑做了优化,原手动关联的方式可能不再适配新插件规则。可以统一管理iOS源集:

    sourceSets {
        val commonMain by getting
        val androidMain by getting
        
        val iosMain by creating {
            dependsOn(commonMain)
        }
        val iosSimulatorArm64Main by getting {
            dependsOn(iosMain)
        }
        val iosX64Main by getting {
            dependsOn(iosMain)
        }
        val iosArm64Main by getting {
            dependsOn(iosMain)
        }
    }
    

    或者用ios()函数统一声明目标,简化配置:

    kotlin {
        android()
        
        val xcf = XCFramework()
        ios {
            binaries.framework {
                baseName = "SharedLibrary"
                xcf.add(this)
            }
        }
        iosSimulatorArm64()
        iosX64()
        
        sourceSets {
            val commonMain by getting
            val androidMain by getting
            val iosMain by getting {
                dependsOn(commonMain)
            }
            val iosSimulatorArm64Main by getting {
                dependsOn(iosMain)
            }
            val iosX64Main by getting {
                dependsOn(iosMain)
            }
        }
    }
    
  • 对齐Kotlin插件与IDE版本
    打开Settings -> Plugins -> Kotlin,确保IntelliJ的Kotlin插件版本和项目使用的1.8.10完全一致,版本不匹配是配置识别异常的常见原因。

  • 修正XCFramework目标声明
    Kotlin 1.8中无需给iosArm64指定"ios"名称,插件会自动识别目标类型,简化配置:

    kotlin {
        android()
        
        val xcf = XCFramework()
        listOf(iosSimulatorArm64(), iosX64(), iosArm64()).forEach { target ->
            target.binaries.framework {
                baseName = "SharedLibrary"
                xcf.add(this)
            }
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:21