Journal des modifications

1.2.7 – 2 juillet 2026

Corrigé

  • Parcours du livre — Les sessions pouvaient disparaître après un rafraîchissement des détails
    Les sessions de lecture d'un livre pouvaient disparaître silencieusement de l'onglet Parcours sur son écran de détails après l'ajout d'un ISBN ou le rafraîchissement des détails du livre à partir du catalogue — même si les sessions elles-mêmes étaient sauvegardées et s'affichaient toujours sur l'écran des sessions.
    L'onglet associait les sessions au livre d'une manière qui devenait fragile une fois les identifiants du livre modifiés, de sorte que le nombre et la liste des sessions récentes s'affichaient vides. Parcours maintient désormais un lien fiable entre un livre et ses sessions.

1.2.6 – 24 juin 2026

Ajouté

  • Diagnostics de synchronisation — Détails plus approfondis sur l'échec de l'exportation – Les diagnostics de synchronisation (optionnel) capturent désormais beaucoup plus d'informations sur un export CloudKit échoué afin que le bug de longue date « l'exportation échoue toujours » puisse enfin être identifié. L'écran des diagnostics affiche les types d'enregistrements défaillants et un histogramme des sous-erreurs de manière proéminente sur chaque ligne d'événement échoué. Toujours strictement sans données personnelles identifiables : aucun contenu de livre, de citation ou de note n'est jamais lu.
  • Diagnostics de synchronisation — Capture des journaux système – Une nouvelle action « Capturer les journaux système » sur l'écran des diagnostics de synchronisation.
  • Actions rapides sur l'écran d'accueil – Une pression prolongée sur l'icône de l'application Kiveo affiche désormais trois actions rapides — Démarrer une session, Scanner un code-barres et Capturer une citation — qui mènent directement à l'endroit approprié. Démarrer une session et Capturer une citation ouvrent le sélecteur de livres pour que vous choisissiez un livre, puis vous redirigent respectivement vers une session en direct ou le flux de capture de citation ; Scanner un code-barres ouvre la recherche avec le scanner de code-barres déjà actif.
  • Accueil — Carte « Livres lus » carte cliquable – La statistique « Livres lus » du résumé de l'accueil est désormais cliquable et mène à une liste en lecture seule des livres terminés. La liste est limitée à la période sélectionnée dans le sélecteur d'année : elle affiche « Tous les livres lus » pour la durée de vie, « Livres cette année » pour l'année en cours, ou « Livres en {year} » pour une année passée, et reste synchronisée avec le sélecteur. Les livres sont triés par ordre de finition la plus récente ; cliquer sur un livre ouvre sa vue détaillée. Les autres cartes de résumé (Pages, Heures, Série) restent non interactives.

Modifié

  • Couvertures de livres personnalisées — Taille limitée à la source – La sauvegarde d'une couverture personnalisée (lors de la création/modification d'un livre manuel, ou du remplacement d'une couverture) réduit désormais l'image de sorte que son côté le plus long soit au maximum d'environ 1024 pixels et la compresse vers un plafond d'environ 700 Ko avant de la stocker sur le livre. Auparavant, la photo en pleine résolution était stockée telle quelle, produisant des blobs de plusieurs mégaoctets qui gonflaient le stockage sur l'appareil, gaspillaient de la mémoire et augmentaient la charge utile de synchronisation CloudKit. Les couvertures restent visuellement identiques aux tailles auxquelles elles sont réellement rendues. (Hygiène des données ; n'affecte pas la fiabilité de la synchronisation.)
  • État du livre — Chemin de mise à jour unique – Chaque modification de l’état d’un livre passe désormais par un seul enregistreur canonique (Book.setStatus), de sorte que l’état d’un livre et ses dates et métadonnées associées restent cohérents, quelle que soit l’origine de la modification (la feuille de modification, l’éditeur de dates, l’importation Goodreads ou la journalisation de la progression).
  • Réflexions — Invite « Qu’avez-vous en tête ? » – Les champs de saisie de réflexion partagent désormais une seule invite plus conviviale : « Qu’avez-vous en tête ? ».
  • Échange de couvertures — Marqueur de couverture « Originale » – La grille « Autres éditions » de l’écran d’échange de couvertures marque désormais l’édition originale/canonique du livre avec une étiquette « Originale » (un subtil anneau neutre plus un glyphe « retour »), de sorte que lorsqu’une couverture personnalisée ou la couverture d’une édition différente est active, vous pouvez toujours identifier — et retrouver — la couverture originale du livre.

