Configuração de aplicativos Swift (iOS/macOS): ferramentas e bibliotecas
A configuração de aplicativos é uma parte essencial do desenvolvimento para iOS e macOS. Ela permite gerenciar flexivelmente o comportamento do aplicativo sem alterar o código, ajustar parâmetros para diferentes ambientes (dev/staging/prod) e personalizar a experiência do usuário. Neste artigo, exploraremos as principais ferramentas e bibliotecas Swift para gerenciamento de configuração.
1. Recursos nativos do iOS/macOS
A Apple fornece vários mecanismos nativos para armazenar e ler dados de configuração.
1.1 PropertyList (Info.plist)
Método clássico para armazenar configuração estática. O arquivo Info.plist contém as configurações básicas do aplicativo: versão, bundle identifier, orientações suportadas, etc.
// Leitura de valor do Info.plistif let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String { print("Versão do aplicativo: \\(appVersion)")}
// Leitura de chave personalizadaif let apiURL = Bundle.main.object(forInfoDictionaryKey: "APIBaseURL") as? String { print("URL base da API: \\(apiURL)")}1.2 UserDefaults
UserDefaults é uma maneira simples de armazenar pequenas quantidades de dados (strings, números, valores booleanos). Ideal para configurações do usuário.
// SalvandoUserDefaults.standard.set(true, forKey: "isDarkModeEnabled")UserDefaults.standard.set("pt", forKey: "appLanguage")
// Lendolet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")let language = UserDefaults.standard.string(forKey: "appLanguage") ?? "en"1.3 SwiftUI @AppStorage
Wrapper moderno sobre UserDefaults para SwiftUI. Permite sincronizar automaticamente o estado com a interface do usuário.
struct SettingsView: View { @AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("username") private var username = "Convidado" var body: some View { Form { Toggle("Modo escuro", isOn: $isDarkMode) TextField("Nome de usuário", text: $username) } }}2. Bibliotecas para configuração avançada
2.1 Firebase Remote Config
Configuração em nuvem do Google. Permite alterar parâmetros do aplicativo sem publicar uma atualização na App Store.
import FirebaseRemoteConfig
class RemoteConfigManager { static let shared = RemoteConfigManager() private let remoteConfig = RemoteConfig.remoteConfig() func setup() { let defaults: [String: NSObject] = [ "welcome_message": "Bem-vindo!" as NSObject, "max_items_count": 20 as NSObject ] remoteConfig.setDefaults(defaults) remoteConfig.fetch(withExpirationDuration: 3600) { status, error in if status == .success { self.remoteConfig.activate() } } } var welcomeMessage: String { remoteConfig.configValue(forKey: "welcome_message").stringValue ?? "" } var maxItemsCount: Int { Int(remoteConfig.configValue(forKey: "max_items_count").numberValue ?? 20) }}2.2 SwiftyUserDefaults
Wrapper conveniente sobre UserDefaults com suporte a Codable e chaves type-safe.
import SwiftyUserDefaults
extension DefaultsKeys { static let isFirstLaunch = DefaultsKey<Bool>("isFirstLaunch", defaultValue: true) static let userProfile = DefaultsKey<Data?>("userProfile")}
struct UserProfile: Codable { let name: String let age: Int}
// UsoDefaults[.isFirstLaunch] = false
let profile = UserProfile(name: "João", age: 30)if let data = try? JSONEncoder().encode(profile) { Defaults[.userProfile] = data}
if let profileData = Defaults[.userProfile], let decoded = try? JSO