Подтвердить что ты не робот

Как автоматически увеличивать версию Bundle в Xcode 4?

Я пытаюсь выяснить, как автоматически увеличить число версий Bundle в моем проекте Xcode 4 (для специальных и выпускных сборок). Я нашел несколько сценариев в Интернете, которые претендуют на это, но я не уверен, разместить их в "Pre-actions" или "Post-actions". Я также не уверен, какую ценность я должен разместить в plist; число, которое script затем изменит или переменную?

Все варианты, которые я пробовал до сих пор, похоже, не работают, поэтому любая помощь будет принята с благодарностью.

Ниже приведен самый последний script, который я пытался использовать:

conf=${CONFIGURATION}
arch=${ARCHS:0:4}
# Only increase the build number on Device and AdHoc/AppStore build
if [ $conf != "Debug" ] && [ $conf != "Release" ] && [ $arch != "i386" ]
then
buildPlist=${INFOPLIST_FILE}
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBuildVersion" $buildPlist)
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBuildNumber" $buildPlist)
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBuildNumber $buildNumber" $buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildVersion.$buildNumber" $buildPlist
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion.$buildNumber" $buildPlist
fi
4b9b3361

Ответ 2

1, установите CFBundleVersion в 1.0.1 или что-то вроде x.x.x

1

2, добавьте фазы сборки для запуска оболочки script autoVersion.sh

2

3, сохраните ниже script с именем autoVersion.sh

#!/bin/sh
# Auto Increment Version Script
# set CFBundleVersion to 1.0.1 first!!!
# the perl regex splits out the last part of a build number (ie: 1.1.1) and increments it by one
# if you have a build number that is more than 3 components, add a '\.\d+' into the first part of the regex.
buildPlist=${INFOPLIST_FILE}
newVersion=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$buildPlist" | /usr/bin/perl -pe 's/(\d+\.\d+\.)(\d+)/$1.($2+1)/eg'`
#echo $newVersion;
/usr/libexec/PListBuddy -c "Set :CFBundleVersion $newVersion" "$buildPlist"

4, запустите оболочку: cp autoVersion.sh ~/Documents/и chmod 777 ~/Documents/autoVersion.sh

5, Постройте и наслаждайтесь.:)

perl-код из: https://gist.github.com/1436598

Ответ 3

Те же идеи, что и Alix, но гораздо проще:

buildNumber=`/bin/date +%Y%m%d%H%M%S`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

Добавьте это как элемент Run Script в Build Phases на ваш Target. Преимущество состоит в том, что монотонно увеличивается.

Ответ 4

Для тех, кто хочет интегрировать расширение версии в сборку командной строки script (возможно, для непрерывной интеграции), см. следующие команды:

    # cd into the project folder containing the plist
    cd /Users/waitea/iOS/E.ON/iOS/trunk/Eon

    # grab the version numbers
    major_version=$(grep -C 2 CFBundleVersion App-Info.plist | grep -o '[0-9]\+.[0-9]\+.[0-9]\+')
    major_version_min=$(echo $major_version | grep -o '[0-9]\+.[0-9]\+\.')
    minor_version=$(echo $major_version | grep -o '[0-9]\+$')

    # increment the minor version
    increment=`expr $minor_version + 1`
    incremented_whole_version="$major_version_min$increment"

    # replace the build number in the plist using perl
    /usr/bin/perl -p -i -e "s/$major_version/$incremented_whole_version/g" App-Info.plist

Это приведет к увеличению самого правого числа в номере версии стиля x.x.x. Подстройте reg-ex для изменения для вашего соглашения.

Потратил меня на то, чтобы подумать, что я поделюсь, чтобы вернуть сообщество!

EDIT - я создал систему непрерывной интеграции, которая сделает это для вас

https://github.com/adamwaite/XcodeProject

Ответ 5

Это может вам помочь. Я использую его в своих проектах. https://gist.github.com/alokc83/5207294

#!/bin/sh
# xcode-build-number-generator.sh
# @desc Automaticvally create build number every time using curent day, month and year
# @usage
# 1. Select: your Target in Xcode
# 2. Select: Build Phases Tab
# 3. Select: Add Build Phase -> Add Run Script
# 4. Paste code below in to new "Run Script" section
# 5. Drag the "Run Script" below "Link Binaries With Libraries"


#Credits 
# [email protected] for intial direction about automatic versioning
# http://www.codinghorror.com/blog/2007/02/whats-in-a-version-number-anyway.html (For unferstanding the Software Versoining)
#Feel free to leave comment or report issues


MONTH=`date | awk '{print $2}'`