Corrigé

  • Couvertures de livres personnalisées — Blocs de couverture orphelins et surdimensionnés – Un livre créé manuellement dont l’édition réelle est apparue plus tard dans le catalogue conservait indéfiniment les données de son image de couverture personnalisée désormais redondantes, même après qu’une actualisation des métadonnées lui ait donné une bonne couverture distante. Ce bloc orphelin (souvent plusieurs mégaoctets) ne faisait qu’enfler le magasin et la charge utile de synchronisation. L’actualisation des métadonnées efface désormais un bloc de couverture personnalisé restant, mais uniquement lorsque le livre n’a pas de substitution de couverture intentionnelle et qu’une URL de couverture distante utilisable est disponible, de sorte que rien de visible ne change. Une réparation unique et idempotente s’exécute également sur les bibliothèques existantes : les blocs de couverture surdimensionnés sont réencodés plus petits sur place, et les blocs orphelins sont effacés lorsqu’une couverture distante peut prendre le relais — de manière conservatrice, sans jamais laisser un livre sans couverture. Les couvertures personnalisées et d’édition intentionnelles sont toujours préservées.
  • Échange de couvertures — La couverture personnalisée affichait une édition du catalogue comme « actuelle » – Lorsqu’un livre utilisait une couverture personnalisée, la grille « Autres éditions » de l’écran d’échange de couvertures mettait toujours en évidence l’édition du catalogue correspondant à l’ISBN comme étant la couverture actuelle. Le calcul « actuel » correspondait uniquement à l’ISBN et ignorait une substitution personnalisée active ; il ne renvoie désormais aucune édition lorsqu’une couverture personnalisée est utilisée, de sorte que la grille montre correctement qu’aucune des éditions du catalogue n’est actuelle.
  • Sauvegarde et restauration — Indicateur de livre personnalisé conservé – La restauration à partir d’une sauvegarde ne rétrograde plus les livres créés manuellement en livres de catalogue ordinaires. L’indicateur isCustom est désormais écrit et relu à partir des sauvegardes (les anciennes sauvegardes sans le champ sont toujours importées, traitées comme non personnalisées).
  • Barre d’onglets — Éléments passés en couleur d’accent après la fermeture d’une feuille (iOS 26) – Sur iOS 26, la présentation et la fermeture de n’importe quelle feuille faisaient que chaque élément de la barre d’onglets inférieure — y compris ceux non sélectionnés — s’affichait dans la couleur d’accent au lieu du schéma prévu sélectionné=accent / non sélectionné=libellé.
  • Recherche de livres — Des résultats obsolètes s'affichent avant la recherche – Lorsqu'une recherche lente était en cours et que l'utilisateur effaçait la requête ou quittait le mode de recherche, les résultats arrivant tardivement étaient appliqués au modèle de vue, provoquant l'affichage des résultats de recherche sous les sélections de pré-recherche.
  • De notre jardin — Centrage vertical sur une seule colonne – Lorsqu'une colonne de la grille « De notre jardin » ne contenait qu'un seul livre, elle était centrée verticalement par rapport aux colonnes plus hautes de deux livres. Les colonnes sont maintenant alignées en haut.
  • Recherche de livres — Langue automatique envoyée « Any » – Lorsque le filtre de langue de recherche était défini sur « Automatique », l'application envoyait lang=any à l'API, renvoyant des résultats dans toutes les langues au lieu de privilégier la langue de l'utilisateur. Résout maintenant le problème en utilisant la locale réelle de l'appareil (par exemple, es pour les utilisateurs hispanophones).
  • Échange de couverture — « Réinitialiser à l'original » ne supprimait pas une couverture personnalisée – Appuyer sur « Réinitialiser à l'original » supprimait le bouton Réinitialiser, mais l'image de couverture personnalisée continuait de s'afficher. Deux bogues faisaient que l'URL de l'image du livre pointait vers le fichier de couverture personnalisé après une réinitialisation : la couverture originale du catalogue était capturée *après* que l'URL avait déjà été écrasée par le fichier personnalisé (donc la réinitialisation « restaurait » l'image personnalisée), et la réinitialisation ne redirigeait l'URL que si une couverture originale avait été capturée – laissant les couvertures personnalisées héritées bloquées. Désormais, la véritable couverture pré-écrasement est capturée avant d'être écrasée, et la réinitialisation éloigne toujours l'image du fichier personnalisé : elle restaure une couverture de catalogue distante authentique lorsqu'elle est connue, ou sinon efface l'image et déclenche une nouvelle récupération des métadonnées du catalogue afin que le livre retrouve sa couverture appropriée. Lorsqu'il n'y a pas d'original distant connu, la couverture du catalogue est maintenant récupérée en ligne par ISBN et se remplit immédiatement, sur place, au lieu de réapparaître seulement la prochaine fois que l'écran de détails du livre est ouvert. Le fichier de couverture personnalisé sur disque est également supprimé pour libérer de l'espace.

1.2.5 – 22 juin 2026

Ajouté

  • Diagnostics de synchronisation iCloud – Ajout d'une observabilité de synchronisation facultative pour aider à diagnostiquer les problèmes de synchronisation CloudKit. La journalisation de la synchronisation est désactivée par défaut et est destinée uniquement aux utilisateurs qui dépannent activement un problème de synchronisation – lorsqu'elle est désactivée, rien n'est observé, enregistré, conservé ou signalé. Un nouvel écran « Diagnostics de synchronisation » sous Paramètres → Avancé dispose d'un interrupteur « Activer la journalisation de la synchronisation » qui démarre/arrête la journalisation immédiatement (aucun redémarrage nécessaire). Lorsqu'elle est activée, CloudKitSyncMonitor enregistre les événements de configuration, d'importation et d'exportation de SwiftData/CloudKit (et toutes les erreurs qu'ils transportent) dans un journal cyclique plafonné et persistant, signale les échecs de synchronisation à la télémétrie et affiche le journal des événements récents avec un style de succès/échec que les utilisateurs peuvent exporter et partager. Désactiver à nouveau la journalisation conserve tout journal déjà capturé afin qu'il puisse toujours être partagé. Le journal n'inclut jamais le contenu des livres, des citations ou des notes – uniquement les métadonnées de synchronisation et les détails des erreurs. Il s'agit d'une instrumentation de diagnostic ; elle ne modifie pas le comportement de synchronisation.

1.2.3 – 25 mai 2026

