miniHabits
BUILD LOG · OUTLINE · 9 APR 2026

Notes d'intégration HealthKit, depuis une app qui lit cinq mesures

Des permissions qu'on ne peut pas interroger, des observateurs qui se déclenchent trop, et des échantillons en double venus de trois sources.

build log 384 words of 1 700 planned

miniHabits lit cinq choses dans HealthKit : les pas, les minutes d’exercice, les séances, le sommeil et les minutes de pleine conscience. Cinq, ce n’est pas beaucoup, et l’intégration a quand même pris plus de temps que tout l’écran de statistiques.

Trois choses l’expliquent. Les permissions de lecture sont délibérément opaques : pour des raisons de confidentialité, vous ne pouvez pas demander si l’utilisateur a accordé l’accès en lecture à un type, seulement s’il a été sollicité. Un résultat vide veut donc dire soit pas de permission, soit pas de données, et votre interface doit gérer les deux sans accuser l’utilisateur de quoi que ce soit. Les requêtes d’observation se déclenchent plus souvent qu’on ne s’y attend, y compris pour des échantillons qui changent rétroactivement quand une autre app écrit de l’historique, ce qui fait qu’une implémentation naïve recalcule une habitude vingt fois par heure.

Les doublons sont la troisième. Une seule marche peut produire des échantillons de pas depuis le téléphone, la Watch et une app tierce, et les additionner donne un nombre confiant et faux. La requête de statistiques gère ça si vous l’utilisez, la requête d’échantillons non, ce qui n’est pas évident au vu des noms.

Cet article couvre chacun de ces points avec le code qui a fini par sortir, plus le comportement de la livraison en arrière-plan, ce qui se passe à une installation neuve avec un historique existant, et les deux mesures que j’ai décidé de ne pas lire du tout.

Plan

Statut : plan. L’introduction ci-dessus est de la copie finie. Tout ce qui suit est le plan des sections de la version complète, visant environ 1 700 mots.

  1. Les cinq mesures. Pourquoi celles-là, et à quoi chacune correspond dans l’app.
  2. Des permissions de lecture opaques. L’API, la raison derrière, et l’interface qui doit s’en accommoder.
  3. Les requêtes d’observation. Trop de déclenchements, modifications rétroactives, et l’amortissement qui a réglé ça.
  4. Les échantillons en double. Requête de statistiques contre requête d’échantillons, chiffres à l’appui.
  5. La livraison en arrière-plan. Ce que vous obtenez, à quelle fréquence, et ce que le système brise.
  6. Installation neuve avec un vieil historique. Rattraper sans un lancement de vingt secondes.
  7. Deux mesures que j’ai laissées. Et la raison pour laquelle chacune est une mauvaise cible d’habitude.
Try miniHabits free — 10 habits, no account.
Get it