Xcode Cloud工作流能否动态判断是否执行Archive步骤?
Xcode Cloud 按需执行 Archive/TestFlight 步骤的解决方案
针对你遇到的问题,有两种可行的实现方式,无需通过标记构建失败来控制流程:
方案一:单工作流结合自定义脚本控制分支逻辑
不需要拆分工作流,直接在现有流程中加入分支判断脚本,仅在符合条件时执行Archive和TestFlight操作:
- 保留现有工作流中的Test步骤。
- 删除内置的Archive和TestFlight步骤,替换为一个Run Script步骤,放在Test步骤之后。
- 在脚本中写入以下逻辑,利用Xcode Cloud内置的
CI_BRANCH环境变量判断分支:
# 匹配目标分支:develop 或以 release/ 开头的分支 if [[ "$CI_BRANCH" == "develop" || "$CI_BRANCH" =~ ^release/ ]]; then # 执行Archive操作(替换为你的项目实际参数) xcodebuild archive -workspace YourApp.xcworkspace -scheme YourScheme -archivePath build/YourApp.xcarchive # 导出IPA包(需提前准备符合要求的ExportOptions.plist) xcodebuild -exportArchive -archivePath build/YourApp.xcarchive -exportOptionsPlist ExportOptions.plist -exportPath build/exported # 上传至TestFlight(需在工作流中配置API_KEY和ISSUER_ID环境变量) xcrun altool --upload-app -f build/exported/YourApp.ipa -t ios --apiKey "$API_KEY" --apiIssuer "$ISSUER_ID" else echo "当前分支 $CI_BRANCH 无需发布,跳过Archive和TestFlight上传" exit 0 fi
该方案优势是只需维护一个工作流,配置简洁;缺点是需要手动编写Archive和上传脚本,需自行管理导出配置和API凭证。
方案二:双工作流配合前置退出脚本
利用Xcode Cloud的分支触发规则,结合前置脚本避免重复执行流程:
- 创建全功能工作流:
- 包含Test、Archive、TestFlight所有步骤。
- 触发分支设置为
develop和release/*(在工作流的"Trigger"选项中添加这两个分支规则)。
- 创建仅测试工作流:
- 仅保留Test步骤。
- 触发分支设置为所有分支。
- 在Test步骤之前添加一个Run Script前置步骤,写入以下逻辑:
# 如果当前分支匹配全功能工作流的规则,直接退出本工作流 if [[ "$CI_BRANCH" == "develop" || "$CI_BRANCH" =~ ^release/ ]]; then echo "当前分支已由全功能工作流处理,跳过本工作流" exit 0 fi # 非目标分支,继续执行测试步骤
该方案优势是可以继续使用Xcode Cloud内置的Archive和TestFlight步骤,无需编写复杂脚本;缺点是需要维护两个工作流,且仅测试工作流会在目标分支上触发,但会快速退出,不影响实际执行结果。
注意事项
- Xcode Cloud的
CI_BRANCH环境变量会自动获取当前构建的分支名称,无需额外配置。 - 使用方案一时,需确保ExportOptions.plist文件已提交至代码仓库,且API密钥和Issuer ID已在工作流的"Environment Variables"中配置为保密变量。
内容的提问来源于stack exchange,提问作者bdesham
相关产品推荐
相关产品推荐

