Les commandes defaults write, macOS et Safari

Si vous pratiquez macOS OS X Mac OS X depuis longtemps, vous connaissez peut-être les commande defaults write. Et les derniers OS, surtout le prochain, pose des soucis avec ces dernières.

Le problème a été évoqué sur l’excellent Six Colors, avec un post sur Safari 14 et le menu Debug. La commande historique, qui suit, ne fonctionne en effet pas nécessairement avec Safari 14, mais ce n’est pas lié totalement à Safari, mais bien à l’OS.

defaults write com.apple.Safari IncludeInternalDebugMenu -bool true

En fait, cette commande pose plusieurs problèmes. Premièrement, si vous avez un Mac qui a été mis à jour au fil du temps, elle va fonctionner… sans fonctionner. Apple a en effet « sandboxé » Safari avec la version 13, et ce changement a eu un effet de bord. Dans les anciennes versions de Safari, le fichier de préférences était ~/Library/Preferences/com.apple.Safari.plist. Avec les versions récentes, il a été déplacé dans un container, uniquement accessible par Safari par défaut : ~/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plist. Mais si votre Mac a utilisé Safari 12, l’ancien fichier existe toujours. Ne cherchez pas la raison, c’est comme ça : quand Apple change des fichiers de place, les anciens restent. iTunes s’appelle maintenant Musique, mais les préférences d’iTunes sont encore là. Tout comme si vous avez un vieux système, des restes de vieux logiciels sont toujours présents.

Le problème, c’est que la commande ne peut pas deviner que le fichier de préférence qui est à l’endroit attendu n’est pas utilisé. Donc si vous tapez la commande, elle va bien écrire à l’endroit attendu, mais sans effet. C’est le premier problème.

Le second problème, lié, c’est que le Terminal – par défaut – ne peut pas aller écrire dans les préférences de Safari (et d’autres programmes Apple, d’ailleurs). C’est nécessaire depuis Mojave, il faut donner un accès complet au disque au Terminal dans les Préférences Système de macOS (Sécurité et confidentialité -> Confidentialité -> Accès complet au disque). Sans cette manipulation, le Terminal ne peut tout simplement pas aller modifier les fichiers.

Comme expliqué dans cet autre post de blog, il faut donc combiner l’accès complet au disque pour le Terminal et vérifier que l’ancien fichier de préférence n’est plus présent. Sans ces deux étapes, la commande ne fonctionne pas. Et avec le temps, méfiez-vous : une bonne partie des commandes historiques posent exactement le même problème. Et ça ne va pas s’arranger avec le temps.

Il faut noter, tout de même, que le passage à Safari 14 sous Catalina ne m’a pas obligé à faire les manipulations en question : le menu Debug était activé chez moi depuis des lustres, et la mise à jour n’a pas modifié le réglage.