Supprimé

  • Activité en direct — Intents de mise en pause/reprise de l’applicationPauseSessionIntent et ResumeSessionIntent supprimés ; aucune interface utilisateur d’Activité en direct ne les a invoqués après le nettoyage des boutons de la Phase 3. La mise en pause/reprise depuis l’intérieur de l’application fonctionne toujours comme avant. (Phase 4 de la refonte des Activités en direct.)

Ajouté

  • Activité en direct — Arrière-plan teinté par la couverture – L’Activité en direct sur l’écran de verrouillage teinte maintenant son arrière-plan avec la couleur dominante de la couverture du livre actuel, assombrie pour la lisibilité. Réutilise le pipeline de palette de couvertures existant (aucun nouvel échantillonnage) ; les livres dont les palettes ne sont pas encore mises en cache reviennent au fond par défaut et récupèrent la teinte lors de la prochaine session. (Phase 2 de la refonte des Activités en direct.)

Modifié

  • Activité en direct — La couverture s’estompe dans l’arrière-plan – La couverture de l’écran de verrouillage se dissout maintenant dans l’arrière-plan de l’activité via un court dégradé sur son bord arrière au lieu de buter contre le texte avec une ligne dure. La couverture est dimensionnée à son rapport naturel de 2:3 pour les livres (70×105) et la hauteur globale du widget est limitée pour une empreinte plus petite. L’icône du minuteur est supprimée lorsqu’elle est en cours d’exécution ; le glyphe de pause apparaît lorsqu’elle est en pause.
  • Activité en direct — Refonte de la Dynamic Island – Les trois présentations de la Dynamic Island ont été reconstruites : la compacte affiche la marque Kiveo à côté du minuteur ; l’étendue utilise une disposition unifiée uniquement en bas avec la couverture, le titre, l’auteur, le minuteur et les puces de citation/livre ; la minimale affiche la marque Kiveo en couleur d’accentuation. Les boutons de mise en pause/arrêt/fin ont été supprimés au profit d’un appui pour ouvrir. (Phase 3 de la refonte des Activités en direct.)
  • Activité en direct — Typographie et mise en page – L’Activité en direct sur l’écran de verrouillage a été rafraîchie avec un titre en empattement Bitter, un minuteur de taille héroïque et une couverture qui déborde sur le bord avant. Les couvertures manquantes affichent maintenant un remplacement typographique (premier mot significatif du titre en Bitter) au lieu d’une icône générique. Les comptes de citations/livres ont été déplacés dans une ligne secondaire plus discrète à côté du minuteur. (Phase 1 de la refonte des Activités en direct.)
  • Cartes de session – Refonte des cartes de session sur l’écran Sessions : les sessions d’un seul livre affichent maintenant un titre plus grand, l’auteur et une ligne dirigée par une icône pour les pages et le temps ; les sessions de plusieurs livres conservent une liste compacte d’une ligne par livre avec une ligne de résumé au-dessus.

Corrigé

  • Rappels et coups de pouce — Le coup de pouce ne s’est jamais déclenché lorsque le rappel quotidien était activé – Auparavant, le rappel quotidien supprimait inconditionnellement le coup de pouce d’inactivité lorsque les deux étaient activés, de sorte que les coups de pouce n’atteignaient pratiquement jamais les utilisateurs ayant configuré un rappel quotidien. L’ordonnanceur choisit maintenant entre eux en fonction de l’activité : tant que l’utilisateur a enregistré une session dans la fenêtre de seuil, le rappel quotidien s’exécute ; une fois qu’il est resté silencieux au-delà du seuil, le coup de pouce prend le relais et le rappel quotidien est mis en pause jusqu’à ce qu’il lise à nouveau. Les utilisateurs sans session sont traités comme inactifs, de sorte que le rappel quotidien accompagne les nouveaux utilisateurs jusqu’à ce qu’ils aient établi une base.
  • Récupération de session — Le rejet n’a pas été conservé – La pression sur « Rejeter » dans la bannière de récupération de session supprime maintenant réellement le brouillon. L’implémentation précédente appelait delete sur un modèle récupéré dans un ModelContext différent (désalloué), ce que SwiftData ignore silencieusement, de sorte que la bannière réapparaissait au prochain lancement. Le rejet récupère maintenant les brouillons actifs dans le contexte actuel et les efface tous, protégeant également contre de rares doublons de brouillons.
  • Échanger la couverture / Échanger l’édition — Badge « Actuel » en double – Lorsque l’API des éditions renvoyait plus d’une ligne correspondant aux ISBN stockés d’un livre (par exemple, une correspondance sur ISBN-10 et une autre sur ISBN-13 et ISBN-10), les deux miniatures étaient marquées comme « actuelles » avec la lueur et le badge. L’édition « actuelle » est maintenant résolue une seule fois au niveau du modèle de vue, préférant une correspondance ISBN-13 à une solution de repli ISBN-10, de sorte qu’exactement une ligne est mise en surbrillance et que l’ordre de tri est stable.
  • Scintillement de la couverture de session récupérée – La session active récupérée ne clignote/se présente plus lors de la sauvegarde d’une citation ou d’une réflexion (le `fullScreenCover` est resté en place lors des sauvegardes SwiftData en donnant à l’élément présenté une identité stable).
  • Localisation du journal d’activité de session – Les entrées du journal de session active (« Session démarrée », « Session mise en pause », etc.) sont maintenant correctement localisées au lieu de toujours s’afficher en anglais. Les sessions existantes avec des journaux en anglais sont traitées avec soin.
  • Horodatages de session récupérée – Les entrées du journal d’activité de session reflètent maintenant la durée totale de la session lorsqu’une session est récupérée après un crash ou une fermeture forcée, de sorte que le total de l’en-tête et l’horodatage « Session terminée » ne divergent plus.
  • Activité en direct après récupération – L’écran de verrouillage et l’île dynamique reflètent maintenant le temps écoulé, le nombre de citations et le nombre de livres corrects lorsqu’une session de lecture est récupérée après un crash ou une fermeture forcée. Toute activité en direct obsolète laissée par le processus d’application précédent est effacée, et une nouvelle est démarrée, liée à la session récupérée.

