如何将 Xcode Bot 集成编号添加到构建脚本中

Posted

技术标签:

【中文标题】如何将 Xcode Bot 集成编号添加到构建脚本中【英文标题】:How to Add Xcode Bot Integration Number Into Build Script 【发布时间】:2014-05-24 04:18:56 【问题描述】:

我正在使用 Settings.bundle 文件创建一个 iPad 应用程序。我正在编写构建脚本来显示应用程序版本号和 xcode bot 集成号(不是捆绑构建号)。我在网上搜索并找不到任何解决方案。这是我得到的:

-- Add the app version number
cd $PROJECT_DIR
cd "$BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app"

RELEASE_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" Info.plist)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue $RELEASE_VERSION" Settings.bundle/Root.plist

-- Add the build version number
BUILD_NUMBER=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" Info.plist)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:2:DefaultValue $BUILD_NUMBER" Settings.bundle/Root.plist

在构建版本号中,我想将 CFBundleVersion 替换为 xcode bot 集成号。

【问题讨论】:

【参考方案1】:

我在我的 Xcode 项目中使用 Shell 脚本构建阶段 实现了这一点。在我的例子中,我使用集成号来设置我构建产品的内部版本。我的脚本如下所示:

if [ "the$XCS_INTEGRATION_NUMBER" == "the" ]; then
    echo "Not an integration build…"
    xcrun agvtool new-version "10.13"
else
    echo "Setting integration build number: $XCS_INTEGRATION_NUMBER"
    xcrun agvtool new-version "$XCS_INTEGRATION_NUMBER"
fi

请注意,XCS_INTEGRATION_NUMBER 默认存在于 Xcode Server 构建环境中。如果您想模拟集成构建(出于此脚本的目的),您可以简单地将其作为自定义变量添加到构建设置中。

【讨论】:

【参考方案2】:

实际上,您甚至不需要 agvtool 将内部版本号设置为 Xcode bot 集成号。只需在项目设置中将内部版本号设置为 $XCS_INTEGRATION_NUMBER。

【讨论】:

【参考方案3】:

我在编译源代码步骤之前向我的目标构建阶段添加了(+)一个运行脚本。这一行脚本适用于我将集成号设置为内部版本号。谢谢 Kaelin,我只是想稍微简化一下。

[ -z "$XCS_INTEGRATION_NUMBER" ] && echo "Build #0" || xcrun agvtool new-version $XCS_INTEGRATION_NUMBER

【讨论】:

【参考方案4】:

我在 os 10.14.2 上使用 Xcode 10.1 进行设置,并发现需要进行一些修改才能使 Kaelin 的答案起作用。这是我的完整脚本:

#!/bin/sh
cd $XCS_PRIMARY_REPO_DIR
xcrun agvtool new-version -all "$XCS_BOT_NAME - Int. $XCS_INTEGRATION_NUMBER"

mods 是将目录 (cd) 更改为项目在构建时所在的位置。另一种是将 -all 添加到 xcrun 参数中。

【讨论】:

【参考方案5】:

我最近偶然发现了同样的问题。 有一种非常实用但丑陋的方式来获取有关 Xcode Bots 运行的最新集成数量的信息:

sudo grep -r "integration =" /Library/Server/Xcode/Logs/xcsbuildd.log | tail -1 | cut -d'=' -f 2| cut -d';' -f 1 |tr -d '\040\011\012\015'

我还创建了一个 *** 问题,以便找到一种更集成、更简单的方法来实现这一目标: Register for messages from collabd like XCSBuildService to receive Xcode Bots integration number

但也许如上所述解析 xcsbuildd.log 的方式足以满足您的目的。

【讨论】:

以上是关于如何将 Xcode Bot 集成编号添加到构建脚本中的主要内容,如果未能解决你的问题,请参考以下文章

如何在集成脚本之前取消/中止 XCode Bot 集成

您如何配置 Xcode Server (Bot) 以仅保留 n 个最近的集成?

Xcode CI - 用于上传到 Fabric 的 Bot 脚本给出错误“无法检测构建环境”

Xcode Bot 集成错误:无法映射

Xcode Bot 预集成触发期间 Python 脚本失败

如何从 Xcode Bot 将自动化构建部署到 TestFlight?