Publication macOS 14 mai 2026 env. 24 min Notarisation Mac distant

2026 Notarisation macOS et stapler
Mac distant VNC loué : notarytool jusqu’au smoke Gatekeeper

Sans machine locale : runbook pour soumettre, lire les logs, stapler et valider hors ligne sur un Mac cloud

Écran portable évoquant un flux de distribution logicielle sécurisé

Hors Mac App Store, livrer un DMG, un PKG ou un outil signé impose un autre contrat que l’envoi d’un build iOS : Gatekeeper et la notarisation Apple poussent les échecs vers la cohérence de signature, l’exécution renforcée, la matérialisation du ticket et le stapling. Sur un Mac cloud loué, l’outil `notarytool` manque rarement ; manquent surtout des preuves : UUID de soumission, JSON complet de `notarytool log`, éléments de trousseau du même utilisateur et une horloge alignée avec TLS. Ce guide s’adresse aux équipes Windows/Linux d’abord : points de douleur, matrice SSH seul, mixte, piloté VNC, runbook en huit étapes, quatre conclusions ticketables et une grille d’acceptation VNC de vingt minutes avec le même utilisateur. Sans archiver `notarytool log`, vous brûlez des quotas sur la même erreur d’entitlements parce que personne ne peut rejouer le rejet exact ; nommez les fichiers avec ticket et équipe avant tout rebuild. Liens : checklist première fois, NTP et certificats, Fastlane Match, disque plein, hotfix TestFlight.

01

Liste de douleur : la notarisation est une chaîne

Les flux Organizer ne remplacent pas la preuve de notarisation : identifiants et sémantique d’échec diffèrent ; séparez les dossiers de changement App Store et hors store pour éviter les collisions de rotation de jetons.

Le SSH pur crée du théâtre de trousseau : code retour zéro sans dialogue de consentement pour l’identité de signature réelle ; capturez menu, `id -un` et terminal ensemble.

Les problèmes hardened runtime et sandbox se corrigent dans Xcode, pas en recompressant le zip ; chaque rezip sans changement de projet masque la cause et nuit aux audits.

Sans ligne d’empreinte (`sw_vers`, `xcodebuild -version`, `notarytool --version`, identifiant de location), un reviewer ne peut pas rejouer votre environnement ; joignez les trois captures NTP si l’horloge a bougé.

Les ZIP de notarisation et les archives Xcode remplissent vite les SSD loués ; associez ce runbook au nettoyage DerivedData/Simulateur avant que l’espace libre ne coupe un submit en deux.

La matrice montre : archiver et soumettre passent souvent en SSH, alors que trousseau, Apple ID, 2FA, stapling et explications métier gagnent avec une session graphique du même utilisateur que celui qui signe.

  1. 01

    Logs perdus : sans notarytool log, vous brûlez le quota sur la même erreur d’entitlements.

  2. 02

    Store vs hors store : Organizer ne remplace pas la preuve ; identifiants différents.

  3. 03

    Théâtre SSH-trousseau : code zéro sans dialogue vu.

  4. 04

    Dérive runtime : corrigez dans Xcode, pas via zip.

  5. 05

    Pas d’empreinte : impossible de rejouer sw_vers et versions.

  6. 06

    Pression disque : voir checklist disque.

02

Matrice : SSH seul, mixte, piloté VNC

Le mode mixte est souvent le meilleur compromis : automatisez l’empaquetage en SSH, puis basculez en VNC pour le trousseau, `stapler` et un smoke double-clic enregistré sur un profil propre.

Votre monnaie interne : UUID de soumission + JSON de log + preuve trousseau du même utilisateur ; le reste est commentaire sans force probante.

Étape un fige l’empreinte ; l’étape deux exécute `codesign -dv --verbose=4` et `spctl -a -vv` ; avec Fastlane Match, alignez d’abord les identités via l’article Match avant de tester Apple.

Construisez le ZIP en conservant les symlinks, calculez SHA256 pour le ticket et évitez les chemins sous DerivedData pour ne pas empaqueter des symboles de debug.

Pour le submit, préférez des identifiants stockés aux mots de passe échoés dans l’historique shell ; copiez l’ID de soumission mot pour mot dans le ticket.

