как заставить XCode добавить дату и время сборки в файл Info.plist - PullRequest
15 голосов
/ 30 октября 2011

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

Мой босс не доверяет мне (или любому другому процессу) увеличивать номер сборки, он также хочет, чтобы в приложении были указаны дата и время сборки.Я хотел бы поместить это в обычный файл Info.plist.

Я нашел этот связанный вопрос:

Сборка информации в приложении iOS (приложение даты / времени было построено)

и, основываясь на ответах, я вошел в редактор схем и добавил приведенный ниже скрипт в раздел «Пост-действие» фазы сборки:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    defaults write "${infoplist%.plist}" BuildDate "${builddate}"
fi

В XCodeмое окно редактора схем выглядит так:

image

К сожалению, BuildDate никогда не записывается в Info.plist.

Изменение "$ {builddate}" на "$ builddate" также не работает.Я добавил эту строку в скрипт:

echo "build date is $builddate" > /tmp/result.txt

, и дата выглядела отлично в выписанном файле.Запись строк в файл Info.plist из вышеприведенного скрипта работает отлично, довольно досадно.

Итак, подытожив, как получить дату для добавления в файл Info.plist?

Ответы [ 3 ]

6 голосов
/ 30 октября 2011

Аааа, я должен был потратить еще 30 минут (вдобавок к 2 часам, которые я уже потратил впустую) и посмотреть ответы на этот вопрос, прежде чем опубликовать свой:

Вставить номер версии Subversion в Xcode

Этот сценарий пост-действия делает свое дело и работает для меня:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    # if BuildDateString doesn't exist, add it
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}"
    # and if BuildDateString already existed, update it
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}"
fi

Как вы можете видеть, он делает хак там (добавляя его, если он не существует; устанавливая его сразу после этого).

Если кто-то может предложить решение с использованием описанного выше метода «записи по умолчанию» (который, я думаю, может быть лучше поддерживается, чем «PlistBuddy»), я был бы рад узнать (и, конечно, я приму и использую это превосходный ответ тоже).

4 голосов
/ 25 мая 2015

Код в ответе Михаила неверен или более не обновлен.В приведенной ниже версии исправлена ​​ошибка в заданном синтаксисе, а также поддерживаются пути сборки с пробелами в них.

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
if [[ -n "$builddate" ]]; then
    # if BuildDateString doesn't exist, add it
    /usr/libexec/PlistBuddy -c "Add :BuildDateString string $builddate" "${infoplist}"
    # and if BuildDateString already existed, update it
    /usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}"
fi

Примечание. Это изменение было отправлено как изменение, но отклонено, и у меня пока недостаточно репутацииоставить комментарий к своему ответу ...

3 голосов
/ 30 октября 2011

Я использую ваш точный код, но в пред-действии вместо пост-действия, и info.plist в собранном продукте правильно сообщает дату сборки. Другими словами, вы должны настроить ваш info.plist перед тем, как скопировать его во встроенный продукт, что мне кажется разумным.

Кстати, спасибо за предложение, это довольно умно и полезно.

...