Xcode Cloud构建Kotlin Multiplatform应用提示找不到Java运行时
问题根因
这个问题不是苹果侧的限制导致,核心原因是Xcode Cloud做了构建阶段的环境隔离:
你在ci_post_clone.sh阶段安装JDK、配置的JAVA_HOME和PATH环境变量,仅在当前脚本的执行生命周期内有效。后续Xcode执行编译脚本(也就是报错的PhaseScriptExecution阶段)会启动全新的独立shell环境,不会继承你之前配置的Java路径,自然会抛出找不到Java运行时的错误。
可行解决思路
方案1:直接使用Xcode Cloud预装JDK(推荐,最省事)
Xcode Cloud的构建镜像本身已经预装了多个版本的OpenJDK,完全不需要你手动安装。只需要找到Xcode项目里调用Gradle的那段Run Script(也就是触发报错的构建阶段脚本),在脚本最开头主动指定JDK路径即可:
# 脚本最开头添加以下两行,指定使用JDK17 export JAVA_HOME=$(/usr/libexec/java_home -v 17) export PATH="$JAVA_HOME/bin:$PATH" # 后面保留你原有的Gradle调用逻辑即可,比如KMP常用的./gradlew embedAndSignAppleFrameworkForXcode
这种方式省去了手动下载安装JDK的步骤,构建速度更快,稳定性也更高。
方案2:保留手动安装JDK的逻辑,显式传递路径
如果你因为版本原因必须手动安装指定的JDK版本,只需要把JDK路径持久化后在构建脚本里主动加载即可:
- 在你原有的
ci_post_clone.sh脚本里,JDK安装完成后追加一行命令,把JDK路径写入工作区的固定文件:
# 原有JDK安装逻辑不变,安装完成后执行 /usr/libexec/java_home -v 17 > $CI_WORKSPACE/.java_home
- 同样在Xcode的Run Script构建阶段最开头,主动读取存储的JDK路径配置:
export JAVA_HOME=$(cat $SRCROOT/.java_home) export PATH="$JAVA_HOME/bin:$PATH" # 后续接原有的Gradle调用逻辑
踩坑提醒
不要尝试通过修改全局profile、launchctl写入全局环境变量的方式配置Java路径,Xcode Cloud的构建环境是沙盒化的,这类全局修改不会在后续构建阶段生效。
内容的提问来源于stack exchange,提问作者kaulex
相关产品推荐
相关产品推荐

