Если вы работаете в команде в крупной компании, скорее всего, у вас настроено несколько рабочих сред. Названия могут быть разными, но обычно это: среда разработки, в которой разработчики выполняют свою работу, среда тестирования - для QA-специалистов, и продакшн.
Если вы работаете в одиночку, то для небольшого приложения эти среды у вас могут быть не настроены. Но даже если и так, вы все равно можете извлечь выгоду из создания файла конфигурации сборки Xcode для разных параметров сборки.
Вы можете открывать файлы конфигурации вне Xcode и в любом текстовом редакторе. T.к. все свойства представлены в виде обычного текста, их легче читать, и вам не нужно перемещаться по лабиринту настроек сборки Xcode.
Одним из популярных вариантов использования файла конфигурации является управление константами в разных средах. Мы используем его для хранения базового URL-адреса для нашего API.
Я советую прочитать эту статью Мэтта из NSHipster об Управлении Секретами на iOS. Он рекомендует никогда не использовать файлы конфигурации Xcode для управления ключами API (или секретами). Лучший способ сохранить ваши секреты в безопасности — запутать(*смешать) их с помощью генерации кода.
Или, говоря словами Джулиана Ассанжа:
«Единственный способ сохранить секрет — никогда его не иметь».
Файл Настроек Конфигурации
Файлы конфигурации сборки Xcode или .xcconfig файлы позволяют нам определять и управлять настройками сборки для наших приложений в виде обычного текста. Каждый файл состоит из последовательности свойств "ключ-значение" в формате KEY_NAME = value, где значение может быть String, Int, Bool или другими определенными форматами. Узнать больше про формат файла настроек конфигурации вы можете в документации Apple Xcode Help.
В своем проекте Xcode в любом месте создайте новый Configuration Settings File и назовите его Configuration. Убедитесь, что вы не выбрали для него никаких таргетов.
Затем добавьте свойство(*параметр) для вашего базового URL-адреса в файл:
// Example:
BASE_URL = awesome.example.com
Info.plist
Параметры сборки, определенные проектом Xcode и файлами конфигурации, доступны только во время сборки. Когда вы компилируете приложение, ничего из этого недоступно. Как и должно быть.
После создания свойства BASE_URL вам необходимо добавить его в файл Info.plist. Он будет скомпилирован во время сборки на основе предоставленных параметров сборки и скопирован в бандл приложения.
Но подождите, в Xcode нет файла Info.plist. После выпуска Xcode 13 при создании нового проекта больше нет файла Info.plist по умолчанию. Этот файл опциональный и создается только при необходимости. Вместо него нас склоняют использовать настройки сборки Xcode.
Выберите свой проект в Xcode и перейдите на вкладку info. Разверните Configurations и добавьте ваш Configuration.xcconfig файл в Debug и Release. У нас есть только один файл конфигурации, но здесь вы можете настроить разные файлы конфигурации для разных сред:
![](https://habrastorage.org/getpro/habr/upload_files/2be/4c7/b4c/2be4c7b4cecfe4ba14a79b5f989d084b.png)
Теперь все, что осталось сделать, это добавить ссылку на свойство в настройках сборки таргета.
Пользовательские Свойства Таргета в iOS
Добавляя ссылку на свойства конфигурации, вы можете получить доступ к их значениям с помощью Bundle API из Foundation.
Выберите таргет вашего проекта в Xcode и перейдите на вкладку Info. Выберите любое свойство в Custom iOS Target Properties и нажмите кнопку +, чтобы добавить новое.
Добавьте BASE_URL со ссылкой на ваше свойство конфигурации $(BASE_URL):
![](https://habrastorage.org/getpro/habr/upload_files/236/97f/a6f/23697fa6f826217109677e0ec628a805.png)
После добавления свойства в ваш проект автоматически добавляется файл Info.plist. Все ваши пользовательские свойства будут храниться здесь.
Теперь все, что вам нужно сделать, это получить доступ к базовому URL-адресу в вашем коде.
Бандл
Bundle - представление кода и ресурсов, хранящихся в каталоге пакета на диске.
Создайте новый файл Swift и назовите его как хотите. Я назову его Environment. Добавьте в файл следующий код:
import Foundation
public struct Environment {
enum Keys {
static let baseURL = "BASE_URL"
}
// Get the BASE_URL
static let baseURL: String = {
guard let baseURLProperty = Bundle.main.object(
forInfoDictionaryKey: Keys.baseURL
) as? String else {
fatalError("BASE_URL not found")
}
return baseURLProperty
}()
}
Здесь вы создаете новую struct Environment и enum Keys, который определяет все ваши пользовательские ключи. Затем вы создаете константу baseURL, чтобы получить значение из пакета. Теперь у вас есть доступ к его значению там, где это необходимо.
Давайте распечатаем его во Вью, чтобы убедиться, что он работает:
Заключительные Размышления
Файлы конфигурации сборки Xcode весьма полезны для управления свойствами конфигурации между различными средами. Вы также можете использовать их, чтобы легко назначить другое имя приложения и значок приложения для конкретной среды.
Что делает их особенно полезными, так это то, что вы можете открывать их вне Xcode с помощью любого текстового редактора. Он также сохраняет ваши свойства конфигурации за пределами вашего кода.
Спасибо за прочтение и счастливо!