2015-04-04 51 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