iOS: изменение info.plist на этапе сборки - PullRequest
21 голосов
/ 02 августа 2011

Я пытаюсь сделать следующее:

  1. На этапе сборки откройте текстовый файл и прочитайте текст
  2. Измените значение свойства в info.plistк значению, полученному на шаге 1.

Могу ли я написать сценарий оболочки для этого?

Было бы здорово, если бы кто-то мог помочь мне достичь этого.

Ответы [ 4 ]

20 голосов
/ 14 октября 2014

Вероятно, самый простой способ - это использовать PlistBuddy.У меня есть фаза Run Script, которая выглядит следующим образом:

BUILD_NUMBER=`git rev-list HEAD --count`
INFO_PLIST="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
if [ -f "$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" ] ; then
    oldversion=`/usr/libexec/PlistBuddy -c "Print :CFBundleVersion" "$INFO_PLIST"`
fi
if [ "$BUILD_NUMBER" != "$oldversion" ] ; then
    /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "$INFO_PLIST"
fi

(Обратите внимание, что начиная с Xcode 6, вы должны запустить эту после фазы Copy Bundle Resources, потому что Info.plistне копируется в целевое местоположение до тех пор, и PlistBuddy не сможет.)

Редактировать 01/17: Обновлено, чтобы избежать ненужного копирования или подписания целей.Вы не хотите трогать Info.plist, если что-то действительно не изменяется, иначе Xcode будет рассматривать его (и, следовательно, цель) как измененный.Проверка предыдущего значения CFBundleVersion может значительно ускорить сборку - это сэкономило мне несколько секунд при сборке noop.

14 голосов
/ 02 августа 2011

Да, вы можете. Я бы сделал это в три этапа:

  1. Напишите сценарий оболочки, который запускается до первой фазы сборки. Пусть этот скрипт установит переменную окружения.
  2. Включить «Развернуть настройки сборки в Info.plist» для вашего проекта.
  3. Используйте переменную окружения в файле plist, как ${MY_COOL_SETTING}.
7 голосов
/ 02 августа 2011

@ PeyloW предлагает один из способов сделать это. Другой способ сделать это - добавить шаг сборки Run Script. На этом этапе вы можете переписать ваш Info.plist так, как вам нравится. Я делаю это все время, чтобы установить svnversion.

Я рекомендую поместить ваш скрипт в файл, а затем поместить . myscript.sh в фазу Run Script. Это легче понять и поддерживать, чем помещать весь скрипт непосредственно в Xcode.

3 голосов
/ 11 августа 2011

У меня есть файл сценария, который помещает номер сборки в поле моего info.plist. Я помещаю некоторый текст заполнителя в info.plist в проекте, а затем скрипт просто заменяет его. Это только увеличивает номер сборки на сборках выпуска. В сборках разработки просто говорится, что они являются сборкой разработки.

   if [ "$BUILD_STYLE" = "Release" ] 
   then
   if [ ! -f build-number ]; then
        echo 0 > build-number
   else
        expr  `cat build-number` + 1 > build-number.new
        mv build-number.new build-number
   fi

    perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`cat build-number`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
   else
    perl -pi -e s/BUILD_NUMBER_PLACEHOLDER/`echo Development`/ $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Contents/Info.plist
   fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...