Fiche 02.08 — @AppStorage en SwiftUI
Objectif
Comprendre à quoi sert @AppStorage, comment sauvegarder une petite valeur utilisateur, et dans quels cas l’utiliser à la place de @State, UserDefaults ou une vraie base locale.
1. L’idée à comprendre
@AppStorage permet de sauvegarder une petite valeur dans UserDefaults directement depuis SwiftUI.
Exemple :
Cette valeur est automatiquement persistée.
Donc si l’utilisateur ferme l’app puis la relance, la valeur est conservée.
À retenir :
2. Code minimal
Ici, hasSeenOnboarding reste à true même après fermeture et relance de l’app.
3. À quoi sert la clé ?
Dans :
"hasSeenOnboarding" est la clé utilisée dans UserDefaults.
C’est le nom sous lequel la valeur est enregistrée.
Si tu changes la clé, SwiftUI ne retrouvera plus l’ancienne valeur.
Exemple :
Ici, la valeur est stockée sous la clé selectedTheme.
4. Exemple : afficher ou cacher l’onboarding
Cas très courant : afficher l’onboarding seulement la première fois.
Puis dans l’onboarding :
Quand l’utilisateur appuie sur “Commencer”, la valeur est sauvegardée et l’app peut afficher MainTabView.
5. Exemple : préférence de thème
Tu peux sauvegarder un choix de thème.
La valeur selectedTheme est conservée après redémarrage de l’app.
Tu peux ensuite t’en servir dans la racine de l’app :
6. Exemple : dernier onglet sélectionné
@AppStorage peut sauvegarder le dernier onglet ouvert.
Si l’utilisateur quitte l’app sur l’onglet Réglages, tu peux le ramener sur cet onglet au prochain lancement.
7. Types compatibles
@AppStorage fonctionne bien avec des types simples :
Types courants :
String;Int;Double;Bool;URL;Data.
Pour des données complexes, ce n’est généralement pas le bon outil.
8. Quand utiliser @AppStorage
Utilise @AppStorage pour de petites préférences utilisateur.
Exemples :
Exemples de variables :
9. Quand ne pas utiliser @AppStorage
N’utilise pas @AppStorage pour :
- des tokens sensibles ;
- un mot de passe ;
- des données utilisateur privées ;
- des listes complexes ;
- des objets liés entre eux ;
- un cache API important ;
- des données qui doivent être requêtées/filtrées ;
- des données qui nécessitent des migrations.
Pour ces cas :
10. @AppStorage vs @State
@State disparaît quand la vue disparaît ou quand l’app est relancée.
@AppStorage sauvegarde la valeur dans UserDefaults.
Résumé :
11. @AppStorage vs UserDefaults
Sans @AppStorage, tu pourrais écrire :
Avec @AppStorage, SwiftUI simplifie le code :
Et la vue se met à jour automatiquement quand la valeur change.
@AppStorage est donc une intégration SwiftUI pratique autour de UserDefaults.
12. Centraliser les clés
Évite de répéter des chaînes de caractères partout.
Pas idéal :
Préférable :
Puis :
Cela évite les fautes de frappe dans les clés.
13. Points à connaître
@AppStorage est lié à UserDefaults
Ce n’est pas une base de données.
C’est pratique pour de petites valeurs, pas pour stocker toute l’app.
Ne stocke pas de données sensibles avec @AppStorage
UserDefaults n’est pas fait pour stocker des secrets.
Pour un access token ou refresh token, utilise plutôt le Keychain.
Changer une clé revient à perdre l’accès à l’ancienne valeur
Si tu remplaces :
par :
ce n’est plus la même valeur stockée.
Résumé
À retenir :
@AppStoragesauvegarde une petite valeur dansUserDefaults;- la valeur est conservée après fermeture de l’app ;
- c’est pratique pour onboarding, thème, dernier onglet, préférences simples ;
@AppStoragefonctionne surtout avec des types simples ;- pour une valeur temporaire, utilise
@State; - pour un token sensible, utilise le Keychain ;
- pour des données complexes, utilise SwiftData, Core Data ou une autre persistance adaptée ;
- centralise les clés pour éviter les fautes de frappe.