Как стать автором
Обновить

Комментарии 2

Мы не можем напрямую из кода получить доступ к этим настройкам

Вообще-то можем, если сделать это в C/C++/ObjC коде, т.к. сишные макросы позволяют задавать им произвольные значения, в т.ч. и строковые.

Для этого в настройку GCC_PREPROCESSOR_DEFINITIONS записывается SERVER_URL=\"$(SERVER_URL)\" (имя макроса с левой стороны можно выбрать любое), что делает доступным макрос SERVER_URL в C коде, который превратится в строковый литерал.

Далее создаем пару .h/.m файлов, в которые поместим функцию (или класс, как душе угодно), возвращающую наш макрос в виде подходящего ObjC объекта:

NSURL *serverURL(void) {
  return [NSURL urlWithString:@SERVER_URL];
}

В принципе, @ можно поместить и прямо в определение макроса. Также можно добавить_NonNullдля возвращаемого типа либо просто обернуть объявления в NS_ASSUME_NONNULL_BEGIN/NS_ASSUME_NONNULL_END в заголовочном файле.

Осталось поместить созданный заголовочный файл в bridging header — и Свифт код сможет увидеть функцию serverURL().

Спасибо за уточнение, исправил данный момент.

Статья писалась на swift, и пример на swift, но ваше замечание достаточно важное!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории