Xcode Cloud中CI_WORKSPACE变量为空致Flutter构建失败求助
Xcode Cloud构建失败:CI_WORKSPACE变量为空的解决办法
为什么CI_WORKSPACE会为空?
- Xcode Cloud的环境变量(包括CI_WORKSPACE)是仅在官方默认执行环境中自动注入的。如果苹果侧Xcode Cloud环境有更新,或者你修改了项目的构建方案配置(比如自定义脚本执行路径、环境),都可能导致该变量未被正确设置。
- 另外,若脚本的执行上下文被意外修改,也会出现变量丢失的情况。
CI_WORKSPACE是如何被设置的?
这个变量是Xcode Cloud在构建启动时自动赋值的,指向克隆后代码仓库根目录的绝对路径,目的是让脚本快速定位项目根目录,无需手动计算路径。
修复方案
方案1:手动推导仓库根目录(替代CI_WORKSPACE)
直接替换脚本中cd $CI_WORKSPACE这一行,用脚本自动定位根目录:
# 从ci_scripts目录向上跳转至仓库根目录 cd "$(dirname "$0")/.." # 或者用git命令直接获取根目录 cd "$(git rev-parse --show-toplevel)"
方案2:检查Xcode Cloud构建配置
- 确认
ci_post_clone.sh放在项目根目录的ci_scripts文件夹下,Xcode Cloud默认会在此路径执行脚本,此时环境变量应正常注入。 - 检查构建配置中是否添加了自定义环境变量覆盖,或是禁用了默认环境变量注入。
方案3:兼容两种情况的写法
为避免后续再出现变量为空的问题,写兼容代码优先用CI_WORKSPACE,失败则自动推导:
if [ -z "$CI_WORKSPACE" ]; then CI_WORKSPACE="$(git rev-parse --show-toplevel)" fi cd "$CI_WORKSPACE"
优化后的完整ci_post_clone.sh脚本
echo "Starting CI script..." # 兼容CI_WORKSPACE为空的情况 if [ -z "$CI_WORKSPACE" ]; then CI_WORKSPACE="$(git rev-parse --show-toplevel)" fi echo "Workspace path: $CI_WORKSPACE" cd "$CI_WORKSPACE" ls # Install Flutter using git. git clone https://github.com/flutter/flutter.git --depth 1 -b stable $HOME/flutter export PATH="$PATH:$HOME/flutter/bin" # Install Flutter artifacts for iOS (--ios), or macOS (--macos) platforms. flutter precache --ios # Install Flutter dependencies. flutter pub get # Install CocoaPods using Homebrew. HOMEBREW_NO_AUTO_UPDATE=1 # disable homebrew's automatic updates. brew install cocoapods cd ios && pod install # run `pod install` in the `ios` directory. flutter build ios
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