1.2.2 – 22 avril 2026

Modifié

  • Cache des sélections de recherche – Durée du cache des sélections réduite de 7 jours à 6 heures afin que le contenu organisé soit rafraîchi plus fréquemment.
  • Vider le cache – « Vider le cache » dans les paramètres supprime maintenant également les sélections de recherche mises en cache en plus des images de couverture de livres.

1.2.1 – 21 avril 2026

Modifié

  • Sélecteur d’icônes d’application – Les icônes de supporters verrouillées sont maintenant cliquables – cliquer sur n’importe quelle icône (ou sur l’indice de verrouillage) ouvre la feuille de support Kiveo, de sorte que le flux de dons est accessible sans revenir aux paramètres.

Corrigé

  • Minuteur de session en pause – Le minuteur de session en pause n’avance plus lorsque l’application est en arrière-plan et rouverte ; l’entrée du journal d’activité « Session reprise » est maintenant correctement horodatée au point de pause.
  • Recherche dans la bibliothèque – La recherche dans la bibliothèque correspond maintenant aux auteurs et alias de livres en plus des titres, dans la bibliothèque principale et sur les étagères individuelles.
  • Teinte de la page – Les pages fixes (le plus visiblement Support Kiveo) affichant par intermittence des éléments interactifs et des chargeurs en bleu système au lieu de la couleur d'accentuation de l'application.

1.2.0 – Primevère 🌼 – 04 avril 2026

Ajouté

  • Import Goodreads : Livres personnalisés – Les livres non trouvés via l'API peuvent désormais être importés comme livres personnalisés à l'aide de métadonnées CSV (titre, auteur, éditeur, pages). Les livres non trouvés sont ignorés par défaut ; les utilisateurs choisissent par livre ou en bloc via « Tout ajouter comme personnalisé »
  • Import Goodreads : Analyse CSV flexible – Les indices de colonnes sont désormais résolus dynamiquement à partir de la ligne d'en-tête, corrigeant les importations qui échouent lorsque les exportations Goodreads omettent des colonnes (par exemple, Note moyenne)
  • Support Kiveo (Tirelire) – Système de pourboire unique et volontaire pour soutenir le développement indépendant
    • Trois niveaux de pourboire littéraires : Marque-page (1,99 $), Livre (4,99 $), Étagère (9,99 $) via RevenueCat
    • Tout pourboire débloque définitivement 6 icônes d'application exclusives
    • Statut de supporter conservé dans UserDefaults, iCloud KVS et RevenueCat
    • Prise en charge de la restauration des achats pour le déverrouillage d'icônes sur plusieurs appareils
  • Sélecteur d'icônes d'application – Choisissez parmi 6 icônes d'application alternatives exclusives (débloquées par pourboire)
  • Rappels de lecture – Notifications push optionnelles pour inviter gentiment les utilisateurs à reprendre la lecture
    • Temps de lecture quotidien — notification quotidienne programmée à une heure choisie par l'utilisateur
    • Rappel d'inactivité — notification après un nombre défini par l'utilisateur de jours sans session (2/3/5/7 jours)
    • Pause des rappels — faites taire temporairement tous les rappels jusqu'à une date choisie
    • Les notifications liées aux livres font référence au livre en cours de lecture par son nom
    • Le tapotement sur la notification renvoie directement au livre en cours de lecture
    • Paramètres synchronisés avec iCloud
  • Statut en pause – Nouveau statut de livre entre Lecture et Abandonné pour les livres mis de côté temporairement, avec une note de raison optionnelle, exclu de la section Continuer la lecture et des statistiques de temps jusqu'à la fin, et reprise de la lecture en un clic depuis les détails du livre
  • Blocage de session – Empêche le changement de statut à En pause ou Abandonné pendant qu'une session de lecture active est en cours
  • Notes de raison d'abandon – Note facultative en texte libre (~280 caractères) lors du marquage d'un livre comme Abandonné, modifiable depuis les détails du livre
  • Statistiques d'abandon – Statistiques dédiées sur l'écran d'accueil montrant les livres abandonnés, les pages lues avant l'abandon et le point d'arrêt courant
  • File d'attente de lecture sur la table de nuit – File d'attente organisée de jusqu'à 7 livres de la liste de souhaits à lire ensuite, avec glisser-déposer pour réorganiser, balayage pour supprimer, et notes optionnelles par livre
  • Widget Accueil Table de nuit – Carte compacte sur l'écran d'accueil montrant les couvertures des livres de la table de nuit avec un titre contextuel
  • Session en direct : Cartes de citation et de réflexion – Capturez des citations et des réflexions directement depuis une session de lecture en direct
  • Badges du journal d'activité – Badges de capture visuels et journal d'activité soigné pour les réflexions
  • Changer d'édition et Changer de couverture – Changez l'édition ou l'image de couverture d'un livre sans perdre les données de lecture
  • Prompts de révision automatiques – Invite les utilisateurs à noter Kiveo à des étapes d'utilisation naturelles
  • Sauvegarde : Champs de substitution de couverture – Données de substitution de couverture incluses dans l'export/import de sauvegarde Kiveo
  • Animation de pression de couverture de livre – Mise à l'échelle subtile + élévation de l'ombre lors de la pression sur les couvertures de livres dans la bibliothèque
  • Célébration d'achèvement de livre – Animation de lueur d'accentuation lors du marquage d'un livre comme terminé, avec retour haptique
  • Chargeurs squelettes – Des espaces réservés à pulsation remplacent les spinners lors du chargement des images de couverture
  • Animation de la barre de progression – Animation de ressort fluide lorsque la progression de lecture change

