CI/CD 8 septembre 2026 ~15 min macOS notarisation macOS

La notarisation d’une app macOS nécessite-t-elle un Mac ? Décision CI 2026

La soumission d’un logiciel au service de notarisation peut être orchestrée depuis un environnement non macOS avec Notary API, mais cela ne suffit pas à couvrir toute la chaîne de publication. Ce guide sépare la génération, la signature Developer ID, la soumission, la récupération du ticket et la validation afin de choisir entre CI généraliste, Mac distant et architecture hybride.

La notarisation d’une app macOS nécessite-t-elle un Mac ? Décision CI 2026

La soumission d’un logiciel au service de notarisation peut être orchestrée depuis un environnement non macOS avec Notary API, mais cela ne suffit pas à couvrir toute la chaîne de publication. Ce guide sépare la génération, la signature Developer ID, la soumission, la récupération du ticket et la validation afin de choisir entre CI généraliste, Mac distant et architecture hybride.

Le pipeline produit bien un fichier à envoyer, mais personne ne sait où signer, agrafer le ticket ou effectuer la validation finale.

La notarisation d’une app macOS ne nécessite pas toujours un Mac pour la soumission et la consultation du résultat ; en revanche, la construction, la signature Developer ID, certaines opérations de validation et le traitement avec stapler justifient généralement un véritable Mac. Pour la plupart des équipes, le choix le plus sûr en 2026 consiste à conserver un CI généraliste pour l’orchestration et à réserver un Mac distant isolé au cycle de publication.

Cet article s’adresse :

  • aux équipes de plateforme qui utilisent principalement un CI Linux et ajoutent une capacité de publication macOS ;
  • aux développeurs macOS qui veulent automatiser la signature, la notarisation et la distribution sans intervention manuelle ;
  • aux responsables techniques qui hésitent entre un Mac distant permanent et un nœud macOS disponible uniquement pendant les versions.
01

La notarisation macOS doit être découpée en plusieurs responsabilités

La notarisation n’est pas synonyme de « téléverser un fichier et attendre ». Une chaîne complète peut comprendre la génération de l’application, son empaquetage, la signature du code, la soumission au service de notarisation, la consultation de l’état, la récupération des journaux, l’agrafage du ticket et la vérification du fichier réellement distribué.

Apple décrit cette chaîne dans sa documentation officielle sur la notarisation des logiciels macOS. Cette séparation est importante pour décider quel nœud exécute quelle tâche.

Une architecture réaliste distingue donc les éléments suivants :

  • Construction : compilation du projet, génération de l’archive et production des composants embarqués.
  • Empaquetage : création d’un paquet, d’une image disque ou d’un autre artefact accepté pour la distribution, selon le format choisi.
  • Signature : application de l’identité Developer ID aux composants concernés, y compris les éléments imbriqués.
  • Soumission : envoi de l’artefact au service de notarisation.
  • Suivi : consultation de l’état, récupération de l’identifiant de soumission et lecture du journal en cas d’échec.
  • Agrafage : association du ticket au produit final lorsque le format et le mode de distribution le demandent.
  • Validation : contrôle du résultat sur le fichier destiné aux utilisateurs, et non sur une archive intermédiaire.

Le fait qu’un serveur Linux puisse effectuer un appel HTTPS vers un service Apple ne prouve donc pas qu’il puisse produire et valider seul un logiciel macOS prêt à distribuer. La question correcte n’est pas « le serveur peut-il envoyer le fichier ? », mais « quel environnement peut garantir chaque preuve de livraison ? ».

02

Première étape : produire un artefact reproductible avant la notarisation

La première décision concerne l’entrée du pipeline. Si l’équipe possède déjà un artefact signé ou prêt à signer, le CI Linux peut parfois assurer une partie de l’orchestration : calcul d’empreinte, stockage, transmission, déclenchement d’une requête et conservation des journaux.

En revanche, si le pipeline part du code source, plusieurs tâches peuvent dépendre du projet et de l’outillage Apple utilisé. Un projet Xcode, ses réglages de compilation, ses frameworks intégrés et son processus d’empaquetage doivent être testés dans l’environnement qui les produira réellement. Apple présente les principes de création de code signé pour la distribution Mac ainsi que les étapes d’empaquetage d’un logiciel Mac.

L’acceptation de cette étape doit reposer sur une preuve concrète :

  • le pipeline conserve un artefact non ambigu, avec un nom de version et une empreinte ;
  • une exécution répétée à partir du même commit produit une structure attendue ;
  • les éléments imbriqués sont présents avant la signature ;
  • l’artefact transmis à l’étape suivante est exactement celui qui sera publié ;
  • un échec de compilation ou d’empaquetage arrête la chaîne avant toute demande de notarisation.

