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

KMM应用归档异常:Kotlin类不在作用域及栈溢出问题

KMM归档报错与StackOverflow问题解决指南

一、先搞定归档时「X not in scope」问题

归档时Kotlin类找不到,但Gradle日志显示成功,核心是Xcode归档流程与KMM框架配置不匹配,调整以下几点:

  1. 删除循环依赖的export配置
    你当前framework配置里的export(project(":shared"))属于无效的自导出配置,直接删除这行。如果需要将第三方库(如Koin)暴露给iOS侧,应单独导出对应依赖,例如:export("io.insert-koin:koin-core:${Koin.version}")。

  2. 确保Xcode配置与KMM构建类型映射准确
    你添加的xcodeConfigurationToNativeBuildType映射逻辑正确,但需确认Xcode的归档配置(通常为Release)确实对应到KMM的RELEASE构建类型,避免配置错位。

  3. 强制归档前重新构建KMM框架
    Xcode常存在旧框架缓存问题,在Xcode的Build Phases中添加Run Script,确保归档前触发Gradle重新构建:

    cd "$SRCROOT/../shared"
    ./gradlew :shared:assembleRelease
    

二、解决linkPodReleaseFrameworkIosArm64的StackOverflowError

该错误多因Gradle堆内存不足或依赖递归处理导致,按以下步骤修复:

  1. 增加Gradle堆内存
    在项目根目录的gradle.properties中修改或添加:

    org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
    

    将堆内存提升至4G,避免链接大框架时出现栈溢出。

  2. 调整依赖暴露范围
    commonMain中用api引入Koin会将其暴露给iOS侧,若无需在iOS直接调用Koin,建议改为implementation,减少框架体积与链接复杂度。

  3. 尝试切换为静态框架
    当前你使用的是动态框架(isStatic = false),可改为isStatic = true测试,静态链接有时能规避递归栈溢出问题。

  4. 清理缓存后重新构建
    执行以下命令清除所有缓存,再重新构建项目:

    ./gradlew clean
    pod deintegrate && pod install
    

三、额外检查项

  • 确认Kotlin、KMM插件使用稳定版本,避免预览版带来的兼容性问题。
  • 检查iOS项目中的框架引用,确保归档时使用的是Release版本的KMM框架,而非Debug版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 18:33:15