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
相关产品推荐
相关产品推荐

