Configuração de aplicativos Swift (iOS/macOS): visão geral de ferramentas e bibliotecas
A configuração de aplicativos é um dos aspectos-chave do desenvolvimento para iOS e macOS. Do gerenciamento correto das configurações dependem a flexibilidade, testabilidade e segurança do seu produto. Neste artigo, abordaremos os mecanismos padrão de configuração em Swift, bem como bibliotecas e ferramentas populares que simplificam o gerenciamento de parâmetros do aplicativo.
Mecanismos de configuração integrados em Swift
1. Info.plist e Xcconfig
A forma básica de armazenar metadados do aplicativo é o arquivo Info.plist. Ele contém a versão do bundle, identificador, nome do aplicativo e outros parâmetros do sistema. Para um gerenciamento mais flexível da configuração (por exemplo, valores diferentes para Debug/Release), são usados arquivos .xcconfig.
// Example.xcconfigAPP_NAME = MyAppAPI_BASE_URL = https://api.example.comBUNDLE_ID_SUFFIX = .devEm Swift, esses valores podem ser obtidos através de Bundle.main:
func getConfigValue(key: String) -> String? { guard let value = Bundle.main.object(forInfoDictionaryKey: key) as? String else { return nil } return value}
let baseURL = getConfigValue(key: "API_BASE_URL")2. UserDefaults
Para armazenar configurações do usuário (tema, idioma, tamanho da fonte), utiliza-se UserDefaults. É uma forma simples e rápida de salvar pequenas quantidades de dados.
// SalvandoUserDefaults.standard.set(true, forKey: "isDarkMode")UserDefaults.standard.set("pt", forKey: "language")
// Lendolet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")let language = UserDefaults.standard.string(forKey: "language") ?? "en"3. SwiftUI AppStorage
No SwiftUI, existe o property wrapper integrado @AppStorage, que sincroniza automaticamente com UserDefaults:
struct SettingsView: View { @AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("fontSize") private var fontSize = 14.0
var body: some View { Form { Toggle("Tema escuro", isOn: $isDarkMode) Slider(value: $fontSize, in: 10...30) { Text("Tamanho da fonte") } } }}Bibliotecas de terceiros para configuração
Embora as ferramentas padrão cubram cenários básicos, em projetos reais frequentemente são necessárias soluções mais avançadas. Vamos analisar algumas bibliotecas populares.
1. SwiftyUserDefaults
Uma camada sobre UserDefaults com chaves tipadas e suporte a Codable. Permite evitar erros relacionados a chaves de string.
- Suporte a todos os tipos padrão e Codable
- Geração de código via Sourcery (opcional)
- Sintaxe simples e concisa
import SwiftyUserDefaults
extension DefaultsKeys { var isDarkMode: DefaultsKey<Bool> { .init("isDarkMode", defaultValue: false) } var userName: DefaultsKey<String?> { .init("userName") }}
// UsoDefaults[\\.isDarkMode] = truelet name = Defaults[\\.userName] ?? "Convidado"2. PropertyKit
Biblioteca para descrição declarativa de configuração. Permite agrupar configurações e gerenciar sua visibilidade.
- Suporte a seções e grupos aninhados
- Validação de valores em tempo real
- Integração com Combine para atualização reativa da UI
import PropertyKit
struct AppConfig: PropertyGroup { @Property(key: "api_url", default: "https://api.example.com") var apiURL: String
@Property(key: "max_retries", default: 3, validator: { $0 > 0 && $0 < 10 }) var maxRetries: Int
@Property(key: "feature_x_enabled", default: false) var featureXEnabled: Bool