Configuration des applications Swift (iOS/macOS) : outils et bibliothèques
La configuration des applications est une partie essentielle du développement sous iOS et macOS. Elle permet de gérer flexiblement le comportement de l'application sans modifier le code, de paramétrer les réglages pour différents environnements (dev/staging/prod) et de personnaliser l'expérience utilisateur. Dans cet article, nous examinerons les principaux outils et bibliothèques Swift pour la gestion de la configuration.
1. Outils intégrés iOS/macOS
Apple fournit plusieurs mécanismes intégrés pour stocker et lire les données de configuration.
1.1 PropertyList (Info.plist)
Méthode classique pour stocker une configuration statique. Le fichier Info.plist contient les paramètres de base de l'application : version, bundle identifier, orientations supportées, etc.
// Lecture d'une valeur depuis Info.plistif let appVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String { print("Version de l'application : \\(appVersion)")}
// Lecture d'une clé personnaliséeif let apiURL = Bundle.main.object(forInfoDictionaryKey: "APIBaseURL") as? String { print("URL de base de l'API : \\(apiURL)")}1.2 UserDefaults
UserDefaults est un moyen simple de stocker de petites quantités de données (chaînes, nombres, valeurs booléennes). Idéal pour les préférences utilisateur.
// SauvegardeUserDefaults.standard.set(true, forKey: "isDarkModeEnabled")UserDefaults.standard.set("fr", forKey: "appLanguage")
// Lecturelet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkModeEnabled")let language = UserDefaults.standard.string(forKey: "appLanguage") ?? "en"1.3 SwiftUI @AppStorage
Wrapper moderne autour de UserDefaults pour SwiftUI. Permet de synchroniser automatiquement l'état avec l'interface utilisateur.
struct SettingsView: View { @AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("username") private var username = "Invité" var body: some View { Form { Toggle("Thème sombre", isOn: $isDarkMode) TextField("Nom d'utilisateur", text: $username) } }}2. Bibliothèques pour une configuration avancée
2.1 Firebase Remote Config
Configuration cloud de Google. Permet de modifier les paramètres de l'application sans publier de mise à jour sur l'App Store.
import FirebaseRemoteConfig
class RemoteConfigManager { static let shared = RemoteConfigManager() private let remoteConfig = RemoteConfig.remoteConfig() func setup() { let defaults: [String: NSObject] = [ "welcome_message": "Bienvenue !" 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 pratique autour de UserDefaults avec support de Codable et de clés typées sécurisées.
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}
// UtilisationDefaults[.isFirstLaunch] = false
let profile = UserProfile(name: "Ivan", age: 30)if let data = try? JSONEncoder().encode(profile) { Defaults[.userProfile] = data}
if let profileData = Defaults[.userProfile], let decoded = try? JSO Aussi dans la bibliothèque
Internationalisation (i18n) en Rust : bibliothèques gettext-rs et fluent-rs
ORM pour Kotlin : comparaison d'Exposed, Room et Ktorm avec exemples
NaturalLanguage pour Swift : guide complet avec exemples