Configuration des applications Swift (iOS/macOS) : aperçu des outils et bibliothèques
La configuration des applications est l’un des aspects clés du développement sous iOS et macOS. La flexibilité, la testabilité et la sécurité de votre produit dépendent d’une bonne gestion des paramètres. Dans cet article, nous examinerons les mécanismes de configuration standard en Swift, ainsi que les bibliothèques et outils populaires qui simplifient la gestion des paramètres de l’application.
Mécanismes de configuration intégrés en Swift
1. Info.plist et Xcconfig
Le moyen de base pour stocker les métadonnées de l’application est le fichier Info.plist. Il contient la version du bundle, l’identifiant, le nom de l’application et d’autres paramètres système. Pour une gestion plus flexible de la configuration (par exemple, des valeurs différentes pour Debug/Release), on utilise les fichiers .xcconfig.
// Example.xcconfigAPP_NAME = MyAppAPI_BASE_URL = https://api.example.comBUNDLE_ID_SUFFIX = .devEn Swift, ces valeurs peuvent être obtenues via 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
Pour stocker les préférences utilisateur (thème, langue, taille de police), on utilise UserDefaults. C’est un moyen simple et rapide de sauvegarder de petites quantités de données.
// SauvegardeUserDefaults.standard.set(true, forKey: "isDarkMode")UserDefaults.standard.set("ru", forKey: "language")
// Lecturelet isDarkMode = UserDefaults.standard.bool(forKey: "isDarkMode")let language = UserDefaults.standard.string(forKey: "language") ?? "en"3. SwiftUI AppStorage
Dans SwiftUI, il existe un property wrapper intégré @AppStorage qui se synchronise automatiquement avec UserDefaults :
struct SettingsView: View { @AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("fontSize") private var fontSize = 14.0
var body: some View { Form { Toggle("Thème sombre", isOn: $isDarkMode) Slider(value: $fontSize, in: 10...30) { Text("Taille de police") } } }}Bibliothèques tierces pour la configuration
Bien que les outils standard couvrent les scénarios de base, les projets réels nécessitent souvent des solutions plus avancées. Examinons quelques bibliothèques populaires.
1. SwiftyUserDefaults
Une surcouche de UserDefaults avec des clés typées et la prise en charge de Codable. Elle permet d’éviter les erreurs liées aux clés sous forme de chaînes de caractères.
- Prise en charge de tous les types standard et de Codable
- Génération de code via Sourcery (optionnel)
- Syntaxe simple et concise
import SwiftyUserDefaults
extension DefaultsKeys { var isDarkMode: DefaultsKey<Bool> { .init("isDarkMode", defaultValue: false) } var userName: DefaultsKey<String?> { .init("userName") }}
// UtilisationDefaults[\\.isDarkMode] = truelet name = Defaults[\\.userName] ?? "Invité"2. PropertyKit
Bibliothèque pour la description déclarative de la configuration. Elle permet de regrouper les paramètres et de gérer leur visibilité.
- Prise en charge des sections et des groupes imbriqués
- Validation des valeurs à la volée
- Intégration avec Combine pour la mise à jour réactive de l’interface utilisateur
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