Библиотека SwiftConfig для управления конфигурацией iOS/macOS приложений
SwiftConfig — это легковесная библиотека на языке Swift, предназначенная для удобного управления конфигурациями в iOS и macOS приложениях. Она позволяет отделить настройки (API-ключи, URL endpoints, флаги фич) от кода, храня их в структурированных файлах (JSON, YAML, plist) или переменных окружения.
Зачем нужна SwiftConfig?
В современных приложениях часто требуется менять поведение без перекомпиляции: переключение между staging/production серверами, A/B тестирование, изменение таймаутов. Ручное хранение конфигов в UserDefaults или хардкод приводит к ошибкам и усложняет поддержку. SwiftConfig решает эти проблемы, предоставляя:
- Типобезопасный доступ к значениям через enum и Codable
- Поддержку нескольких источников (файлы, env, UserDefaults)
- Автоматическое обновление при изменении файлов (например, для SwiftUI previews)
- Валидацию схемы конфигурации при запуске
Установка
Добавьте библиотеку через Swift Package Manager в Xcode:
File → Add Packages → введите URL репозитория SwiftConfigИли добавьте в Package.swift:
.package(url: "https://github.com/example/SwiftConfig.git", from: "1.0.0")Основные функции
- Мультиформатность: автоматическое определение формата файла (json, yaml, plist)
- Environment overlay: значения из переменных окружения имеют приоритет над файлами
- Кэширование: парсинг происходит один раз, далее данные хранятся в памяти
- Protocol-based: вы определяете протокол с требованиями, библиотека генерирует имплементацию
Пример кода на Swift (iOS/macOS)
import SwiftConfig
// Определяем структуру конфигурацииstruct AppConfig: Codable { let apiURL: String let timeout: Double let isFeatureXEnabled: Bool}
// Загружаем конфиг из файла config.jsonlet configManager = try ConfigManager<AppConfig>(source: .file("config"))
// Используем в кодеlet url = URL(string: configManager.current.apiURL)!let session = URLSession(configuration: .default)session.configuration.timeoutIntervalForRequest = configManager.current.timeout
// Для SwiftUI можно использовать @Publishedclass SettingsViewModel: ObservableObject { @Published var config: AppConfig init() { self.config = try! ConfigManager<AppConfig>(source: .file("config")).current }}Когда использовать SwiftConfig?
- В multi-environment проектах (dev/staging/prod)
- При необходимости менять поведение приложения без ре-деплоя
- Для работы с feature toggles
- В библиотеках и фреймворках, где требуется настройка через конфигурационные файлы
Библиотека особенно полезна для CI/CD пайплайнов, где переменные окружения динамически подставляются на этапе сборки. SwiftConfig поддерживает iOS 15+, macOS 12+ и полностью совместима с SwiftUI и Combine.