У меня есть некоторые динамические значения, которые мне нужно изменить в зависимости от типа сборки, которую я делаю в Xcode.
Я создал 2 схемы DEV и PROD и в каждой установил переменные среды.
Затем я использую их в коде следующим образом
var serviceDomain: String {
let envVar = ProcessInfo.processInfo.environment
guard let value = envVar["APP_SERVICE_DOMAIN"] else { fatalError("Missing APP_SERVICE_DOMAIN enviroment variable") }
return value
}
Это правильный подход?
После компиляции приложения следует ли связывать с ним эти значения?
У меня проблема в том, что как только я остановил свой симулятор, если я попытаюсь открыть приложение, созданное таким образом, оно выйдет из строя, и я подозреваю, что переменные среды больше не присутствуют.
Короче говоря, мне нужна сборка для разработчика, использующая один набор переменных, и сборка для выпуска / производства, использующая другой.





Вам вообще не нужны переменные среды!
Заходим в настройки сборки и ищем активные условия компиляции:
Добавьте DEBUG для отладки и RELEASE для выпуска, как я сделал здесь.
Затем объявите свои переменные. Допустим, вы хотите, чтобы a был 1 в режиме выпуска и 2 в режиме отладки,
#if RELEASE
let a = 1
#elseif DEBUG
let a = 2
#endif
И это все!
Компилятор выберет одно из значений для компиляции в зависимости от конфигурации сборки вашей схемы. Здесь это отладка, поэтому будет использовано 2:
Спасибо, так что я должен использовать этот оператор if, возможно, в каком-то файле констант, как я полагаю?
@HarryBlue Да, вы можете поместить это в постоянный файл или в любое другое место. Это не имеет значения.
Что касается области действия переменных среды, вы правы: они определены Xcode и, как таковые, не будут присутствовать при запуске вашего приложения за пределами IDE. Вам нужно будет определить значения по умолчанию в вашем коде (или во внешнем файле), если вы хотите следовать этому подходу.