Modifié

  • Refonte de l'écran des paramètres – Refonte d'un formulaire générique vers une mise en page de ScrollView personnalisée avec un arrière-plan à dégradé chaud, une texture granuleuse, des effets de verre (iOS 26+) et des sections basées sur des cartes
  • Refonte de l'écran de recherche – Écran de recherche vierge transformé en une expérience riche en découvertes
    • « De notre jardin » — Sélections de livres organisées par l'API de sélection Kiveo avec prise en charge de la localisation
    • « Ajoutés récemment » — Défilement horizontal des livres les plus récemment ajoutés par l'utilisateur à sa bibliothèque
    • Puces de recherche récentes — Recherches récentes horizontales basées sur des puces remplaçant l'ancienne vue de liste
    • Bouton de numérisation de code-barres intégré épinglé en bas de l'état de pré-recherche
    • Pop-up de filtre de recherche avancée avec badge de filtre actif
    • Onglet de recherche iOS 26 — Recherche en tant qu'élément de barre d'onglets final dédié sur iOS 26+
  • Refonte de l'intégration – Flux d'intégration de 6 écrans repensé avec une copie de marque chaleureuse, une typographie personnalisée, une palette de couleurs adaptative avec prise en charge du mode sombre
  • Feuille « Nouveautés » – Refonte avec des animations de style intégration et une correspondance de version améliorée
  • Onglets de détails du livre – Onglets renommés en « Le livre », « Voyage » et « Souvenirs » avec indicateur actif de type pilule/capsule et effet de verre sur iOS 26+
  • États vides de Voyage et Souvenirs – États vides basés sur des illustrations avec des thèmes de jardin/livre magique et des CTA
  • Alias de livre dans les sessions – Les alias sont maintenant affichés dans les journaux de session en direct, l'activité en direct et les sauvegardes provisoires
  • Continuer la lecture – Section masquée lorsque tous les livres sont en pause
  • Création de livre personnalisée (iOS 26+) – Le bouton d'ajout de la barre d'outils de la bibliothèque mène directement à la création de livre personnalisée
  • Style de Snackbar – Forme rectangulaire arrondie avec une ombre chaude et un arrière-plan matériel régulier
  • Microcopie – Messages d'état vide et texte de confirmation plus chaleureux et plus humains
  • Chargement d'images – Les images de couverture existantes restent visibles pendant le rafraîchissement des métadonnées (pas de flash)
  • Dégradé de couleur – Le dégradé de l'en-tête des détails du livre se fond en douceur lors des changements de palette
  • Localisation – Conversion de toutes les chaînes anglaises codées en dur en clés de localisation sémantiques ; ajout de la locale es-419

Corrigé

  • Importation Goodreads – Correction de l'échec de l'importation lorsque l'exportation CSV omet des colonnes (par exemple, Note moyenne)
  • Stabilité de la session en direct – Correction de la réinitialisation du minuteur des sessions, de la perte d'état et du scintillement lors du retour de l'arrière-plan, du tirage des notifications ou de la capture de citations
  • Arrière-plan de la table de nuit – Couleur d’arrière-plan corrigée pour correspondre au thème de l’application
  • Persistance de la table de nuit – Correction des livres restant sur la table de nuit après des changements de statut basés sur la progression
  • Format d’image de la carte de partage – Format d’image corrigé pour correspondre aux spécifications d’Instagram (4:5)
  • Aperçu de la carte de partage – Correction de l’aperçu ne correspondant pas à la sortie rendue ; le texte de la citation s’adapte désormais aux citations longues
  • Fiche de détail du livre – Correction de la fermeture et de la réouverture de la fiche lors de l’ajout d’un livre à la bibliothèque
  • Fuite d’animation squelette – Animation de pulsation limitée pour éviter la fuite de transaction SwiftUI
  • Couvertures d’activité en direct – Correction des couvertures de livres ne s’affichant pas dans les activités en direct sur les versions bêta
  • Lien profond de notification – Correction de la notification ouvrant le mauvais livre ; onglets masqués pour les livres hors bibliothèque
  • Puces de filtre de recherche – Correction du rognage sur les écrans étroits et les traductions longues
  • Disposition de l’accueil (iOS 26) – Correction de l’oscillation de la disposition en limitant l’animation de la barre d’outils
  • Filtrage en pause/DNF – Correction de la bascule masquer en pause/DNF et des couvertures personnalisées du sélecteur de livres
  • Statistiques de réflexions – Correction du compteur manquant dans les statistiques « cette semaine » sur les écrans de citations/réflexions
  • Écran de réflexions – Correction des numéros dupliqués dans les statistiques et des titres de section mis en majuscules
  • Couvertures de livres personnalisées – Correction de la synchronisation CloudKit pour les images de couvertures de livres personnalisées ; les couvertures s’affichent désormais correctement dans les widgets d’activité en direct

