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

IOS: изменение info.plist во время фазы сборки

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

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

Можно ли написать оболочку script для этого?

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

4b9b3361

Ответ 1

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

  • Напишите оболочку script, которая запускается до первой фазы сборки. Пусть этот script задает переменную среды.
  • Включите "Развернуть настройки сборки в Info.plist" для проекта.
  • Используйте переменную окружения в файле plist, например ${MY_COOL_SETTING}.

Ответ 2

Вероятно, самый простой способ - использовать 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, вы должны запустить это после фазы "Ресурсы копирования Bundle", потому что Info.plist не копируется в целевое местоположение до тех пор, пока PlistBuddy не завершится.)

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

Ответ 3

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

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

Ответ 4

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

   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