KMM iOS模块报Unresolved reference: platform错误求助
Windows环境Android Studio中KMM项目iOS侧platform包引用报错修复
问题表现
- 基于官方模板新建KMM项目后,shared模块iOS源码集的Kotlin代码无法识别
platform包,import platform.UIKit.UIDevice位置抛出引用错误 - Android侧代码编译、运行完全正常
- 开发环境为Windows系统,无iOS构建、运行需求,仅需要IDE正常识别iOS侧的platform相关API引用,消除代码报错
根因说明
官方KMM项目模板默认会加系统判断逻辑,仅在macOS环境下才会注册iOS编译目标,Windows环境下Gradle同步时会直接跳过iOS相关配置,IDE不会拉取iOS平台的API存根做索引,因此会报找不到包的错误,和是否能实际构建iOS应用无关。
修复步骤
- 打开shared模块下的构建脚本:如果用Kotlin DSL就是
shared/build.gradle.kts,Groovy DSL就是shared/build.gradle - 找到脚本中包裹iOS目标配置的系统判断代码,通常长这样:
if (System.getProperty("os.name").contains("Mac", ignoreCase = true)) { // iOS target 配置 listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "shared" } } }
- 将iOS目标的配置整体移出系统判断块,保留iOS目标的声明即可,不需要在Windows上安装任何苹果开发相关工具。修改后的配置参考:
kotlin { androidTarget() // 全平台保留iOS目标声明,Windows下仅用于IDE索引,不会实际触发iOS构建 listOf( iosX64(), iosArm64(), iosSimulatorArm64() ).forEach { it.binaries.framework { baseName = "shared" isStatic = true } } sourceSets { // 原有sourceSets配置保持不变 commonMain.dependencies { // 原有依赖 } androidMain.dependencies { // 原有依赖 } iosMain.dependencies { // 原有依赖 } } }
- 点击Gradle同步按钮,等待同步完成后重启Android Studio,等IDE索引进度加载完成,
platform.UIKit相关的引用错误就会消失。
注意:该操作仅会让IDE加载iOS平台的API签名存根用于代码检查、提示,不会让Windows环境获得iOS应用构建能力,不会额外占用过多磁盘空间,完全匹配仅需要识别引用的需求。
额外排查项
如果上述操作完成后报错依然存在,按以下顺序检查:
- 打开
Settings > Build, Execution, Deployment > Build Tools > Gradle,确认Gradle使用的JDK版本为17及以上 - 确认Android Studio安装的Kotlin插件版本,和项目
libs.versions.toml(或构建脚本中)声明的Kotlin版本完全一致,版本不匹配会导致跨平台代码索引异常 - 执行
File > Invalidate Caches...勾选清除缓存并重启IDE,重新触发全量索引
内容的提问来源于stack exchange,提问作者Alexander Plekhanov
相关产品推荐
相关产品推荐