1.1.0 – 19 janvier 2026

Ajouté

  • Cartes de partage – Créez de belles images partageables de votre contenu de lecture
    • Partagez des citations sous forme de cartes stylisées avec attribution du livre
    • Partagez des cartes de progression de livre (en cours de lecture ou terminé)
    • Partagez des listes de livres à partir des étagères sous forme de grilles de couvertures
    • Thèmes multiples : Défaut, Crépuscule, Océan, Forêt, Chaud, Minuit
    • Deux formats d’image : Story (9:16) et Post (3:4)
    • Cartes de citation : Activez/désactivez l’habillage de la carte
    • Cartes de livre : Activez la vue « Terminé » pour les livres achevés
    • Cartes de liste de livres : Modifiez le titre et le texte de l’étiquette
    • Points d’entrée : Détail de la citation, Détail du livre, Détail de l’étagère
    • Suivi analytique TelemetryDeck pour l’utilisation des fonctionnalités
  • Livres personnalisés – Créez des livres manuellement lorsqu’ils ne sont pas trouvés par la recherche
    • Ajoutez un livre personnalisé via le menu de la barre d’outils de la bibliothèque (appui long sur le bouton « + »)
    • Créez un livre personnalisé à partir de l’écran sans résultats de recherche
    • Badge indicateur de livre personnalisé sur les couvertures de livres (icône crayon, en haut à gauche)
    • Modifier les détails du livre personnalisé via le menu de la barre d'outils Détails du livre
    • Sélection de l'image de couverture de la photothèque pour les livres personnalisés
    • Toutes les fonctionnalités de l'application prises en charge : sessions, citations, réflexions, étagères
    • Couvertures personnalisées enregistrées localement avec compression JPEG
  • Améliorations du résumé de la vue d'accueil – Amélioration de votre section Résumé sur l'écran d'accueil
    • Renommé « Statistiques de lecture » en « Votre résumé »
    • Filtre d'année pour afficher les statistiques par année (Toutes, 2025, 2024, etc.)
    • Défilement horizontal des livres terminés montrant les couvertures des livres finis
    • Le filtre persiste après le lancement de l'application
    • Composant ChipPicker réutilisable pour les sélections de type menu
  • Refonte de la journalisation manuelle des sessions – Expérience utilisateur améliorée pour la saisie rétroactive des sessions de lecture
    • Les couvertures de livres s'affichent maintenant dans les lignes de livres de session
    • Sélecteur de date amélioré avec icône de calendrier et affichage formaté du jour de la semaine/date
    • Saisie de progression basée sur la différence : « Pages lues » au lieu de « Page actuelle » pour une saisie rétroactive plus facile
    • Prise en charge du mode pourcentage : affiche « Progression : X % » pour les livres audio et les livres suivis par pourcentage
    • La progression est maintenant facultative – enregistrez des sessions de durée uniquement sans nécessiter de saisie de page/pourcentage
    • Pré-sélection lors de l'ouverture depuis la barre d'outils Détails du livre (bouton Enregistrer la session)
    • Une feuille de sélection de livre dédiée remplace la recherche en ligne
  • Import/Export de sauvegarde Kiveo – Fonctionnalité complète de sauvegarde et de restauration des données
    • Exporter toutes les données de la bibliothèque vers un fichier de sauvegarde JSON (livres, étagères, sessions, citations, réflexions)
    • Importer à partir de la sauvegarde en mode fusion (conserve les existants, ajoute les nouveaux) ou en mode remplacement (importation propre)
    • Prévisualiser le contenu de la sauvegarde avant d'importer avec un résumé du nombre de données
    • Détection des doublons par ISBN lors de l'importation par fusion
    • Indicateur de progression pendant l'importation avec descriptions des phases
    • Situé dans les Paramètres sous la nouvelle section « Importation et exportation »
    • L'importation Goodreads a été déplacée dans la section Importation et exportation
  • Partage de livres avec des liens profonds – Partagez des livres avec d'autres utilisateurs Kiveo via des liens partageables
    • Le bouton Partager dans la barre d'outils Détails du livre génère un lien vers share.kiveo.app
    • La prise en charge des liens profonds ouvre les livres partagés directement dans l'application
  • Vue Web Safari intégrée – Les liens HTTP/HTTPS s'ouvrent maintenant dans l'application
    • Évite le changement de contexte vers l'application Safari externe
  • Plusieurs cartes "En cours de lecture" – L'écran d'accueil affiche désormais tous les livres que vous êtes en train de lire
    • Carrousel déroulant horizontalement lorsqu'il y a plusieurs livres en cours
    • Chaque carte affiche la couverture du livre, le titre et la progression de la lecture
  • Effet "Glass" pour Continuer la lecture (iOS 26) – Effet "Glass" appliqué aux cartes Continuer la lecture sur l'écran d'accueil
  • Actualisation automatique des données des livres – Récupère automatiquement les métadonnées de livres mises à jour depuis l'API
    • Met à jour les images de couverture, les descriptions et d'autres détails lorsqu'ils sont disponibles
  • Sélecteur de statut personnalisé – Nouveau filtre de statut de type "pilule" remplaçant les contrôles segmentés
    • Gestes de balayage : tirez au-delà du bord arrière pour accéder à "Tous", tirez au-delà du bord avant pour revenir à la sélection précédente
    • Animations de ressort fluides avec retour haptique
    • Appliqué aux vues Bibliothèque, Détail de l'étagère, Sélecteur de livres et Ajout de livres à l'étagère
  • Filtre de bibliothèque persistant – Le filtre de statut sélectionné persiste désormais entre les lancements de l'application
  • Masquer les livres DNF – Nouveau commutateur dans le menu de la barre d'outils de la bibliothèque pour masquer l'option de statut DNF
    • Le réglage s'applique globalement à tous les sélecteurs de statut dans l'application
    • Commute automatiquement sur "Tous" si DNF a été sélectionné lorsqu'il est masqué
  • Alias de livres – Définissez des noms d'affichage personnalisés pour les livres avec des titres longs ou indésirables
    • Définir l'alias via le menu de la barre d'outils dans la vue Détail du livre
    • Option pour effacer l'alias (visible uniquement lorsque l'alias est défini)
    • L'indicateur d'icône de crayon s'affiche dans toute l'application lorsqu'un livre a un alias
    • Alias affiché dans : Détail du livre, éléments de la bibliothèque, widget Continuer la lecture, Sessions en direct, Citations, sélecteurs de livres et gestion des étagères
  • Retour haptique – Retour tactile dans toute l'application pour une meilleure expérience utilisateur
    • Impact léger pour les commutateurs, les sélections et les appuis sur les boutons
    • Impact moyen pour les actions de pause/reprise et de réorganisation par glisser-déposer
    • Notifications de succès pour les enregistrements, les achèvements et les importations
    • Notifications d'erreur pour les suppressions et les échecs
    • Utilitaire HapticManager centralisé pour une utilisation cohérente
  • Éditeur de dates de livres – Modifiez les dates des livres (Ajouté, Commencé, Terminé) depuis le Détail du livre
    • Appuyez sur la section des dates dans les actions de la bibliothèque de livres pour ouvrir la feuille d'édition
    • Modifiez dateAjoutée, dateCommencée et dateTerminée avec des sélecteurs de date compacts
    • Effacez les dates optionnelles (commencées/terminées) avec le bouton d'effacement
    • Le statut se synchronise automatiquement en fonction des changements de date (les dates de fin définissent le statut sur Terminé, etc.)
    • Affiche la date de fin à côté des dates d'ajout/de début existantes
  • Barre d'outils Liquid Glass iOS 26 – Navigation repensée pour adopter l'esthétique Liquid Glass d'iOS 26
    • Titres affichés en position principale de la barre d'outils avec visibilité du fond en verre
    • La barre d'onglets se minimise en faisant défiler vers le bas pour plus d'espace de contenu
    • Les titres de la barre d'outils et le logo disparaissent en douceur lors du défilement
    • La barre d'outils de l'écran d'accueil inclut l'icône du logo Kiveo
    • Style de bouton proéminent en verre pour les actions de la barre d'outils
    • Retour gracieux à la navigation standard avec grands titres sur iOS 18

