
@AppStorage pour stocker un booléen qui permettra de savoir si l’onboarding a déjà été affiché ou non.Dans votre fichier LooterApp vous devriez avoir quelque chose comme ça in fine :
@main
struct LooterApp: App {
// Ici utiliser un @AppStorage pour stocker ce booléen entre les lancements de l'application
var isOnboardingDone: Bool = false
var body: some Scene {
WindowGroup {
if isOnboardingDone {
// Mon app
} else {
// Onboarding
}
}
}
}
Vous utiliserez les composants suivants :
TabViewPageViewStyle()Button@AppStorage@State@BindingEt vous devrez créez les vues SwiftUI suivantes (ne faites pas tout dans la même vue) :
OnboardingView (Qui contiendra les pages)OnboardingPageView
L’
OnboardingPageViewaura un@Bindingsur un@Statequi permettra de synchroniser la page courante (ex:TabView(selection: $step)) de l’OnboardingViewavec l’OnboardingPageView.
Pensez à utiliser la puissance de la #Preview SwiftUI pour tester votre onboarding.
Exemple ci-dessous, vous pouvez afficher 2 previews en même temps, une pour le mode clair et une pour le mode sombre, sur 2 pages différentes de votre onboarding.
#Preview {
OnboardingPage(feature: Feature.features[2], currentStep: .constant(3))
.preferredColorScheme(.light)
.previewDisplayName("Light Mode")
}
#Preview {
OnboardingPage(feature: Feature.features[1], currentStep: .constant(2))
.preferredColorScheme(.dark)
.previewDisplayName("Dark Mode")
}
Ce qui donne ça sur XCode
| Light Mode | Dark Mode |
|---|---|
![]() | ![]() |
Si vous voulez customiser votre onboarding, voici un peu d’inspirations d’onboarding : https://dribbble.com/search/onboarding-app
Dans les applications iOS, on peut sauvegarder des données persistantes après un redémarrage de plusieurs façons :
UserDefaults : Permet de stocker des données simples (Booléen, String, Int, Double, Date, Data)CoreData : Permet de stocker des données complexes (Objets, Relations, etc…)Il existe aussi des bases de données externes comme Realm ou Firebase qui permettent de stocker des données.
UserDefaultest très simple à utiliser, mais il est limité à des données simples.CoreDataest plus complexe à utiliser, mais permet de stocker des données complexes.
Avec SwiftUI Apple à introduit un nouveau moyen de stocker des données persistantes : AppStorage (qui est en réalité un UserDefaults).
Vous sauvegarderez dans un @AppStorage un booléen qui permettra de savoir si l’onboarding a déjà été affiché ou non.
C’est un property wrapper au même titre que @State ou @Binding qui permet de stocker des données persistantes.
✨ Pour vous aider à tester, rajoutez un bouton dans votre ContentView qui remettra votre variable
@AppStorageàfalse(ou à la valeur par défaut) pour pouvoir tester votre onboarding à nouveau.
Exemple :
.toolbar(content: {
ToolbarItem(placement: .automatic) {
Button(action: {
addItemSheetPresented.toggle()
}, label: {
HStack {
Image(systemName: "plus.app.fill")
Text("Ajouter")
}
})
}
ToolbarItem {
Button(action: {
isOnboardingDone = false
}, label: {
Image(systemName: "xmark.square.fill")
})
}
})
En redémarrant l’application il ne devra pas s’afficher à nouveau, si l’utilisateur à déjà cliqué sur “Commencer”.