Un nœud distant macOS est particulièrement pertinent lorsque la construction inclut Xcode, des outils de paquetage propres à macOS, une application audio ou vidéo, ou un flux de création qui doit être vérifié dans un environnement Apple réel. Pour un produit de design, de montage vidéo ou de traitement audio, déplacer uniquement la requête de notarisation vers Linux ne résout pas les problèmes liés aux extensions, aux composants intégrés ou à la structure finale de l’application.

03

Deuxième étape : isoler la signature Developer ID du reste du CI

La notarisation ne remplace pas la signature. Avant la soumission, l’équipe doit confirmer que l’application, ses bibliothèques, ses extensions et ses composants auxiliaires ont reçu la signature attendue, dans un ordre cohérent.

Le point sensible n’est pas seulement la présence d’un certificat. Il faut également contrôler :

  • l’identité de signature réellement utilisée par le processus ;
  • l’ordre de signature des composants imbriqués ;
  • les droits déclarés par l’application ;
  • la correspondance entre les entitlements et le comportement du produit ;
  • l’accès de l’utilisateur d’exécution au trousseau ;
  • l’absence de modification du fichier après la signature.

La documentation Apple consacrée à la signature de distribution doit servir de référence pour les commandes et les contrôles retenus. Les noms de certificats, les identifiants d’équipe, les secrets et les chemins doivent rester des variables telles que DEVELOPER_ID_PLACEHOLDER, TEAM_ID_PLACEHOLDER ou KEYCHAIN_PATH_PLACEHOLDER, jamais des valeurs copiées dans un article ou un dépôt.

Trois modèles sont possibles.

Un Mac distant dédié offre la frontière la plus lisible : l’environnement qui construit peut aussi signer, contrôler le trousseau et exécuter les outils macOS nécessaires. Il faut toutefois limiter les connexions, réinitialiser ou nettoyer l’environnement selon la politique de l’équipe et journaliser chaque accès aux secrets.

Un Mac partagé peut convenir à plusieurs projets, mais il augmente le risque de collision entre trousseaux, processus, caches et versions d’outils. Ce modèle demande des files d’attente strictes, une séparation des comptes et une procédure de nettoyage vérifiable.

Une signature externalisée peut réduire l’exposition du certificat dans le CI généraliste, mais elle ajoute une frontière de transport et un contrat opérationnel. L’équipe doit savoir quel artefact entre dans ce service, quelle preuve revient et comment reprendre le traitement après une interruption.

L’acceptation ne doit pas se limiter à « la commande s’est terminée sans erreur ». Elle doit inclure la sortie de vérification de signature, le compte d’exécution, l’état du trousseau et la conservation du journal associé au commit.

04

Troisième étape : choisir entre notarytool et Apple Notary API

Quand notarytool est le choix le plus direct

Lorsqu’un Mac existe déjà dans le pipeline, notarytool est généralement la voie la plus simple à évaluer. Il s’insère naturellement dans une séquence locale qui prépare le fichier, le soumet, attend le résultat, récupère les informations utiles et poursuit vers les opérations macOS suivantes.

Apple documente la personnalisation de cette chaîne dans son guide sur les flux de notarisation personnalisés. L’équipe doit y vérifier les paramètres actuels, le mode d’authentification retenu et le traitement des erreurs au moment de l’implémentation ; une commande mémorisée dans un ancien script ne doit pas être considérée comme une garantie durable.

notarytool est adapté lorsque :

  • le fichier est déjà sur le Mac qui exécute la signature ;
  • l’équipe souhaite limiter les échanges entre nœuds ;
  • les opérations de soumission et de suivi font partie d’un script macOS unique ;
  • le traitement doit enchaîner vers la validation ou l’agrafage ;
  • les développeurs veulent reproduire localement une partie du processus automatisé.

Son inconvénient est architectural : même si la soumission elle-même est un échange avec un service distant, le script reste lié au nœud macOS et à sa gestion des identifiants.

Quand Notary API devient intéressante

L’aperçu officiel de Notary API permet d’envisager une séparation plus nette entre l’orchestrateur et le nœud macOS. Un serveur Linux peut alors gérer la logique de pipeline, le stockage de l’artefact, le suivi de l’état et la récupération des informations prévues par l’interface, sous réserve de respecter l’authentification et les formats documentés.

La soumission est décrite dans la documentation Submit Software de Notary API, tandis que la récupération du journal s’appuie sur l’interface Get Submission Log. Ces références doivent rester la source de vérité pour le comportement de l’API et les paramètres acceptés.

Notary API est à évaluer lorsque :

  • le CI généraliste possède déjà le stockage et la gestion des reprises ;
  • l’orchestration doit rester indépendante de l’interface graphique et de la session d’un Mac ;
  • l’équipe veut centraliser les identifiants de soumission sans donner au nœud Linux accès au trousseau macOS ;
  • les états, journaux et identifiants doivent être associés à une exécution CI précise.

