SwiftConfig: Application Configuration Management in Swift

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

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

Recommendations