Cela faisait un petit moment que je n’avais pas publié de nouveaux tutoriel. Celui que je vous propose aujourd’hui est à la fois un tuto et une POC, qui va nous permettre d’aborder un gros morceau : HealthKit
Voici à quoi ressemblera notre appli terminée :
HealthKit : Késako ?
Si vous avez un iPhone, vous avez sans doute remarqué l’application « Santé » ainsi que toutes les informations qu’elle est susceptible de contenir.
Pour ceux qui ne verraient pas de quoi je parle, voici l’appli :
On peut y renseigner un max de données concernant sa santé, et surtout la relier à différentes sources de données, dont l’AppleWatch.
Dans ce tutoriel, je vais vous présenter une petite démo sous forme de POC qui récupère les données cardio sur une période donnée, et en déduit les valeurs mini et maxi ainsi que la moyenne en BPM.
Mais avant tout, pour traiter des données, encore faut-il en avoir !
« Mieux vaut un mauvais algorithme avec beaucoup de datas qu’un bon algorithme sans datas » : Laurent Alexandre.
Perso, je préfère un bon algo avec beaucoup de datas…
Importer des données dans le simulateur
Pour récupérer des données exploitables, soit vous les récupérer vous même avec votre iPhone, soit vous utiliser l’appli HealthKitImporter, de Comocomo :
Pour importer des données dans votre simulateur, il y a juste à lancer l’appli, et à cliquer sur le bouton « Start Exporting »
Voilà, nous avons des données !
« Un grand pouvoir implique de grandes responsabilités » : Spiderman / Voltaire
Récupérer les autorisations
De part les données qu’il est susceptible de manipuler, l’accès à HealthKit est fortement « réglementé » par Apple.
Tout d’abord, il vous faudra impérativement un compte développeur actif, et l’avoir renseigné dans votre xCode.
Ensuite, il nous faut ajouter « HealthKit » aux possibilités de l’appli :
Puis ajouter les permissions dans le fichier Info.plist.
2 permissions sont nécessaires :
- Privacy – Health Share Usage Description
- Privacy – Health Update Usage Description
Et enfin, demander à l’utilisateur d’autoriser l’appli à accéder à ses données HealthKit.
Dans l’appli de démo, je réalise cela grâce à un bouton « Request HK Permissions » :
Et à une classe « HealthKitSetupAssistant » (merci au super site de Rey Wenderlich !) :
Le code s’explique par lui-même. Lorsque l’utilisateur clique sur le bouton « Request HK Permissions », on ouvre un écran de paramètres :
Si tout est ok, on cache le bouton et on charge les données.
L’important est de bien déclarer les données santé que l’on désire utiliser en lecture ou en écriture dans la méthode « HealthKitSetupAssistant » :
Pour connaitre les types de données accessibles via HealthKit, je vous invite à consulter ce lien. C’est en Objective C, mais c’est facilement convertible en Swift.
Bon, maintenant que nous avons nos accès à HealthKit, il faut récupérer des données et les traiter !
HealthKit enregistre ses données dans une base de données, un peu comme CoreData. Il va donc falloir forger des requêtes. C’est le rôle de la classe « HeartDataManager » :
Pour ceux qui connaissent CoreData, cela sera relativement limpide.
Pour les autres, l’idée est de forger notre demande, c’est le rôle du « Predicate » et du « Descriptor », puis de la transformer en requête de type « HKSampeQuery » (Query).
La requête est ensuite réalisée sur la base de donnée HealthKIt : « HKealthStore().execute(heartRateQuery) » et le résultat est retourné par l’intermédiaire du Completion Handler.
Voici comment utiliser cette méthode via la fonction LoadDatas() :
Notez que l’on utilise un autre thread car la lecture de la base de données HealthKit peut prendre un peu de temps.
Reste à réaliser un petit tri sur nos données : je les classe par date croissante, puis je remplis 2 tableaux contenant les dates et les valeurs. Ces tableaux servent enfin à calculer les données à afficher dans notre vue : « bpm moy », « bpm max », « bpm min » (celui contenant les dates servira dans un futur tuto… patience !
Je passe sous silence les différentes méthodes utilisées pour réaliser ce tri et ces calculs car ce n’est pas le sujet, mais je pense que le code du POC est suffisamment clair.
Pingback: API Charts tutoriel | Pour quelques lignes de plus...
Pingback: Tutoriel Swift : l’API Charts | Pour quelques lignes de plus...