Cette option ne transforme pas Linux en environnement de publication macOS complet. Elle ne signe pas automatiquement le produit, ne construit pas un projet Xcode à sa place et ne réalise pas toutes les opérations locales de vérification. Elle déplace principalement la communication avec le service de notarisation.

05

Quatrième étape : appliquer la grille de décision à l’architecture CI

Utilisez la grille suivante pendant la revue technique. Cochez chaque condition vérifiée, puis retenez l’architecture indiquée par la première branche dont toutes les cases sont cochées. Si une case critique reste vide, ne considérez pas le pipeline comme prêt pour la production.

Branche A — soumission depuis le CI généraliste

  • L’artefact entrant est déjà construit et sa provenance est identifiable.
  • Le fichier est immuable entre la signature et la soumission.
  • La signature et les contrôles locaux ont déjà été réalisés sur un Mac ou dans une étape de signature maîtrisée.
  • Le CI doit principalement envoyer le fichier, consulter l’état et conserver les journaux.
  • Aucune opération ultérieure d’agrafage ou de validation macOS n’a été oubliée.

Si toutes ces cases sont cochées, choisissez Notary API depuis le CI généraliste, puis ajoutez un contrôle final si le format de distribution l’exige. Si une seule case critique reste vide, revenez à une architecture comportant un Mac après la soumission.

Branche B — Mac distant pour construire et publier

  • Le pipeline part du code source ou d’un projet Xcode.
  • L’empaquetage dépend d’outils ou de comportements propres à macOS.
  • La signature Developer ID doit accéder à un trousseau contrôlé.
  • Le fichier final doit être agrafé ou validé localement.
  • L’équipe doit conserver une preuve du compte d’exécution, de la signature et du résultat final.

Si ces conditions sont réunies, choisissez un Mac distant isolé pour la construction, la signature et les opérations locales de publication. Le CI généraliste peut continuer à déclencher les tâches et à stocker les résultats, mais il ne doit pas masquer la frontière de sécurité du Mac.

Branche C — Mac à la demande

  • Les publications sont espacées et prévisibles.
  • Le projet peut réinstaller ou vérifier ses outils sans intervention improvisée.
  • Les secrets et le trousseau peuvent être restaurés selon une procédure testée.
  • Le pipeline sait reprendre après l’arrêt ou le redémarrage du nœud.
  • Le délai de remise en service a été vérifié avec un artefact représentatif.

Si toutes les cases sont cochées, un Mac à la demande peut être préférable à un nœud permanent. Si la préparation est manuelle ou fragile, choisissez d’abord un Mac distant permanent pendant la phase de stabilisation.

Branche D — Mac distant permanent

  • Plusieurs branches doivent être construites, signées ou publiées régulièrement.
  • Le nœud doit rester disponible pour des tâches planifiées ou des versions fréquentes.
  • Une file d’attente empêche les collisions entre projets.
  • Le nettoyage du poste et l’accès aux secrets sont audités.
  • La reprise après redémarrage a été testée, et non seulement documentée.

Si toutes ces cases sont cochées, un Mac distant permanent est le choix le plus cohérent. Si la fréquence ne justifie pas cette disponibilité, revenez à la branche C et comparez une capacité à la demande.

Cette grille répond aux quatre décisions qui provoquent le plus d’erreurs : une application macOS peut être soumise depuis un CI Linux dans certaines conditions, mais le pipeline complet ne doit pas être confondu avec cet appel ; notarytool est pratique lorsque le Mac porte déjà l’artefact, tandis que Notary API convient davantage à une orchestration indépendante ; la construction, la signature, l’agrafage et la validation restent à attribuer explicitement ; enfin, un Mac distant s’intègre au CI en tant que nœud d’exécution, et non comme simple destination de fichiers.

06

Cinquième étape : agrafer le ticket et valider le fichier distribué

Un état de notarisation favorable ne signifie pas que le fichier envoyé aux utilisateurs est prêt. L’équipe doit encore déterminer si le ticket doit être agrafé au produit et vérifier que cette opération concerne l’artefact final, après toutes les transformations.

La distinction entre état distant et état local est essentielle :

  • le service peut confirmer qu’une soumission a été reçue et traitée ;
  • le journal peut expliquer un rejet ou fournir des informations de diagnostic ;
  • le fichier distribué peut néanmoins différer de celui qui a été soumis ;
  • une modification après signature ou après soumission peut invalider la preuve attendue ;
  • la validation doit porter sur l’archive, le paquet ou l’image disque réellement publiée.

La procédure de contrôle doit donc conserver le lien entre commit, empreinte, artefact, identifiant de soumission et journal. En cas d’échec, le pipeline doit quitter avec une cause exploitable : artefact différent, signature invalide, accès au trousseau refusé, réponse de service non concluante ou validation locale impossible.

