注册来自协作的消息,如XCSBuildService,以接收Xcode Bots集成号

在Xcode Bots构建期间,每次运行都会获得一个分配的集成号 。 此编号不会显示在构建日志中,但可以方便地将http链接创建回CI环境或企业app store中构建的各个Xcode Bots。

/Library/Server/Xcode/Logs/xcsbuildd.log中,我发现XCSBuildService从包含集成号的结构的collabd获取消息/事件。

有没有办法在自己的(OSX)程序中注册同一事件并接收此消息/事件?


到目前为止,我发现获取Xcode Bots集成号的唯一丑陋方法是解析xcsbuildd.log文件,其缺点是当多个构建并行执行时,我无法确定最新的集成号是否与我当前的构建相对应。 此日志文件也位于读取受保护的文件夹/文件中,因此我必须更改权限(呃!)或使用sudo(我真的不想这样做)!?

例:

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' 

给我从空白处剥离的最新集成号…

编辑:刚刚发现,如果您在方案中实际包含以下脚本作为Build-post-action,它将创建一个文件(例如/ Library / Server / Xcode / Data / BotRuns / Cache / 22016b1e-2f91-4757-b3b8- 322233e87587 / source / integration_number.txt)具有集成号,无需sudo。 Xcode Bots似乎序列化了不同的构建,因此它们不是并行执行的,因此可以使用文件中创建的集成号。

 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' > ${PROJECT_DIR}/integration_number.txt 

特别是获取集成内部版本号的情况,我在这里添加了一个简单的答案。

重复自己(并保持这个不被拒绝投票为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 

请注意, Xcode服务器构建环境中默认存在XCS_INTEGRATION_NUMBER 。 如果要模拟集成构建(出于此脚本的目的),只需将其作为自定义变量添加到构建设置中即可。