Запись в каталог info.plist для создания каталога с использованием новой системы сборки Xcode - PullRequest
0 голосов
/ 02 октября 2018

Перед использованием "Новой системы сборки" у нас был скрипт фазы сборки, подобный этому:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH"
builddate=`date`
/usr/libexec/PlistBuddy -c "Set :BuildDateString $builddate" "${infoplist}"

Смысл этого способа записи в plist во время выполнения без загрязнения проекта и необходимости копитьперемены.Это все еще работает хорошо и отлично при использовании "Legacy Build System".

В «Новой системе сборки» этот скрипт не работает.Переменные каталога и запись в plist будут работать, но изменения как-то перезаписываются.

Есть ли способ записи во встроенный список с помощью сценария фазы сборки?Если нет, то есть ли способ достичь цели записи информации только тогда, когда приложение работает без загрязнения локального репо.

1 Ответ

0 голосов
/ 17 января 2019

enter image description here

Похоже, что иногда в «Новой системе сборки» шаг Process Info.plist после всех шагов Run custom scripts.

Поэтому я использую скрипт для генерации другого custom.plist в связке

#!/usr/bin/env ruby
require 'cfpropertylist'
require 'pathname'

build_info = {
    'Time' => Time.now.to_s,
    'CommitHash' => `git log --pretty="%h" | head -n1`.rstrip
}

plist = CFPropertyList::List.new
plist.value = CFPropertyList.guess(build_info)
plist_path = Pathname.new(ENV['BUILT_PRODUCTS_DIR']) /  ENV['CONTENTS_FOLDER_PATH'] / 'build_info.plist'
plist.save(plist_path, CFPropertyList::List::FORMAT_XML)
...