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

Xcode Server bot运行自增build号pre-integration脚本报错如何解决

问题原因
  • 报错本质是pre-integration阶段的运行环境和本地Scheme构建阶段的环境不同:Xcode Server的pre-integration触发器执行时,Xcode还未开始解析项目构建设置,${PROJECT_DIR}、${INFOPLIST_FILE}这两个你用到的环境变量此时是空值。
  • PlistBuddy读取空路径时会输出Error Reading File: /报错文本,你把这段文本赋值给了buildNumber变量,后续做加法运算时相当于执行了Error Reading File: / + 1,所以日志才会出现你没写过的+1相关语法错误。
  • 本地Scheme的构建后动作可以正常运行,是因为该阶段已经完成了构建设置解析,两个环境变量都有正确值。
解决方案

你需要使用Xcode Server pre-integration阶段默认提供的${XCS_SOURCE_DIR}环境变量拼接Info.plist的绝对路径,这个变量指向bot拉取的代码仓库根目录。

操作步骤

  1. 先确认Info.plist相对于你代码仓库根目录的路径,比如你的Info.plist存放在项目根目录下MyApp/Info.plist,那相对路径就是MyApp/Info.plist
  2. 替换为以下带容错逻辑的脚本,将示例的相对路径替换为你自己的实际路径:
#!/bin/sh
# 替换为你的Info.plist相对于代码仓库根目录的路径
INFO_PLIST_RELATIVE_PATH="MyApp/Info.plist"
INFO_PLIST_PATH="${XCS_SOURCE_DIR}/${INFO_PLIST_RELATIVE_PATH}"

# 先检查文件是否存在
if [ ! -f "${INFO_PLIST_PATH}" ]; then
    echo "错误:Info.plist不存在,路径为${INFO_PLIST_PATH}"
    exit 1
fi

# 读取build号
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFO_PLIST_PATH}")
# 校验读取结果是否为数字
if ! [[ "${buildNumber}" =~ ^[0-9]+$ ]]; then
    echo "错误:读取到的CFBundleVersion不是数字,值为${buildNumber}"
    exit 1
fi

# 自增
buildNumber=$((buildNumber + 1))

# 写回plist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${buildNumber}" "${INFO_PLIST_PATH}"
echo "build号已更新为${buildNumber}"

额外注意

如果你的项目开启了GENERATE_INFOPLIST_FILE配置(Xcode 13+新建项目默认开启),Info.plist是编译时自动生成的,你不能直接修改源码路径下的Info.plist,需要调整自增逻辑为修改Xcode项目的CURRENT_PROJECT_VERSION配置,对应修改脚本的操作对象为.xcodeproj或者.pbxproj文件即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:45:01