Biblioteca SwiftConfig para gerenciamento de configuração de aplicativos iOS/macOS
SwiftConfig é uma biblioteca leve em Swift, projetada para gerenciar convenientemente configurações em aplicativos iOS e macOS. Ela permite separar as configurações (chaves de API, endpoints de URL, flags de funcionalidades) do código, armazenando-as em arquivos estruturados (JSON, YAML, plist) ou variáveis de ambiente.
Por que usar SwiftConfig?
Em aplicativos modernos, é frequentemente necessário alterar o comportamento sem recompilar: alternar entre servidores de staging/production, testes A/B, alterar timeouts. Armazenar configurações manualmente no UserDefaults ou usar hardcode leva a erros e dificulta a manutenção. O SwiftConfig resolve esses problemas fornecendo:
- Acesso type-safe a valores via enum e Codable
- Suporte a múltiplas fontes (arquivos, env, UserDefaults)
- Atualização automática quando os arquivos são alterados (por exemplo, para SwiftUI previews)
- Validação do esquema de configuração na inicialização
Instalação
Adicione a biblioteca via Swift Package Manager no Xcode:
File → Add Packages → insira a URL do repositório do SwiftConfigOu adicione no Package.swift:
.package(url: "https://github.com/example/SwiftConfig.git", from: "1.0.0")Funcionalidades principais
- Multiformato: detecção automática do formato do arquivo (json, yaml, plist)
- Environment overlay: valores de variáveis de ambiente têm prioridade sobre arquivos
- Cache: o parsing ocorre uma vez, e os dados são armazenados em memória
- Baseado em protocolo: você define um protocolo com requisitos, a biblioteca gera a implementação
Exemplo de código em Swift (iOS/macOS)
import SwiftConfig
// Define a estrutura de configuraçãostruct AppConfig: Codable { let apiURL: String let timeout: Double let isFeatureXEnabled: Bool}
// Carrega a configuração do arquivo config.jsonlet configManager = try ConfigManager<AppConfig>(source: .file("config"))
// Usa no códigolet url = URL(string: configManager.current.apiURL)!let session = URLSession(configuration: .default)session.configuration.timeoutIntervalForRequest = configManager.current.timeout
// Para SwiftUI, pode usar @Publishedclass SettingsViewModel: ObservableObject { @Published var config: AppConfig init() { self.config = try! ConfigManager<AppConfig>(source: .file("config")).current }}Quando usar SwiftConfig?
- Em projetos multi-environment (dev/staging/prod)
- Quando for necessário alterar o comportamento do aplicativo sem re-deploy
- Para trabalhar com feature toggles
- Em bibliotecas e frameworks que exigem configuração via arquivos de configuração
A biblioteca é especialmente útil para pipelines de CI/CD, onde variáveis de ambiente são injetadas dinamicamente na etapa de build. O SwiftConfig suporta iOS 15+, macOS 12+ e é totalmente compatível com SwiftUI e Combine.