Comment Floodtide vérifie une mise à jour
Mis à jour le
Un outil de mise à jour qui remplace des apps dans votre dossier Applications doit pouvoir dire exactement ce qu'il vérifie. Cette page est écrite à partir du code source de Floodtide, dans l'ordre où les vérifications s'exécutent : d'où vient une mise à jour, ce qui doit répondre du fichier, ce qui est vérifié une fois le fichier décompressé, ce qui se passe quand une vérification échoue, et ce qui est conservé pour que vous puissiez revenir en arrière.
D'où vient une mise à jour
Floodtide ne tient aucune base de données de versions qui lui soit propre. Pour chaque app, il interroge les sources qui savent déjà, et la ligne indique laquelle a répondu.
- Le flux de mise à jour de l'app elle-même. Un flux Sparkle dont Floodtide lit l'adresse dans le bundle de l'app lui-même. Quand l'app en déclare un, ce flux l'emporte d'emblée sur toute autre source.
- Le catalogue de casks de Homebrew. Lu directement dans le catalogue de Homebrew, si bien que Homebrew n'a pas besoin d'être installé. Une app installée par Homebrew reste à Homebrew pour ses mises à jour, et Floodtide préfère pour elle la réponse du cask.
- GitHub Releases et les flux Electron. Pour les apps qui ne publient ni appcast ni cask. Floodtide choisit une seule build Mac, sans ambiguïté, pour le processeur de ce Mac, plutôt que de deviner entre plusieurs.
- Le Mac App Store. Uniquement pour les apps que l'App Store a installées, d'après ce que l'App Store propose à ce Mac. Une app de l'App Store ne se voit jamais proposer un téléchargement direct, et l'App Store n'est jamais interrogé au sujet d'une app venue d'ailleurs.
- Le catalogue signé de Floodtide, et vos propres sources. Un flux recherché à la main qui ne fait jamais qu'indiquer quelle source lire pour une app, si bien que la lecture passe toujours par les sources ci-dessus et que rien de la vérification n'est dupliqué. Une adresse Sparkle ou un dépôt GitHub que vous définissez vous-même est consulté avant tout ce que Floodtide découvre.
Ce qui est comparé, c'est la version et, quand les deux côtés en publient un, le numéro de build. Une version n'est proposée que si, d'après cette comparaison, elle est plus récente que la copie installée. Une version plus ancienne, ou celle que vous avez déjà, n'est pas affichée comme mise à jour.
Deux comparaisons sont refusées dès l'analyse plutôt qu'après un téléchargement : un saut incohérent, par exemple de 5.92 à 2584447, est tenu à l'écart de « Tout mettre à jour » et des exécutions planifiées, et une version qui se présente comme une démo ou une build d'essai n'est jamais proposée à une copie sous licence.
Ce qui doit répondre du fichier
Avant même qu'une ligne reçoive un bouton « Mettre à jour », quelque chose doit répondre du fichier qu'elle téléchargerait. La règle est consultée deux fois, une fois par l'analyse et une fois par le téléchargement lui-même, pour qu'aucune ligne ne propose un bouton que l'étape de téléchargement refuserait. Trois choses comptent, et une ligne a besoin de l'une d'elles.
- Une somme de contrôle publiée par la source. Le SHA-256 qu'un cask Homebrew enregistre pour le fichier, ou le SHA-512 qu'un flux Electron publie à côté de chaque téléchargement.
- Une signature dans le flux. Un flux Sparkle peut porter une signature EdDSA pour chaque téléchargement, et l'app porte la clé publique correspondante. Floodtide vérifie le fichier avec cette clé.
- La signature de la copie installée elle-même. Quand ni l'une ni l'autre n'est publiée, la copie présente sur votre Mac doit être valablement signée par une équipe Developer ID, et le remplacement est ensuite tenu à cette même équipe une fois décompressé. Une app non signée, sans somme de contrôle et sans signature de flux, ne reçoit aucun bouton « Mettre à jour » : la ligne affiche la version et indique que Floodtide n'a pas pu confirmer que le téléchargement est authentique.
Ce qui est vérifié sur le fichier téléchargé
- La connexion. Les builds livrées ne téléchargent qu'en https. Une adresse en simple http est d'abord demandée en https, et refusée si le serveur ne sert pas le fichier ainsi. Un lien qui répond par une page web plutôt que par un fichier est refusé lui aussi.
- La somme de contrôle. Quand la source en a publié une, le SHA-256 ou le SHA-512 des octets reçus lui est comparé. En cas de différence, la ligne indique que le téléchargement n'est pas arrivé intact, et rien n'est décompressé.
- La signature du flux. Quand le flux a signé le téléchargement, la signature EdDSA est vérifiée avec la clé contenue dans l'app installée. En cas de différence, la ligne indique que le téléchargement n'est pas signé par le développeur que Floodtide attendait.
Ce qui est vérifié une fois le fichier décompressé
Le téléchargement est décompressé dans un dossier à part, et l'app qu'il contient est vérifiée avant que quoi que ce soit ne soit touché sur votre Mac. La ligne affiche chaque étape pendant qu'elle s'exécute : Décompression, Vérification de la signature, Vérification avec Gatekeeper.
- C'est la même app. L'identifiant de bundle doit être celui de l'app installée. Un téléchargement qui est une autre app est refusé et mémorisé, pour que le même fichier ne soit pas récupéré de nouveau à la prochaine analyse. Un changement de nom décidé par le développeur lui-même n'est admis que si les deux copies portent une signature Developer ID de la même équipe et que le téléchargement est notarisé par Apple, et même alors Floodtide vous demande avant de le mettre en place.
- Elle n'est pas plus ancienne. La version et la build contenues dans le téléchargement sont comparées à la copie installée, et une version ou une build plus ancienne est refusée. Un téléchargement qui se révèle être la build déjà installée est reconnu à sa signature du code, identique à celle de la copie installée, et la ligne le dit au lieu de prétendre à une mise à jour.
- Elle fonctionne sur ce Mac. La version de macOS dont la nouvelle build a besoin est comparée à celle que vous utilisez. Une build qui exige un macOS plus récent est refusée en nommant cette version, et le refus se lève de lui-même une fois votre Mac mis à niveau. La nouvelle build doit aussi contenir du code pour le processeur de ce Mac quand la copie installée en contient, de sorte qu'une build Intel uniquement ne remplace jamais une app Apple silicon native.
- La signature du code tient. Floodtide exécute sur le nouveau bundle la vérification profonde et stricte de codesign, qui hache chaque fichier qu'il contient. Des métadonnées du Finder sur la copie ou un format de signature plus ancien sont pardonnés ; un fichier modifié ou un sceau brisé ne le sont pas.
- L'équipe de signature correspond. L'identifiant d'équipe dans la signature de la nouvelle build doit être égal à celui de l'app installée. Une app valablement signée n'est jamais remplacée que par une app valablement signée, jamais par une app non signée ni par une app qui ne nomme aucune équipe. Une équipe différente est soit un véritable changement de développeur, soit un flux détourné, et Floodtide ne peut pas faire la différence : la mise à jour s'arrête donc et vous pose la question ; votre réponse est conservée pour cette seule app. Une app installée non signée ne peut passer qu'à une build valablement signée.
- Gatekeeper est d'accord. Chaque bundle signé est aussi évalué par Gatekeeper, qui pèse la notarisation, la révocation et la politique de sécurité de ce Mac, avec au moins dix minutes accordées sur les Mac lents. Sur un Mac dont le profil n'autorise que les apps de l'App Store, Gatekeeper refuse toute build Developer ID, et Floodtide indique qu'il s'agit de la politique du Mac et non d'un défaut de la mise à jour.
- Et de nouveau après l'échange. La copie mise en place est vérifiée une seconde fois par rapport à celle qu'elle a remplacée. Si cette dernière vérification échoue, l'original est remis en place et la ligne le dit. Seul un parcours qui exécute cette nouvelle vérification peut se terminer sur « Terminé, vérifié ».
Paquets d'installation
Certaines apps sont livrées sous forme de paquet d'installation plutôt que de bundle d'app. Un paquet exécute ses propres scripts en tant qu'administrateur, il est donc tenu à ses propres exigences : Gatekeeper l'évalue comme un installeur, et quand aucune somme de contrôle n'a répondu du téléchargement, le certificat Developer ID Installer avec lequel il est signé doit nommer l'équipe de l'app installée. Floodtide enregistre le SHA-256 du paquet avant cette évaluation et le vérifie de nouveau juste avant de remettre le paquet à l'installeur, afin que ce qui s'exécute soit bien le fichier qui a été évalué.
L'installeur propre à un éditeur, lorsqu'il est arrivé sans somme de contrôle, doit satisfaire trois exigences en une seule : une signature Developer ID, la notarisation par Apple et l'équipe de la copie installée.
Quand une vérification échoue
La mise à jour est refusée, rien n'a changé sur votre Mac, et la ligne dit en une phrase ce qui a été constaté et quoi faire ensuite. Une somme de contrôle qui ne correspond pas se lit « Le téléchargement n'est pas arrivé intact ». Une signature ou une vérification Gatekeeper en échec se lit « La mise à jour ne répond pas aux exigences de Floodtide en matière de signature du code ou de notarisation », avec l'étape qui consiste à télécharger plutôt cette mise à jour chez le développeur.
Un refus qui porte sur le fichier lui-même, une autre app à l'intérieur, une signature en échec, rien d'installable, un format que Floodtide ne sait pas ouvrir, est mémorisé pour cette version, pour que la ligne continue de dire ce qui a été constaté au lieu de dépenser un téléchargement à le redécouvrir à chaque analyse. Un refus qui porte sur ce Mac, un minimum de macOS ou un profil App Store seulement, est mémorisé avec ce contre quoi il a été établi, et se lève de lui-même quand le Mac change.
Chaque étape d'une installation a une limite de temps adaptée à l'app. Une vérification qui la dépasse met fin à la mise à jour en nommant l'étape concernée, l'app restant intacte, et une vérification interrompue compte comme une vérification non réussie, jamais comme une vérification réussie.
La sauvegarde, et le retour en arrière
Avec les sauvegardes activées, ce qui est le réglage par défaut, Floodtide copie l'app installée avant de la remplacer : un clone quand le disque le permet, sinon une archive zip, dans un dossier Floodtide Backups que vous pouvez déplacer sur un autre disque. Si cette copie ne peut pas être faite, la mise à jour n'a pas lieu.
« Annuler la dernière mise à jour » remet la copie la plus récente en place en un clic tant que l'app n'est pas ouverte, et la copie restaurée repasse par Gatekeeper avant d'être mise en place. La copie est conservée trois jours, une semaine, deux semaines ou un mois, une semaine par défaut ; le bouton Annuler compte les jours restants, et « Supprimer les sauvegardes » dans les Réglages les retire toutes.
Indépendamment des sauvegardes, l'échange lui-même garde l'original de côté jusqu'à ce que la nouvelle copie soit en place et ait passé sa dernière vérification. Une installation échouée remet l'original en place même si les sauvegardes sont désactivées.
« Versions antérieures », dans les détails d'une app, liste les versions plus anciennes que sa source publie encore. En choisir une l'installe avec les mêmes vérifications de signature, d'équipe et de Gatekeeper qu'une mise à jour ; seule la règle voulant qu'un téléchargement soit plus récent s'efface, ce qui est tout l'intérêt de revenir à une version antérieure. Le retour à une version antérieure n'est pas proposé pour une app dont le remplacement exige des droits d'administrateur.
Ce qui retient une mise à jour
Au-delà d'une vérification échouée, des règles font attendre une mise à jour sans la refuser.
- L'app est ouverte. Floodtide ne ferme jamais une app à votre place. Une exécution planifiée laisse une app ouverte tranquille et installe sa mise à jour quand vous quittez l'app. « Quitter et mettre à jour », que vous actionnez vous-même, demande poliment à l'app de quitter ; si elle refuse, le menu du bouton propose « Forcer à quitter et mettre à jour », qui ne ferme cette seule app qu'après votre confirmation.
- La dernière tentative automatique a échoué. Avec les mises à jour automatiques activées, une app dont la dernière tentative automatique a échoué est laissée à cette version pendant environ 17 heures avant qu'une exécution planifiée ne réessaie, pour qu'une recherche toutes les heures ne télécharge pas chaque heure le même fichier défaillant. Votre propre « Mettre à jour », « Tout mettre à jour » ou « Rechercher des mises à jour » réessaie toujours immédiatement.
- Le Mac n'est pas prêt. Une exécution planifiée ne démarre pas pendant vos heures calmes, quand la batterie est faible, en mode Économie d'énergie ou sur une connexion limitée, et réessaie une fois que c'est passé.
- Une exécution planifiée est plus stricte. Elle laisse de côté Floodtide lui-même, toute app qui aurait besoin de votre mot de passe administrateur, toute version majeure quand « Tout mettre à jour » a pour consigne de les exclure, toute app qui a besoin de l'installeur propre à l'éditeur, toute version qu'une exécution précédente a déjà prouvée impossible à installer, et toute app que vous avez désactivée. Elle ne répond jamais à une question, telle qu'un changement d'équipe de signature, à votre place.
Ce que Floodtide ne fait jamais
- Installer sans votre accord. L'installation automatique est désactivée tant que vous ne l'activez pas, et les mises à jour de Floodtide lui-même ont un interrupteur à part. Une recherche planifiée ne fait que regarder. La page macOS liste les mises à jour système que Mise à jour de logiciels propose et ouvre Mise à jour de logiciels ; Floodtide n'installe jamais macOS lui-même.
- Raccourcir une vérification. Une exécution automatique et « Tout mettre à jour » effectuent les mêmes vérifications qu'un simple « Mettre à jour », sans rien raccourcir.
- Voir votre mot de passe. Une app dans un dossier que macOS protège a besoin de la même demande de mot de passe administrateur que montre tout installeur, une fois pour tout le lot et annoncée avant d'apparaître. C'est macOS qui prend en charge le mot de passe ; Floodtide ne le voit ni ne le conserve jamais, et une exécution planifiée ne le demande jamais.
- Envoyer votre liste d'apps là où vous ne l'avez pas autorisé. Quelles apps et quelles versions ce Mac utilise est partagé une fois par jour sans identifiant, pour que chaque Mac aide tous les autres ; l'app vous le dit au premier lancement, et Réglages, Confidentialité montre exactement ce qui est envoyé et permet de le désactiver. La ligne d'usage anonyme est désactivée tant que vous ne l'activez pas. Rien d'autre à votre sujet ne quitte le Mac. La politique de confidentialité (en anglais) en donne la liste requête par requête.
- Demander des autorisations qu'il ne peut pas expliquer. Pas d'Accès complet au disque, pas de contrôle via Accessibilité, pas d'Enregistrement de l'écran. Floodtide lit les informations de version des apps dans votre dossier Applications comme n'importe quel explorateur de fichiers.
Questions fréquentes
Floodtide vérifie-t-il les signatures du code ?
Oui. Chaque bundle d'app décompressé passe par la vérification profonde et stricte de codesign, son équipe de signature doit correspondre à celle de l'app installée, et Gatekeeper l'évalue avant que quoi que ce soit ne soit remplacé. La copie mise en place est vérifiée de nouveau par rapport à celle qu'elle a remplacée, et l'original est remis en place si cette vérification échoue.
Et si la somme de contrôle ne correspond pas ?
La mise à jour est refusée avant toute décompression, et rien n'est touché sur votre Mac. La ligne indique que le téléchargement n'est pas arrivé intact et suggère d'appuyer de nouveau sur « Mettre à jour » ; si le fichier du développeur a réellement changé, Floodtide le propose dès que la source a rattrapé son retard.
Puis-je annuler une mise à jour ?
Oui. Avec les sauvegardes activées, le réglage par défaut, la copie remplacée est conservée sous forme de clone ou de zip pendant la durée que vous choisissez, une semaine par défaut, et « Annuler la dernière mise à jour » la restaure en un clic tant que l'app n'est pas ouverte. « Versions antérieures », dans les détails d'une app, peut aussi installer une version plus ancienne que la source publie encore, avec les mêmes vérifications qu'une mise à jour.
Floodtide installe-t-il parfois sans demander ?
Non. L'installation automatique est désactivée tant que vous ne l'activez pas, et même alors elle effectue les mêmes vérifications qu'une mise à jour manuelle, ne ferme jamais une app, ne demande jamais votre mot de passe et ne décide jamais à votre place d'un changement d'équipe de signature. Les mises à jour de Floodtide lui-même ont un interrupteur à part, et la page macOS ne fait que lister les mises à jour d'Apple.
D'où Floodtide tire-t-il les mises à jour ?
Du flux Sparkle de l'app elle-même, du catalogue de casks de Homebrew, de GitHub Releases, des flux de mise à jour Electron, du Mac App Store pour les apps qu'il a installées, et du catalogue signé de Floodtide, qui ne fait qu'indiquer laquelle de ces sources lire. Vous pouvez aussi indiquer vous-même à Floodtide une adresse Sparkle ou un dépôt GitHub pour une app.
Floodtide vérifie-t-il que la mise à jour fonctionne sur mon Mac ?
Oui. La version de macOS dont la nouvelle build a besoin est comparée à la vôtre, et une build qui exige un macOS plus récent est retenue, cette version nommée, jusqu'à ce que vous mettiez votre Mac à niveau. La nouvelle build doit aussi contenir du code pour le processeur de ce Mac quand la copie installée en contient, de sorte qu'une build Intel uniquement ne remplace jamais une app Apple silicon native.
Voyez ce que Floodtide vérifie sur votre propre Mac
L'analyse est gratuite et ne demande aucun compte. 14 jours d'app complète, puis l'analyse reste gratuite ; une licence coûte £10.9912,99 €$14.99 une fois pour 3 Mac.