• 12 heures
  • Difficile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 26/02/2020

Découvrez la persistance des données

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Avant de nous jeter à l'eau, je vous propose de prendre cinq petites minutes pour prendre du recul sur la persistance des données !

Oui je sais, votre clavier vous démange, mais le sujet de la persistance est trop important et trop vaste pour se passer d'une vue d'ensemble du sujet.

La persistance, c'est quoi ?

Dans les applications que vous avez déjà développées, vous vous êtes sans doute déjà frotté au problème suivant : si vous sauvegardez des données dans votre modèle par exemple ou dans une variable de votre contrôleur, ces données sont perdues dès que vous fermez l'application.

La raison, c'est que lorsque l'application est supprimée, le processeur est libéré de toute activité liée à cette application et donc toutes les données en mémoire sont supprimées.

La persistance désigne l'ensemble des techniques qui permettent de stocker des données sur votre iPhone. Grâce à la persistance, les données peuvent rester stockées tant que l'application est installée sur le téléphone.

Vue d'ensemble de la persistance

La persistance c'est donc un ensemble de techniques. Alors je vous propose qu'on voit ce qu'elles sont !

Le schéma suivant résume la grande majorité des techniques de persistance utilisées en iOS.

Ce schéma présente dans les carrés blancs les différentes techniques de persistance. La légende indique le(s) type(s) de chaque technique. Enfin, ce schéma illustre les mécanismes employés pour passer d'un objet Swift (une classe ou une structure) au format de donnée utilisé dans chaque cas.

Je vous propose de vous exposer rapidement chacune de ces techniques.

User Defaults

Les User Defaults sont tout simplement un dictionnaire qui persiste. C'est donc un outil très simple, mais aussi peu adapté à de grandes quantités de données. En général, on l'utilise pour de petites choses comme les préférences utilisateurs, d'où son nom.

Unix File System / UIDocument

Unix File System et UIDocument sont deux techniques de persistance qui s'appuient sur des fichiers.

Tout d'abord, vous allez convertir des objets Swift en type Data. Il existe deux mécanismes possibles pour cela :

  • NSKeyedArchiver : l'ancien mécanisme voué sans doute à disparaître

  • Le protocole Codable de Swift : extrêmement puissant et facile à utiliser.

Ensuite les Data sont enregistrés dans un fichier. Ce fichier est sauvegardé dans un dossier réservé à votre application.

Si vous utilisez Unix File System, le fichier sera sauvegardé et seul un développeur pourra le manipuler. C'est utile pour sauvegarder des données que vous voulez protéger d'une manipulation hasardeuse d'un utilisateur.

À l'inverse, UIDocument sauvegarde des fichiers au sens utilisateur. Cela signifie que l'utilisateur pourra ouvrir et accéder à ce fichier comme lorsque vous ouvrez un fichier dans le Finder de votre Mac.

UIDocument fonctionne notamment avec l'application Fichiers présente depuis iOS 11 et qui permet à l'utilisateur d'accéder à ses fichiers. Cela vous permet notamment de sauvegarder des fichiers directement sur iCloud Drive, la solution de stockage en ligne d'Apple.

SQLite / CoreData

Sauvegarder des fichiers, c'est bien. Mais parfois vous avez besoin de la robustesse et des outils que propose une vraie base de données. Et pour cela, vous avez plusieurs options.

La première et la plus basique est l'utilisation d'SQLite. SQLite est une base de données basée sur SQL, pensée pour le mobile et du coup plus légère. Via une API en langage C, vous rédigez directement vos requêtes SQL.

Le langage C ? Mais je fais du Swift moi !

Oui, je C... ça ne fait pas rêver :D ! Malgré tout, on peut interagir via des API en Swift, mais ça reste proche du SQL et pas forcément très pratique pour une grosse base de données.

C'est la raison pour laquelle il existe des alternatives. La plus répandue se nomme Core Data. C'est une base de données SQL avec une API orientée objet.

En français, cela signifie que vous avez une base de données SQL standard (souvent SQLite) que vous ne manipulez pas directement. À la place, vous manipulez directement des objets Swift. Vous travaillez donc en orienté objet et toute la complexité SQL est gérée à votre place par le framework.

En plus, comme c'est un framework d'Apple, il s'intègre extrêmement bien avec le reste de l'écosystème, que ce soit Xcode, Cocoa Touch ou d'autres frameworks.

CloudKit / Firebase / Realm

