2015-03-28 4 views
0

Мне удалось воспроизвести сценарий фазы сборки from this SO question, который при каждом создании приложения увеличивает номер сборки. Может ли кто-нибудь предложить, как должен выглядеть скрипт, если я хочу, чтобы номер сборки был version.build, т.е. если моя версия приложения 0.2, я бы хотел, чтобы мой номер сборки был установлен в 0.2.001, 0.2.002 и т. Д. Затем, когда я изменить номер сборки 0.3, я хочу сборки перезагрузить 001, так что я получаю 0.3.001, 0.3.002 и т.д.Скрипт Xcode для наращивания сборки на основе версии

Вот мой текущий сценарий:

buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
buildNumber=$(($buildNumber + 1)) 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

UPDATE

Что я пытаюсь сделать, это следующее:

  • Получить shortVersion из plist файла (e.x. 0,2)
  • Получить BuildNumber из Plist файла (напр 0.2.007)
  • отделяющего BuildNumber в 0,2 и 007
  • Если 0,2 равен shortVersion, просто увеличивает 007 -> 008 и присоединиться к два снова так новый BuildNumber является 0.2.008
  • Else (бывший shortVersion было изменено на 0.3), сбросьте номер сборки на 001 и присоединиться к их вместе, чтобы получить новый buildNumber as 0.3.001

К сожалению, я ничего не знаю о сценариях bash, поэтому я был бы признателен, если кто-то сможет предоставить сценарий.

ответ

-1
#!/bin/bash 

# get the configuration 
conf=${CONFIGURATION} 

# only change build number if we are building for Release or AdHoc! 
if [ $conf == Release ] || [ $conf == AdHoc ]; then 

# get the build number 
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") 
echo "Old Build number $buildNumber" 

# split it by dots 
arrIN=(${buildNumber//\./ }) 

# get the last element position 
lastElementPosition=$((${#arrIN[@]} - 1)) 
# get the minor version from the last array element 
minorVersion=${arrIN[${lastElementPosition}]} 
# Increase it by 1 
minorVersion=$((minorVersion+1)) 
# Format it as 3 digit 
minorVersion=`printf "%03d" $minorVersion` 
echo "New minor version $minorVersion" 
# Update it on the array 
arrIN[$lastElementPosition]=$minorVersion 

# construct the build number now by joining the array 
buildNumber=$(IFS=. ; echo "${arrIN[*]}") 

echo "New Build number $buildNumber" 

#update it in plist 
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" 

fi 

Это именно тот скрипт, который вы хотите. Все объяснено на коде, так что вы должны увидеть, что я делаю

Ссылки для Баш функций, используемых в приведенном выше сценарии:

Расщепление строка из: https://stackoverflow.com/a/5257398/312312

номер Набивка из: https://stackoverflow.com/a/8789779/312312

Соединительная арматура от: https://stackoverflow.com/a/9429887/312312

+0

Hi. Я пробовал свой скрипт, но он делает сборки, такие как 437.001, 438.001 и т. Д. Хотя номер версии (чуть выше номера сборки в Xcode) остается 0.2 – artooras

+0

Все необходимые шаги объясняются в моем коде. Когда вы изменяете номер сборки до 0,3, вам придется сбросить сборку до 001 самостоятельно, так как сценарий bash не знает старую основную версию. Что касается версии, вам нужно будет использовать ключ 'CFBundleShortVersionString' – Lefteris

+0

Но если вы получите старый номер сборки, который содержит 0.2, и сравните его с' CFBundleShortVersionString', который равен 0,3, тогда счетчик может быть сброшен на 001 по коду, не так ли? – artooras