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

Xcode归档KMP项目时出现Java堆内存不足错误

解决KMP项目iOS Archive时Java堆空间不足的问题

问题描述

KMP项目Android端发布正常,但在Xcode执行Archive任务时,linkReleaseFrameworkIosArm64任务失败,报错如下:

Task :composeApp:linkReleaseFrameworkIosArm64 FAILED

error: Compilation failed: Java heap space

  • Source files:
  • Compiler version: 1.9.22
  • Output kind: FRAMEWORK

error: java.lang.OutOfMemoryError: Java heap space

Task :composeApp:linkReleaseFrameworkIosArm64 FAILED

error: Compilation finished with errors

解决方案

1. 调整Gradle全局JVM内存配置

在项目根目录的gradle.properties文件中,修改或添加org.gradle.jvmargs参数,增大Java堆内存分配:

org.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=1g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
  • -Xmx8g表示最大堆内存设置为8GB,可根据机器配置调整为4G/16G;
  • -XX:MaxMetaspaceSize=1g用于提升元空间内存,避免元空间溢出。

2. 针对iOS编译任务单独配置JVM参数

在composeApp模块的build.gradle.kts中,为iOS的Release链接任务单独指定更大的堆内存:

tasks.named<org.jetbrains.kotlin.gradle.tasks.KotlinLink>("linkReleaseFrameworkIosArm64") {
    jvmArgs = listOf("-Xmx8g")
}

如果同时需要支持iOS模拟器(iosX64/iosSimulatorArm64),可以批量配置所有iOS Release链接任务:

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinLink>().configureEach {
    if (name.contains("ios") && name.contains("Release")) {
        jvmArgs = listOf("-Xmx8g")
    }
}

3. 清理编译缓存

  • 删除Gradle缓存:执行命令rm -rf ~/.gradle/caches(macOS/Linux)或手动删除C:\Users\<你的用户名>\.gradle\caches(Windows);
  • 删除Xcode派生数据:打开Xcode → 菜单栏Xcode → Settings → Locations → 点击Derived Data旁的箭头,删除对应项目的文件夹;
  • 重新执行Xcode Archive任务。

4. 优化项目编译负载

  • 检查并移除项目中未使用的依赖库,减少编译时的资源消耗;
  • 将大型模块拆分为多个子模块,降低单个编译单元的代码量;
  • 关闭不必要的Gradle并行编译,在gradle.properties中添加:
org.gradle.parallel=false

5. 调整Xcode编译设置

在Xcode中,选择项目target → Build Settings → 搜索Parallelize Build,设置为No,减少并行编译带来的内存占用压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 16:07:40