在Xcode中编译之前运行一个shell脚本

我需要在构build/存档之前调整我的项目的版本号和版本号。
我尝试了很多东西,但迄今为止无济于事。

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

我在我的scheme中添加了一个前置操作,结果相同。 在继续构build之前,Xcode并没有等待我的预执行完成(我添加了一个睡眠100来testing)。

由于我正在修改内部版本号,因此脚本可以在其他任何事情开始之前完成,但是还有一个副作用是至关重要的:构build甚至停止,因为在构build相关内容时plist文件已被更改目标。

更难的是,我想使用agvtools来设置我的版本和内部版本号。 这显然启动了我无法控制的后台进程来改变plists。

免责声明:我已经寻找其他答案 ,没有帮助。

agvtools在Xcode构build中不起作用。 它会一直停止构build。 PlistBuddy的工作正常,虽然设置不是很好,整齐。

我在主要scheme中为构build添加了一个Pre-Action,以在我的项目中调用一个新的目标:

 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"; 

Xcode具有用于构build/存档的命令行工具: https : //developer.apple.com/library/ios/technotes/tn2339/_index.html

所以,你可以编写shell脚本,首先运行脚本来调整构build版本号,然后运行xcode build / archive作为命令行工具。