case "$MONTH" in
  'Jan' )
         MONTHNUMBER=1
     ;;
    'Feb' )
         MONTHNUMBER=2
    ;;
    'Mar' )
    MONTHNUMBER=3
    echo "Month is $MONTHNUMBER"
    ;;
    'Apr' )
         MONTHNUMBER=4
    ;;
    'May' )
         MONTHNUMBER=5
        ;;
    'Jun' )
         MONTHNUMBER=6
        ;;
    'Jul' )
         MONTHNUMBER=7
        ;;
    'Aug' )
         MONTHNUMBER=8
        ;;
    'Sep' )
         MONTHNUMBER=9
        ;;
    'Oct' )
         MONTHNUMBER=10
        ;;
    'Nov' )
         MONTHNUMBER=11
        ;;
    'Dec' )
         MONTHNUMBER=12
        ;;
esac

DATE=`date | awk '{print $3}'`
echo "Date = $DATE"
YEAR=`date | awk '{print $6}'`
echo "Date = $YEAR"

### only uncomment section below if testing the format in terminal
#echo "BuildNumber1 = $MONTH$DATE$YEAR"
#echo "or BUILD NUMBER = $DATE$MONTH$YEAR"
#echo "or BUILD NUMBER = $MONTHNUMBER$DATE$YEAR Format is |Month Number Date Year|"
#echo "or BUILD NUMBER = $DATE$MONTHNUMBER$YEAR format is |Date MonthNumber Year|"
############################

#### Uncomment only one one style or last one will be in effect
#buildNumber=$MONTH$DATE$YEAR
#buildNumber=$DATE$MONTH$YEAR
buildNumber=$MONTHNUMBER$DATE$YEAR
#buildNumber=$DATE$MONTHNUMBER$YEAR


echo "Final Build number is $buildNumber"
## Below command write buildNumber in the property list
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${PROJECT_DIR}/${INFOPLIST_FILE}"

Ответ 6

Я обнаружил, что использование многоуровневых xcconfigs помогает этой проблеме.

Работая над сложными сборками с приложениями, библиотеками и SDK, вы должны иметь возможность координировать не просто создание номеров для каждого проекта, но и совместимость номера сборки.

Вы можете создать заголовок управления сборкой, который является фактически текстовым файлом с номерами итераций сборки (или информацией о версиях, то есть бета, dev, rel) и импортировать ее через цепочку импорта xcconfig для каждого проекта.

В этот момент вы можете создать шаг сборки script, который будет встраивать вашу информацию о build/versioning. Это также лучше всего сделать, поместив текст в ваш plist и запустив PlistBuddy в ваши производные файлы/построенные разделы файлов. (Таким образом, ваши изменения управления версиями минимальны)

Если вы можете написать выполнение сборки script, которое делает нужное количество строк сборки (или, еще лучше, используйте такую ​​систему, как bamboo, которая создает файл для вас), вы можете сохранить это отдельно от своего кода. Если вам нужно сделать это и отслеживать, вам может потребоваться проверить измененный номер сборки, чтобы он мог увеличиваться.

В результате я смог сохранить номера строчек вдоль строки: 2.0.3 b34 (3473) Где у нас есть номер сборки и точка сборки проверки SVN. (Пожалуйста, нет git дедовщина, я старая школа)

Действия Pre/Post больше для уведомлений или процессов Uber: Электронная почта, что сборка началась/не удалось /etc Скопируйте выполненный проект на готовый сервер проекта.

Все остальное работает лучше, чем Build Script.

(И как всегда: сделайте фазовый вызов script внешним script файлом. НЕ вставляйте ваш script в проект, черт возьми, источник, управляющий файлом проекта)

Надеюсь, что это поможет.

Ответ 7

FWIW - это то, что я сейчас использую, чтобы увеличить номер сборки только для релизов (включая архивирование). Работает отлично под Xcode 5.1.

Просто скопируйте/вставьте фрагмент в фазу выполнения script непосредственно в Xcode:

buildnum=$(/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$PRODUCT_SETTINGS_PATH")

if [ "$CONFIGURATION" = "Release" ]; then
buildnum=$((buildnum + 1))
echo "Build number updated to $buildnum"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildnum" "$PRODUCT_SETTINGS_PATH"
fi;

Ответ 8

Если вы используете систему версий типа "x.x.x", вы можете добавить этот прогон script. Он будет увеличивать номер версии (x.x.x + 1) каждый раз при создании новой сборки:

if [ "${CONFIGURATION}" != "Debug" ]; then

VERSIONNUM=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${PROJECT_DIR}/${INFOPLIST_FILE}")

NEWSUBVERSION=`echo $VERSIONNUM | awk -F "." '{print $4}'`

NEWSUBVERSION=$(($NEWSUBVERSION + 1))

NEWVERSIONSTRING=`echo $VERSIONNUM | awk -F "." '{print $1 "." $2 "." $3 ".'$NEWSUBVERSION'" }'`

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $NEWVERSIONSTRING" "${PROJECT_DIR}/${INFOPLIST_FILE}"

fi