XCode 4: Вставить номер версии Subversion в XCode - PullRequest
1 голос
/ 19 апреля 2011

Да, это очень связано с этим вопросом , но я думаю, что на этот вопрос дан адекватный ответ для XCode 3. Не уверен, следует ли это объединить или нет.

Итак, используя аналогичные инструкции оттуда, у меня давно получился приятный эффект того, что номера сборки были закодированы в заархивированные файлы .ipa, так что Организатор показывает версии наподобие «1.0.3281» (где 3281 - это версия, представленная ниже скрипт сборки, прикрепленный к моей целевой iOS):

REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
echo "REV=$REV"
echo "#define kRevisionNumber @\"$REV\"" > ${PROJECT_DIR}/revision.h
echo "INFOPLIST_PATH=${INFOPLIST_PATH}"

BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "${INFOPLIST_FILE}" | sed 's/,/, /g'`
echo "BASEVERNUM=$BASEVERNUM"
PLISTARG1="Set :CFBundleVersion $BASEVERNUM.$REV"
echo "PLISTARG1=$PLISTARG1"

/usr/libexec/PlistBuddy -c "$PLISTARG1" "${TARGET_BUILD_DIR}"/${INFOPLIST_PATH}

Однако, XCode 4 (который я с тех пор полюбил) явно нуждается в некоторой настройке, так как эта магия только работает. Вот результат приведенных выше сценариев.

REV=3281
INFOPLIST_PATH=Foo.app/Info.plist
BASEVERNUM=1.0
PLISTARG1=Set :CFBundleVersion 1.0.3281

И, посмотрев в ~ / Library /.../ Foo.app/Info.plist, я вижу, что да, он обновил нужную версию:

<key>CFBundleVersion</key>
<string>1.0.3281</string>

Очевидно, что дополнительный файл нуждается в обновлении ... возможно, в .xcarchive? Любые предложения о том, где в первую очередь углубиться?

Ответы [ 3 ]

5 голосов
/ 29 июня 2011

Я не уверен насчет угла архивации, но в Xcode 4 у меня работает следующее (т.е. мое приложение занесено в органайзер как Foo 1.0.307)

  1. Вручнуюустановите CFBundleShortVersionString (он же «Bundle version string, short») значение в вашем info.plist на ваш major.minor номер сборки (например, 1.0)

  2. Добавить 'скрипт запуска'этап сборки вашего проекта с помощью следующего сценария

    REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
    BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${INFOPLIST_FILE}"`
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${INFOPLIST_FILE}"
    
  3. Очистка и сборка (шаг Очистка заставляет Xcode повторно обработать info.plist).

Кстати, вы также можете получить доступ к этому номеру версии внутри своего приложения (например, на странице «О нас»), используя [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]

0 голосов
/ 04 сентября 2013

будет отображаться в органайзере, НО ваш plist нуждается в ключе DDBundleBaseVersion (ключ, который я составил. Он должен содержать исходное значение ShortVersionString)

PLIST=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH};
REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :DDBundleBaseVersion" "${PLIST}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${PLIST}"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $BASEVERNUM.$REV" "${PLIST}"

не будет отображаться в органайзере, но будет работать нормально:

PLIST=${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH};
REV=`svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`
BASEVERNUM=`/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${PLIST}"`
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BASEVERNUM.$REV" "${PLIST}"
0 голосов
/ 09 октября 2011

Если ваш скрипт обновит оба поля CFBundleVersion а также CFBundleShortVersionString затем .xcarchive покажет вам правильную версию

Но может быть, вы найдете лучший путь? Способ без обновления CFBundleShortVersionString приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...