KMM应用归档异常:Kotlin类不在作用域及栈溢出问题
一、先搞定归档时「X not in scope」问题
归档时Kotlin类找不到,但Gradle日志显示成功,核心是Xcode归档流程与KMM框架配置不匹配,调整以下几点:
删除循环依赖的export配置
你当前framework配置里的export(project(":shared"))属于无效的自导出配置,直接删除这行。如果需要将第三方库(如Koin)暴露给iOS侧,应单独导出对应依赖,例如:export("io.insert-koin:koin-core:${Koin.version}")。确保Xcode配置与KMM构建类型映射准确
你添加的xcodeConfigurationToNativeBuildType映射逻辑正确,但需确认Xcode的归档配置(通常为Release)确实对应到KMM的RELEASE构建类型,避免配置错位。强制归档前重新构建KMM框架
Xcode常存在旧框架缓存问题,在Xcode的Build Phases中添加Run Script,确保归档前触发Gradle重新构建:cd "$SRCROOT/../shared" ./gradlew :shared:assembleRelease
二、解决linkPodReleaseFrameworkIosArm64的StackOverflowError
该错误多因Gradle堆内存不足或依赖递归处理导致,按以下步骤修复:
增加Gradle堆内存
在项目根目录的gradle.properties中修改或添加:org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8将堆内存提升至4G,避免链接大框架时出现栈溢出。
调整依赖暴露范围
commonMain中用api引入Koin会将其暴露给iOS侧,若无需在iOS直接调用Koin,建议改为implementation,减少框架体积与链接复杂度。尝试切换为静态框架
当前你使用的是动态框架(isStatic = false),可改为isStatic = true测试,静态链接有时能规避递归栈溢出问题。清理缓存后重新构建
执行以下命令清除所有缓存,再重新构建项目:./gradlew clean pod deintegrate && pod install
三、额外检查项
- 确认Kotlin、KMM插件使用稳定版本,避免预览版带来的兼容性问题。
- 检查iOS项目中的框架引用,确保归档时使用的是Release版本的KMM框架,而非Debug版本。
内容的提问来源于stack exchange,提问作者Cate Daniel