Étape / preuveSSH seulMixteVNC
Archive .app signéesouvent okokmeilleur visuel
Zip + submitokokok
Poll / logokokok
Trousseau / Apple ID / 2FArisque élevérecommandérecommandé
Stapler + validatepartielrecommandérecommandé
Expliquer aux non-devsfaiblefortmax

Monnaie interne : UUID + JSON + preuve trousseau même utilisateur.

03

Runbook en huit étapes

À chaque non-succès, tirez `notarytool log` en JSON avant de rebuilder ; mappez explicitement signature, hardened runtime ou packaging au lieu de resoumettre aveuglément.

Stapling et validation suivent la doc Apple sur le type de conteneur ; séparez « ticket absent » et « conteneur non supporté » et évitez le double stapling après changement de signature.

Pour le smoke, promouvez artefacts et logs vers un stockage durable hors nœud horaire ; sinon une fin de bail efface des preuves intermédiaires.

Détail opérationnel : faites tourner les mots de passe d’application via un propriétaire nommé et logguez la rotation à côté des changements ACL du dépôt Match.

Si les logs suggèrent le réseau, vérifiez split tunnel et portails captifs : des coupures TLS ressemblent à des erreurs d’entitlements jusqu’à ce que le chemin vers Apple soit propre.

Les incidents régionaux Apple arrivent ; notez région de soumission et région client pour distinguer panne partielle et mauvais build.

Les boutiques multi-produits doivent indexer bundle id + UUID dans une base plutôt que d’éparpiller dans des dossiers personnels.

Entraînez-vous au rollback : figez le dernier DMG staplé connu bon avec son paquet de logs ; un hotfix doit bifurquer la preuve, pas écraser l’archive UUID précédente.

Fait un : captures « Accepted » exigent le JSON de log correspondant et le hash d’artefact de la même soumission.

Fait deux : trousseau et Apple ID sont par défaut obligatoires en VNC sauf preuve contraire d’une signature non interactive du même utilisateur.

  1. 01

    Empreinte : sw_vers, xcodebuild -version, notarytool, ID de location.

  2. 02

    Pré-signature : codesign -dv --verbose=4, spctl -a -vv; Match d’abord.

  3. 03

    ZIP upload : symlinks, SHA256.

  4. 04

    Submit : secrets stockés ; ID copié tel quel.

  5. 05

    Logs si échec : JSON avant rebuild.

  6. 06

    Fix dans Xcode : entitlements projet.

  7. 07

    Stapler : xcrun stapler staple puis validate.

  8. 08

    Smoke & promotion : double-clic propre ; sortir du nœud horaire.

bash
xcodebuild -version
notarytool --version
codesign -dv --verbose=4 "Your.app"
ditto -c -k --keepParent "Your.app" "Your.zip"
notarytool submit "Your.zip" --apple-id "$APPLE_ID" --team-id "$TEAM_ID" \
  --password "$APP_SPECIFIC" --wait
notarytool log "$SUBMISSION_ID" > notary-log.json
xcrun stapler staple "Your.dmg"
xcrun stapler validate "Your.dmg"
04

Quatre conclusions ticketables

  • 1 : captures « Accepted » + JSON + hash même soumission.
  • 2 : trousseau / Apple ID = VNC requis par défaut.
  • 3 : stapling : ticket manquant vs conteneur ; pas de double stapling après changement de signature.
  • 4 : triple contrôle horloge avant grosses releases.

Fait trois : erreurs de stapling = ticket manquant vs conteneur non supporté ; pas de second stapling pour masquer une signature modifiée.

Fait quatre : répétez la triple vérification d’horloge avant les grosses releases externes ; le décalage imite des bugs de signature.

La grille vingt minutes vérifie le même utilisateur (barre de menus vs `id -un`), horloge/TLS (Réglages vs `sntp`/curl), UUID stocké, issues `jq` vides et `stapler validate` OK, plus éventuellement un court enregistrement du double-clic.

Aligner les horodatages coupe les débats : heure de stapling, heure de soumission et captures NTP doivent raconter une courte histoire transmissible par un PM.

05

Grille VNC vingt minutes (même utilisateur)

ContrôlePreuve VNCPreuve SSHOK
Même userbarre menuid -unaligné ticket
Horloge/TLSRéglages datesntp/curlconforme runbook
Submit okoptionnelligne idUUID stocké
Log proprescan JSONjq videAccepted reproductible
Stapler okoptionnel vidéovalidate okoffline propre

