2015-04-04 136 views
2

我需要在构建/归档之前调整我的项目的构建版本和版本号。
我尝试了很多东西,但迄今无济于事。在构建Xcode之前运行一个shell脚本

我用脚本添加了一个目标来更新数字,并将其作为第一个依赖项添加到我的主目标中。但是因为我有多个依赖项,因为我的应用程序中有扩展名,并且所有依赖项都是由Xcode并行执行的(或者至少按照随机顺序执行),这是行不通的。

我在我的方案中添加了一个预执行,结果相同。在继续构建之前,Xcode并没有等待我的预先动作完成(我添加了睡眠100来测试)。

由于我正在修改内部版本号,所以脚本可以在其他任何事情开始之前完成,这一点至关重要,但也有一个副作用:由于plist文件已被更改同时建立相关目标。

是什么让它更加困难是,我想用agvtools来设置我的版本&内部版本号。这显然启动了我无法控制的后台进程来改变plists。

声明:我已搜索other answers,没有帮助。

回答

6

agvtools在Xcode版本中不起作用。它会一直停止构建。 PlistBuddy的工作正常,虽然设置不够好,整洁。

我添加预执行到建立在我的主要方案调用一个新的目标在我的项目:

xcodebuild -project "${SRCROOT}/MAIN_APP.xcodeproj" -scheme BuildNumberPreProcess 

在目标BuildNumberPreProcess我有一个运行脚本

VERSION=$(head -n 1 version.txt) 
BUILD=`git rev-list $(git rev-parse --abbrev-ref HEAD) | wc -l | awk '{ print $1 }'` 

echo "${VERSION} (${BUILD})" 

SCRIPT="${SRCROOT}/CLIENT/Supporting Files/set-version-in-plist.sh" 

"${SCRIPT}" "${SRCROOT}/MAIN_APP/Supporting Files/Info.plist" ${VERSION} ${BUILD} 
"${SCRIPT}" "${SRCROOT}/EXTENSION/Info.plist" ${VERSION} ${BUILD} 
... 

集版本功能于plist.h:

#!/bin/sh 

# set-version-in-plist.sh 
# 
# usage: 
# set-version-in-plist LIST VERSION BUILD 
# LIST:  Info.plist path & name 
# VERSION: version number xxx.xxx.xxx 
# BUILD:  build number xxxxx 
# 

# Location of PlistBuddy 
PLISTBUDDY="/usr/libexec/PlistBuddy" 

echo "$1: $2 ($3)" 

${PLISTBUDDY} -c "Set :CFBundleShortVersionString $2" "$1"; 
${PLISTBUDDY} -c "Set :CFBundleVersion $3" "$1"; 
+1

好的解决方案!唯一的缺点是:运行后Info.plist文件是'脏'的,这意味着您不断检查更新后的文件到您的GIT仓库。在完美的世界中,最好不要修改源文件,只修改构建结果中的plists。 – stk 2015-10-06 11:07:49

+2

我正在恢复后期构建脚本中的更改;) – dogsgod 2015-10-06 11:09:22

+0

不错! :)也会这样做,谢谢! – stk 2015-10-06 11:09:52

1

的Xcode对构建/归档命令行工具:https://developer.apple.com/library/ios/technotes/tn2339/_index.html

所以,你可以编写shell脚本,在第一次运行脚本,用于调整建立/版本号,然后运行Xcode的构建/归档的命令行工具。

+0

不错的尝试,但这确实打破其他事情(组织者不会知道新版本,我看不到格式化的日志,...) – dogsgod 2015-04-08 13:13:00

相关问题