SwiftConfig: Управление конфигурацией приложений на Swift

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Библиотека 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.json
let 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 можно использовать @Published
class 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.

Рекомендаций