Как изменить переменные среды сборки Xcode из сценария фазы сборки?
Можно ли изменить переменную среды Xcode BuildSettings на этапе сборки в скрипте?
Вся идея в следующем: я хочу опубликовать проект с открытым исходным кодом с юнит-тестами. Мои тесты требуют конфиденциальных данных, таких как "логин" и "пароль", поэтому я не могу жестко их кодировать. Я хочу пройти через среду процесса, чтобы иметь возможность сделать что-то вроде этого:
let login = ProcessInfo().environment["login"]!
Я нашел способ передачи переменной из среды параметров сборки в процесс тестирования: выберите схему "Тесты", перейдите к переменным среды и добавьте новое значение с именем "login" и значением "$(login)". Если я установлю значение для "входа в систему" прямо на вкладке "Настройки сборки" - оно будет доступно из ProcessInfo, как я и ожидал.
Но я хочу установить "login" из файла сценария корневой папки проекта "SetupCreds.sh", который находится в.gitignore, поэтому в нем безопасно хранить логин и пароль. Итак, идея такова:
- Добавить сценарий фазы сборки
- Этот скрипт запускает "SetupCreds.sh"
- "SetupCreds.sh" состоит из строк экспорта, таких как
export login="MyLogin
Если я добавлю echo ${login}
в сценарии фазы сборки он говорит мне, что "login" действительно имеет значение "MyLogin". Но этот экспорт не влияет на среду Build Settings, только на среду сценария Build Phase.
Как сделать экспорт, который переопределяет переменные среды Build Settings? Или, может быть, есть другой способ сделать то, что я хочу?
0 ответов
Я скопировал ответ @Vladex, упомянутый в комментариях здесь, чтобы его было легче читать.
- Добавьте следующий этап сценария сразу после сценария "Копирование ресурсов".
$file then
copy_target="${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.xctest/Tests.cfg"
cp -r $file $copy_target echo "Tests.cfg file copied to
${copy_target}" else echo "warning: No Tests.cfg file found. Some
tests will be ignored." fi
- Поместите "Tests.cfg" в gitignore.
- Создайте файл "Tests.cfg" и заполните его важными или специфическими для конфигурации значениями.
- В тестах используют
Bundle.for(type(of: self).self)
чтобы получить URL "Tests.cfg".