Как получить 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?
Ответы
Ответ 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, прежде чем копировать его в встроенный продукт, что звучит разумно для меня.
Кстати, спасибо за предложение, это довольно умно и полезно.