Modifié

  • Clarté améliorée des statistiques de lecture – Ajout de sous-titres descriptifs aux cartes de statistiques sur l'écran d'accueil
    • « Livres lus » affiche maintenant le sous-titre « Terminés »
    • « Pages lues » affiche maintenant le sous-titre « À partir des sessions »
    • « Série en cours » (renommé de « Série de jours ») affiche maintenant le sous-titre « Jours »
  • Confirmations d'enregistrement cohérentes – Comportement unifié de confirmation d'enregistrement pour les citations et les réflexions

Corrigé

  • Limitation manuelle des pages de session – Correction des pages enregistrées dépassant le nombre total de pages du livre
    • Lors de l'enregistrement d'une session manuelle, les pages sont maintenant correctement limitées par les pages restantes du livre
    • Exemple : Si un livre de 300 pages a 280 pages lues, l'enregistrement de 50 pages n'enregistre maintenant correctement que 20 pages
  • Préserver la date d'achèvement du livre – Correction de la date d'achèvement écrasée lors de l'enregistrement de sessions supplémentaires
    • Les livres qui ont déjà une date de fin ne voient plus leur date écrasée
    • Préserve la date d'achèvement d'origine même lors de l'enregistrement de sessions qui dépassent le nombre total de pages
  • Nettoyage des activités en direct – Correction de l'activité en direct bloquée sur l'écran de verrouillage après la fin d'une session ou un crash de l'application
    • Ajout d'un nettoyage au démarrage de l'application pour terminer les activités en direct orphelines
    • L'activité en direct affiche maintenant l'état de pause lors de la récupération d'une session interrompue
    • Termine correctement toutes les activités lorsque l'utilisateur abandonne la session récupérée
  • Horodatages de récupération de session – Correction des horodatages de journal incorrects dans les sessions récupérées
    • Les sessions récupérées préservent maintenant l'heure de début d'origine pour des horodatages de journal précis
    • Corrige le problème où les journaux de session affichaient de mauvaises heures après la récupération (par exemple, session de 3 minutes malgré une lecture réelle plus longue)
  • Largeur de la carte Continuer la lecture (iPhone) – Correction de la carte de livre unique qui ne s'étendait pas sur toute la largeur sur iPhone
  • Affichage des statistiques de livres – Correction du nombre de sessions et du temps de lecture gonflés dans toute l'application
    • Le widget « En cours de lecture » de la page d'accueil ne compte maintenant que les sessions terminées
    • L'onglet Statistiques des détails du livre filtre désormais les entrées ReadSessionBook orphelines
    • Correction de la création de ReadSessionBook orphelines lors de la capture de citations, ce qui entraînait un gonflement des statistiques
    • Mise en cache de ReadSessionBook pour la liaison de citations afin d'éviter plusieurs entrées orphelines
  • Ordre du journal d’activité de la session – Correction de l’affichage des journaux de session dans un ordre aléatoire dans la vue détaillée de la session
    • Les journaux sont désormais triés par horodatage (le plus récent en premier) pour correspondre à l’affichage de la session en direct
  • Affichage de la progression en pourcentage – Correction de l’affichage incorrect du pourcentage dans les éléments du livre et les indicateurs de progression
  • Enregistrement des citations/réflexions – Correction d’un problème où les citations et les réflexions ne s’enregistraient pas dans certaines conditions
  • Stabilité de la session en direct – Correction des problèmes potentiels de blocage/gel pendant les sessions de lecture en direct
  • Mise en cache de l’image de poursuite de la lecture – Correction de la mise en cache incorrecte des images de couverture des livres dans le widget Poursuite de la lecture
  • Couleur de teinte des paramètres – Correction de la couleur de teinte incorrecte dans les écrans Paramètres et À propos
  • Persistance de la mise en page de la bibliothèque – Correction de la préférence de mise en page de la bibliothèque qui ne persistait pas entre les lancements de l’application

