Présentation

Kadō est un tracker d'habitudes natif pour iPhone et iPad publié sous licence MIT. L'application fonctionne hors ligne grâce à SwiftData et ne requiert aucun compte, abonnement ou SDK tiers. Les données restent stockées localement et peuvent être synchronisées de façon optionnelle via le CloudKit privé de l'utilisateur. Les exports sont disponibles en JSON ou CSV, garantissant une sauvegarde sans perte. La version actuelle sur l'App Store est la 1.7, compatible iOS 18.0+ et Xcode 16.0+.

Architecture et implémentation

Le code s'appuie exclusivement sur les frameworks Apple : SwiftUI pour l'interface, @Observable (iOS 17+) pour la gestion d'état, et SwiftData pour la persistance locale avec un VersionedSchema et un SchemaMigrationPlan dès le premier jour. La synchronisation utilise CloudKit via le paramètre cloudKitDatabase: .private(...). Les widgets, construits avec WidgetKit, lisent un instantané JSON partagé via un App Group, évitant ainsi l'ouverture de SwiftData dans le processus widget. Les actions rapides sont exposées par App Intents, intégrées à Siri et aux raccourcis. Aucun package tiers n'est déclaré dans le projet.

import SwiftData

@Model
class Habit {
    @Attribute(.unique) var id: UUID
    var name: String
    var completions: [Date]
}

Algorithme du score d'habitude

Le « habit score » de Kadō s'inspire de Loop Habit Tracker et repose sur une moyenne mobile exponentielle (EMA) non binaire. Chaque jour complété augmente le score selon un facteur α, tandis qu'un jour manqué le décroit de façon proportionnelle, mais ne le ramène jamais à zéro. Cette approche évite l'effet de rupture brutal d'une chaîne de jours consécutifs et fournit une tendance lissée. Le calcul est documenté dans habit-score.md du dépôt et a été validé par les tests unitaires Swift Testing.

Analyse des impacts et limites

Le modèle hors ligne garantit la disponibilité même sans connexion réseau, mais la synchronisation CloudKit reste sujette aux contraintes de bande passante et aux quotas de stockage privés. L'absence de dépendances tierces réduit la surface d'attaque, toutefois la dépendance exclusive à iOS 18+ exclut les utilisateurs d'appareils plus anciens. Le roadmap indique que les extensions Apple Watch et HealthKit ont été désactivées, limitant l'intégration avec les données de santé. Les tests automatisés couvrent à la fois la logique métier (unités) et l'interface (XCUITest), mais aucune mesure de performance n'est fournie pour les scénarios de grande matrice habit × jour.