Pour ce contrôle, une approche hybride est souvent plus robuste : le CI Linux conserve l’état et les journaux, tandis que le Mac distant exécute les commandes locales nécessaires à la signature, à l’agrafage et à la validation. L’équipe peut consulter la documentation Apple sur le flux complet de notarisation avant de figer les étapes du script.

07

Sixième étape : faire un essai complet avec deux nœuds

Avant de déclarer la chaîne prête pour la production, exécutez un essai de bout en bout avec un artefact de test représentatif. Le but n’est pas de démontrer qu’une requête HTTP fonctionne, mais de vérifier les frontières opérationnelles.

L’essai doit couvrir :

  1. la création de l’artefact depuis un commit identifié ;
  2. le transfert contrôlé vers le Mac distant ;
  3. la signature et la lecture des preuves produites ;
  4. la soumission avec notarytool ou Notary API ;
  5. la récupération d’un état et d’un journal ;
  6. l’agrafage ou la validation lorsque le format l’exige ;
  7. la conservation du fichier final et de ses métadonnées ;
  8. le redémarrage du nœud avant la reprise d’une tâche ;
  9. l’échec volontaire d’une étape afin de vérifier le comportement de reprise ;
  10. l’existence d’une intervention manuelle documentée lorsque l’automatisation ne peut pas décider seule.

Les contrôles les plus souvent négligés concernent le redémarrage et la reprise. Un environnement peut réussir une publication interactive tout en échouant dès qu’un compte n’a plus accès au trousseau, qu’un agent n’est pas relancé ou qu’un artefact temporaire a disparu. La validation du flux personnalisé de notarisation Apple doit donc être traduite en états observables dans le système de CI.

08

Le choix final : Mac distant permanent, nœud à la demande ou architecture hybride

Attribuez une note interne à chaque architecture sur cinq critères : construction, protection des secrets, reprise après panne, facilité de diagnostic et coût d’exploitation. La note n’a de valeur que si elle est fondée sur l’essai d’un artefact réel, pas sur la seule réussite d’une soumission.

Mac distant permanent — note indicative : forte pour les équipes qui publient régulièrement. Il devient le meilleur choix lorsque les constructions, signatures et publications sont fréquentes, que le nœud doit rester disponible et que l’équipe veut un environnement contrôlé avec accès SSH ou console distante. Son coût opérationnel est justifié seulement si la disponibilité et la répétabilité sont réellement utilisées.

Mac à la demande — note indicative : forte pour les versions espacées. Ce choix est cohérent lorsque les publications sont peu fréquentes, que la préparation de l’environnement est reproductible et que maintenir une machine active en permanence n’apporte pas de bénéfice démontré. Il faut alors tester le temps de remise en service et la restauration des outils avant de le retenir.

CI généraliste plus Mac distant — note indicative : meilleure couverture fonctionnelle. C’est le compromis le plus équilibré pour une équipe Linux qui veut conserver ses outils d’orchestration, ses journaux et ses règles de reprise tout en déléguant au Mac les tâches réellement dépendantes de macOS. Cette solution ajoute un transfert d’artefact, mais rend les responsabilités plus faciles à auditer.

Un Mac distant loué pour les équipes de développement permet de tester cette dernière architecture sans immobiliser immédiatement un budget matériel ni administrer une machine physique dans les locaux. Pour une équipe qui doit comparer plusieurs implantations, la page consacrée aux solutions de Mac distant peut servir de point de départ avant l’essai d’un pipeline réel.

Le Mac local reste préférable lorsque le matériel doit être présent physiquement, lorsqu’un périphérique spécifique intervient dans la publication ou lorsqu’une charge stable et très soutenue rend l’achat plus rationnel sur la durée. À l’inverse, une machine Linux seule n’est pas le meilleur choix à long terme si elle oblige à bricoler la signature, la construction Xcode, l’agrafage ou la validation dans des étapes non reproductibles.

En pratique, le CI Linux actuel conserve souvent trois limites : il ne fournit pas nativement l’environnement de construction macOS, il complique l’accès contrôlé au trousseau Developer ID et il ne garantit pas que le fichier distribué a reçu les dernières opérations locales nécessaires. Ajouter simplement une requête de notarisation ne supprime aucune de ces frontières. Si la chaîne doit réellement signer, construire et valider, louer un Mac distant auprès de VNCMac offre un chemin plus propre pour réaliser un essai complet, puis décider avec des preuves s’il faut conserver un nœud permanent ou revenir à une capacité à la demande.

La bonne décision n’est donc pas de chercher un « oui » ou un « non » absolu à la notarisation d’une app macOS : séparez les tâches, cochez les conditions correspondant à votre architecture, attribuez chaque preuve au bon environnement et ne validez la production qu’après avoir contrôlé le fichier final.