Performance

  • Optimisation de l’écran d’accueil – Amélioration des performances de chargement et de rendu sur l’écran d’accueil
  • Mise en cache de la palette de couleurs de la couverture du livre – Mise en cache des couleurs dominantes des couvertures de livres pour un rendu plus rapide de l’interface utilisateur

1.0.2 – 21 décembre 2025

Ajouté

  • Gestion groupée des livres de l’étagère – Ajoutez ou supprimez plusieurs livres d’une étagère à la fois
    • Le nouveau bouton « + » dans la barre d’outils de l’étagère ouvre le sélecteur de livres (étagères personnalisées uniquement)
    • Interface de sélection multiple avec cases à cocher pour une sélection rapide
    • Activer/désactiver les livres – ajouter de nouveaux livres ou supprimer des livres existants
    • Filtres (Tous/Lecture/Liste de souhaits/Terminé) pour affiner la liste des livres
    • Options de tri (Activité récente/Titre/Auteur/Date d’ajout)
    • Rechercher par titre ou auteur
  • Masquer les étagères vides – Nouveau bouton dans le menu de la barre d’outils de la bibliothèque pour masquer les étagères sans livres
    • Disponible lorsque « Grouper par étagères » est activé
    • Le paramètre persiste entre les lancements de l’application
  • Espace réservé pour étagère vide – Carte d’espace réservé affichée dans les étagères vides
    • Affiche une icône « + » avec le libellé « Ajouter des livres »
    • Le toucher ouvre le sélecteur de livres groupés pour cette étagère
  • Actions rapides de gestion d’étagère – Touchez n’importe quelle étagère dans Gérer les étagères pour ajouter des livres
    • Également disponible via l’option de menu contextuel « Gérer les livres »

1.0.1 – 17 décembre 2025

Ajouté

  • Noter Kiveo – Nouvelle option dans les Réglages pour noter l'application sur l'App Store
  • Tri des étagères – Trier manuellement les livres au sein des étagères
    • Réorganisation par glisser-déposer via l'option Trier dans le menu de l'étagère
    • La nouvelle option « Tri des étagères » dans la vue Bibliothèque affiche l'ordre personnalisé
    • L'icône Indicateur montre quelles étagères ont un tri personnalisé
    • Les nouveaux livres ajoutés aux étagères apparaissent en haut
    • Ordre de tri indépendant par étagère (les livres dans plusieurs étagères ont des positions distinctes)
    • L'option de tri de la Bibliothèque est maintenant conservée entre les lancements de l'application
    • Protocole DataUpgrade pour des migrations standardisées
  • Fonctionnalité « Nouveautés » – Feuille post-mise à jour présentant les nouvelles fonctionnalités aux utilisateurs
    • Carrousel horizontal avec pagination pour plusieurs annonces de fonctionnalités
    • S'affiche uniquement aux utilisateurs existants après les mises à jour de l'application (pas les nouvelles installations)
    • Affichage cumulatif de toutes les fonctionnalités depuis la dernière version vue par l'utilisateur
    • Peut être ignoré via le bouton Fermer ou un geste de balayage
    • Bouton « Commencer » sur la dernière diapositive
    • Option dans les Réglages pour voir les Nouveautés à tout moment
    • Intégration de TelemetryDeck pour l'analyse
    • Tests unitaires pour VersionComparator et WhatsNewRegistry
  • Pourcentage de progression – Saisir la progression de lecture par pages ou par pourcentage
    • Sélecteur segmenté (Pages / %) dans les invites de mise à jour de progression
    • Préférence par livre : mémorise le dernier mode utilisé pour chaque livre
    • L'option pourcentage est disponible même sans le nombre total de pages
    • Changer de mode efface la saisie et conserve la préférence
    • S'applique au tap sur la progression dans les Détails du livre et aux invites de Session en direct

Corrigé

  • Filtrage des étagères – Correction du problème où la Pile de feuilles s'affichait vide lors de l'ouverture depuis la Bibliothèque
    • ShelfDetailView a maintenant un filtrage indépendant de LibraryView
    • Leaf Pile affiche correctement tous les livres non étiquetés, quel que soit le filtre de la Bibliothèque

1.0.0 – 12 décembre 2025