Les pipelines CI parallèles doivent joindre des tableaux d’écouteurs pour prouver qu’aucun `notarytool` fantôme n’a compété pour les identifiants la nuit.

La référence Apple reste normative ; cet article optimise l’exploitation d’un Mac distant loué et les preuves VNC ; gardez les uploads App Store sur un autre dossier de changement.

FAQ : le stapling aide beaucoup pour les DMG hors ligne mais vérifiez toujours le type de conteneur et archivez la sortie de validate avec l’UUID.

06

Pour aller plus loin

FAQ : SSH suffit souvent pour submit/poll ; les chaînes de consentement du trousseau demandent VNC avec le même utilisateur. FAQ : tops échecs = décalage horaire, proxys, fin de bail qui efface les preuves, trousseau scindé entre utilisateurs ; passez la grille avant la lecture profonde des logs. FAQ : première triage = figer l’ID de soumission, sauver JSON, mapper signature/entitlements, éviter les resoumissions aveugles. Conclusion : le coût n’est pas les minutes d’upload mais la reproductibilité du paquet de preuves ; louer un Apple Silicon avec VNC aligne terminal et GUI dans une session observable. Pour rejouer cette acceptation sur un Mac distant, utilisez VNCMac : bouton principal vers la page d’achat, contexte sur l’accueil, instructions dans le centre d’aide. Séparez sessions App Store et notarisation pour éviter des collisions de rotation qui cassent Organizer sans raison de signature. Si le proxy injecte des pages de login, collectez des poignées `curl -v` avant de soupçonner les entitlements ; sinon vous optimisez la mauvaise couche pendant des semaines. Namespacez les sorties ZIP loin de DerivedData quand automatisation et pas manuel partagent le même home ; cela évite mélanges de symboles et de chemins. Documentez identifiants de location et fuseaux fournisseur dans les tickets ; cela explique des offsets UTC dans les logs qui semblent être des erreurs de signature. Reliez la checklist première utilisation pour que les nouveaux ne combinent pas réglage viewer et notarisation le même soir. Reliez le guide NTP avant de diagnostiquer des certificats ; beaucoup de PKIX disparaissent avec une horloge correcte et un chemin TLS propre. Reliez Fastlane Match dès que Git chiffré et cache trousseau coexistent ; la matrice indique quelles étapes restent SSH-safe. Reliez le hotfix d’urgence quand release et incident partagent la nuit ; les patterns Organizer y sont déjà condensés. Reliez la checklist disque dès que simulateurs et archives mangent la marge SSD ; sinon `notarytool submit` casse sur de gros ZIP. Formez le support : « Accepted » n’implique pas « staplé et validé hors ligne » ; définissez des critères Done par type de conteneur. Utilisez de courts enregistrements de smoke seulement si la politique le permet ; sinon des extraits `stapler validate` et des hashs suffisent. Si plusieurs produits partagent une machine louée, isolez strictement répertoires et trousseaux ; le cross-talk crée des identités absentes du ticket. Planifiez des jobs de promotion avant fin de bail vers un stockage objet ; sinon les dossiers UUID disparaissent et les post-mortems pauvrent. Intégrez ces portes manuelles dans les templates CI pour éviter que l’automatisation ne devienne silencieusement SSH-only là où la matrice impose le VNC. Conservez l’histoire dans un dossier par tag de release ; c’est moins cher que refaire de la forensique quand un client envoie un screenshot Gatekeeper trois mois plus tard. En bref : traitez chaque notarisation comme une expérience d’ingénierie reproductible avec setup figé, hypothèse claire et données brutes archivées pour que audits internes et questions clients voient la même preuve sans deviner quelle version de Xcode était réellement en ligne.

Lié

Longues lectures

FAQ

FAQ

Souvent oui pour DMG hors ligne ; vérifiez le conteneur et archivez validate.

Submit/poll souvent ; consentements en VNC même utilisateur.

Horloge, proxys, bail, trousseau scindé — grille d’abord.

Geler ID, JSON, mapper signature/entitlements.

Conclusion

Le coût est la reproductibilité des preuves, pas les minutes d’upload. Louer un Apple Silicon avec VNC aligne terminal et GUI.

Pour refaire cette acceptation : VNCMacpage d’achat, accueil, centre d’aide.