升级Compose至1.8.0后Xcode运行KMM项目失败:Undefined symbol错误
Compose Multiplatform 1.8.0 + KMM iOS 链接器错误排查与解决
问题背景
升级JetBrains Compose至1.8.0后,KMM项目的iOS目标在Xcode构建时出现链接器错误:
Undefined symbol: _kfun:androidx.compose.animation.core#androidx_compose_animation_core_MutableTransitionState$stableprop_getter$artificial(){}kotlin.Int
仅Xcode启动时触发该错误,Android和桌面端运行正常,当前环境为Kotlin 2.1.20 + Compose Multiplatform 1.8.0,已尝试清理构建、清除缓存但无效。
可能的解决方法
1. 确认Compose依赖配置完整性
检查项目build.gradle.kts中iOS目标的依赖,确保compose.animation库已正确引入:
iosMain.dependencies { implementation(compose.animation) // 其他必要的Compose依赖 }
若之前仅依赖compose.ui等聚合库,升级后可能需要显式添加compose.animation,确保相关符号被编译到iOS产物中。
2. 调整Xcode构建配置
- 关闭Dead Code Stripping:在Xcode项目设置的
Build Settings->Linking中,将Dead Code Stripping设为NO。链接器可能误判Compose稳定属性的getter为无用代码并剥离。 - 确认架构覆盖:确保
Valid Architectures包含项目运行所需架构(如arm64、x86_64),避免因架构不匹配导致符号缺失。
3. 重新同步Xcode项目文件
执行Gradle命令重新生成Xcode配置,修复缓存或配置不一致问题:
./gradlew iosXcodeSync
完成后重新打开Xcode并构建。
4. 排查依赖版本冲突
用Gradle命令查看依赖树,检查是否有第三方库或自定义模块依赖旧版本compose.animation-core:
./gradlew dependencies
若发现冲突,通过exclude强制统一版本为1.8.0:
implementation("第三方库坐标") { exclude(group = "androidx.compose.animation", module = "animation-core") }
5. 确认Xcode版本兼容性
Compose Multiplatform 1.8.0要求Xcode版本至少为15.0,若当前版本过低,升级至最新稳定版后重试。
Compose 1.8.0对KMM iOS的新要求
- 最低Xcode版本提升至15.0,依赖iOS 17.0 SDK部分特性;
- Kotlin版本需至少为2.0.0(你的2.1.20符合要求);
- 部分Compose模块的iOS产物结构调整,需显式声明所需模块,而非仅依赖聚合库。
内容的提问来源于stack exchange,提问作者abbasalim
相关产品推荐
相关产品推荐

