SwiftConfig: Application Configuration Management in Swift

онлайн тренажер по питону

Библиотека 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.