Contexte du problème

Depuis macOS 15 Sequoia, le système affiche un dialogue « Allow \"\" to find devices on local networks? » dès qu’une application accède au réseau local. La décision doit être mémorisée, mais plusieurs mécanismes d’installation contournent ce stockage : les navigateurs Chromium copient leur bundle dans un répertoire temporaire aléatoire, les logiciels versionnés utilisent des chemins …/versions/1.2.3/, et macOS associe la décision au chemin exact du binaire. Le résultat est une multiplication de lignes « Google Chrome.app » dans les réglages de confidentialité, chaque lancement déclenchant à nouveau le prompt.

Apple ne propose aucune API MDM pour pré‑refuser ce droit, et la commande tccutil reset n’efface pas ces entrées. L’utilisateur se retrouve donc face à une série de fenêtres répétitives, même lorsqu’il n’utilise jamais les fonctions réseau concernées.

Mécanisme du prompt Local Network

Le dialogue est généré par le processus système UserNotificationCenter. macOS lie la décision à la signature du code du binaire qui a déclenché la requête. Si le chemin change, la signature change et le système considère l’application comme nouvelle, réinitialisant ainsi le paramètre. Cette conception garantit la sécurité, mais elle rend impossible le nettoyage automatisé via les profils MDM classiques.

Fonctionnement de dontallow

Le projet dontallow fournit deux fichiers Swift sans dépendances qui s’exécutent comme agent launchd utilisateur. Après dontallow install, l’agent observe, via l’API Accessibility, la création de fenêtres appartenant à UserNotificationCenter. Il lit le texte du dialogue, vérifie qu’il s’agit bien d’un prompt Local Network, puis déclenche un appui sur le bouton « Don’t Allow ». Si l’action est refusée, il recourt à un clic synthétique aux coordonnées du bouton. L’agent consomme zéro CPU lorsqu’il est inactif et survit aux redémarrages grâce à son plist launchd.

dontallow install

Le script accepte trois modes : pause configurable (ex. dontallow pause 10m), liste blanche dans ~/.config/dontallow/allowlist, ou bascule manuelle du réglage « Local Network » dans les préférences système. Chaque rejet génère une notification contenant le nom de l’application et la commande de pause, permettant à l’utilisateur de désactiver ces alertes s’il le souhaite.

Limites et perspectives

Le mécanisme repose sur l’autorisation Accessibility, qui doit être accordée manuellement ou via un profil PPPC. Chaque mise à jour du binaire modifie la signature, obligeant à ré‑installer l’autorisation. Le projet ne supporte actuellement que l’anglais, car le parseur s’appuie sur les libellés « Allow » et « Don’t Allow ». Les tests unitaires couvrent le parsing du texte, la gestion du pause et la génération du plist, mais le test d’intégration nécessite un Mac avec l’accès Accessibility activé. Une version signée avec un Developer ID devrait éliminer la nécessité de ré‑appliquer le profil après chaque mise à jour.