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

Как получить XCode для добавления даты и времени сборки в файл Info.plist

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

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

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

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

и на основании ответов там я вошел в Редактор Схемы и добавил script ниже в раздел "Последействия" этапа сборки:

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

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

BuildDateAction.jpg

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

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

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

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

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

4b9b3361

Ответ 1

Код в ответе Майкла неверен или больше не обновляется. Следующая версия исправляет ошибку в синтаксисе set, а также поддерживает пути сборки с пробелами в них.

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

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

Ответ 2

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

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

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

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" ), я был бы рад узнать (и, конечно же, я соглашусь и использую это превосходный ответ тоже).

Ответ 3

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

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