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

Xcode Cloud工作流能否动态判断是否执行Archive步骤?

Xcode Cloud 按需执行 Archive/TestFlight 步骤的解决方案

针对你遇到的问题,有两种可行的实现方式,无需通过标记构建失败来控制流程:

方案一:单工作流结合自定义脚本控制分支逻辑

不需要拆分工作流,直接在现有流程中加入分支判断脚本,仅在符合条件时执行Archive和TestFlight操作:

  1. 保留现有工作流中的Test步骤。
  2. 删除内置的Archive和TestFlight步骤,替换为一个Run Script步骤,放在Test步骤之后。
  3. 在脚本中写入以下逻辑,利用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的分支触发规则,结合前置脚本避免重复执行流程:

  1. 创建全功能工作流:
    • 包含Test、Archive、TestFlight所有步骤。
    • 触发分支设置为 develop 和 release/*(在工作流的"Trigger"选项中添加这两个分支规则)。
  2. 创建仅测试工作流:
    • 仅保留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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:00:31