2014-04-10 44 views
11

我正在用Settings.bundle文件创建一个iPad应用程序。我正在编写构建脚本以显示应用程序版本号和xcode bot集成号(不是程序包内部版本号)。我搜索了网页并找不到任何解决方案。以下是我所得到的:如何将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 

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

回答

15

我在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的服务器构建环境。如果您想模拟集成构建(针对此脚本),则可以将其作为自定义变量简单地添加到构建设置中。

1

我最近偶然发现了同样的问题。 有越来越约Xcode的搜索引擎的最新整合号码信息的一个非常务实的,但丑陋的方式运行:

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如上所述的方式就足够您的目的。

+0

它不适合我。我总是得到一个空白的结果 – iDev

5

我加(+)一运行脚本我的目标构建阶段之前,为了编译源代码一步。这一行脚本适用于我将集成数设置为内部版本号。谢谢凯琳,我只是想简化一点事情。

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

实际上,您甚至不需要agvtool就可以将内部版本号设置为Xcode机器人集成号。只需在项目设置中将内部版本号设置为$ {XCS_INTEGRATION_NUMBER}即可。