Enfin, si vous voulez aller encore plus loin, vous avez les technologies que l'on regroupe sous le nom de MBAAS pour Mobile Back-end As A Service. Ce sont des bases de données dans le cloud qui s'intègrent très facilement et qui gèrent pour vous beaucoup de choses compliquées comme :

  • Installer / gérer / mettre à l'échelle un serveur

  • Gérer les problèmes de connexions réseau

  • Gérer la sécurité de vos appels réseau

  • Et un certain nombre d'autres choses.

Il existe de nombreuses solutions sur le marché, mais je vous présente les trois plus populaires.

CloudKit

CloudKit est la solution maison d'Apple. Elle est assez facile à mettre en place et comme tout ce que fait Apple, elle est extrêmement bien connectée au reste de l'écosystème Apple. Donc si votre produit se destine exclusivement à des utilisateurs d'iPhone / iPad / Apple TV / Mac et autre Apple Watch, je vous recommande fortement de jeter un œil à cette technologie.

La contrepartie, c'est que CloudKit n'est pas très adapté au web ou à Android. C'est faisable, mais ce n'est vraiment pas pratique. Donc si vous faites une application pour iOS et Android, je ne recommande pas CloudKit.

Firebase

Firebase est le concurrent de CloudKit chez Google. Cette technologie est extrêmement puissante et je pense qu'elle est d'assez loin la plus répandue des MBAAS. Elle s'adapte très bien à iOS, Android et au web.

Firebase est une base de données dans le cloud accessible en temps réel. Cela veut dire que vous ne faites plus de requêtes pour récupérer des données. L'application écoute la base de données et reçoit les modifications de la base de données dès que celle-ci est modifiée. C'est extrêmement pratique et cela donne une expérience utilisateur de premier plan !

En plus, Firebase gère énormément de choses pour vous : l'authentification via différents services comme Facebook ou Google, le mode hors ligne, les notifications et beaucoup d'autres choses.

Vous vous devez d'y jeter un œil ;) !

Realm

L'entreprise Realm est spécialisée dans la gestion des données sur mobile. Cette technologie disponible sur Android et iOS permet une gestion très simple des données sur le mobile.

La particularité de Realm est d'être à la fois une solution de base de données en local sur le téléphone et dans le cloud. En effet, vous pouvez souscrire à leur offre de plateforme et avoir un équivalent de Firebase, ou alors vous pouvez utiliser leur technologie de base de données open source (donc gratuite !) et utiliser Realm à la place de Core Data pour vos données en local.

Realm est une très bonne alternative à Core Data, à tel point que j'ai hésité à faire ce cours sur Realm plutôt que sur Core Data. Je vous incite du coup fortement à regarder ça de près.

Limite de la persistance

Maintenant qu'on a parlé des différentes techniques de persistance et de leurs particularités, je voudrais finir avec une règle très importante de la persistance en iOS :

Toutes les données que vous stockez sur l'iPhone restent dans le périmètre de l'application.

En gros, en iOS, chaque application évolue dans un compartiment unique, séparé des autres.

Donc lorsque vous créez une base de données ou que vous sauvegardez un fichier, vous faites ça dans votre compartiment.

Il n'est pas question d'aller manipuler les données d'une autre application.

Apple a imposé cela pour trois raisons :

  1. Sécurité : Vous ne voulez pas qu'une application malveillante vienne s'immiscer dans vos données pour les modifier et altérer le fonctionnement de votre app.

  2. Vie privée : Les données que vous collectez appartiennent à votre utilisateur et aucune autre application ne doit pouvoir y accéder.

  3. Nettoyage : Lorsque l'application est supprimée par l'utilisateur, toutes les données qui vont avec peuvent être supprimées aussi d'un seul coup, car elles font partie du même package. Il n'y a pas d'autres données à aller chercher un peu partout dans le téléphone.

Bref, chacun son bac à sable et les données seront bien gardées !

En résumé

  • La persistance désigne l'ensemble des techniques qui permettent de stocker des données sur votre iPhone.

  • Il existe plusieurs techniques de persistance, vous pouvez retrouver les plus populaires dans le schéma ci-dessous : 

  • Toutes les données que vous stockez sur l'iPhone restent dans le périmètre de l'application.

Dans le prochain chapitre, nous allons nous plonger dans le code de notre application Cekikapeye !

Exemple de certificat de réussite
Exemple de certificat de réussite