Le bac à sable de macOS peut gêner les commandes « defaults write »

Nicolas Furno |

Avec la généralisation du sandboxing sur macOS, on ne peut plus aussi facilement modifier les réglages cachés de certaines apps en utilisant l’outil en ligne de commande defaults write. C’est ce qu’a découvert Dan Moren de Six Colors quand il a voulu activer le menu « Debug » de Safari, en utilisant cette commande qui fonctionnait depuis des années :

defaults write com.apple.Safari IncludeInternalDebugMenu -bool true
Le menu Debug de Safari 14.

Cette commande existe pourtant toujours et elle devrait fonctionner pour activer le menu supplémentaire de Safari, un menu utile surtout aux développeurs qui doivent optimiser un site web ou comprendre pourquoi un élément ne fonctionne pas normalement dans le navigateur d’Apple. Le sandboxing et les mesures de sécurité régulièrement renforcées viennent toutefois la perturber à deux niveaux, comme le détaille le développeur Jeff Johnson.

Quand une app est mise à jour pour gérer le bac à sable de macOS, ses réglages sont déplacés de leur emplacement historique (dans le dossier ‌~/Library/Preferences) à un sous-dossier dans ‌~/Library/Containers/. Dans le cas de Safari, la transition a eu lieu l’an dernier avec Safari 13 et son fichier de préférences est désormais accessible à cet endroit : ~/Library/Containers/com.apple.Safari/Data/Library/Preferences/com.apple.Safari.plist.

En théorie, la commande default writes devrait être suffisamment maligne pour le savoir et modifier le bon fichier. Mais deux problèmes peuvent se poser : d’une part, Apple ne supprime jamais les anciens fichiers de préférences, si bien qu’il y a un doublon dans le système pour chaque app sandboxée. Il y a ainsi deux fichiers de réglages de Safari, celui indiqué précédemment et la version historique est conservée à cet autre emplacement : ~/Library/Preferences/com.apple.Safari.plist.

D’autre part, si votre application de terminal n’est pas configurée pour avoir un accès complet aux données (une nouveauté de macOS Mojave), la ligne de commande va modifier le fichier historique et non le nouveau. L’explication est simple : sans cet accès complet, le terminal ne peut pas lire ou écrire dans le dossier ‌~/Library/Containers et la ligne de commande se rabat sur l’ancien fichier qui est toujours accessible.

Pour vérifier ce paramètre, ouvrez les Préférences système, puis le panneau « Sécurité et confidentialité » et enfin l’onglet « Confidentialité ». Cliquez sur le cadenas en bas à gauche et saisissez le mot de passe de votre session, puis cliquez sur « Accès complet au disque » dans la barre de gauche et vérifiez que l’app Terminal soit dans la liste. Si ce n’est pas le cas, ajoutez-la en touchant le bouton +.

L’app Terminal doit avoir accès au disque complet pour que le bon fichier de préférences soit modifié par la ligne de commande.

Cet exemple lié à Safari met en avant un problème qui se pose de plus en plus et qui va se poser encore plus à l’avenir. Cette ligne de commande historique de macOS fonctionne toujours, mais les restrictions de sécurité de ces dernières années peuvent imposer des étapes supplémentaires à connaître pour bien l’utiliser.

Si la commande defaults write ne semble pas fonctionner, vérifiez que vous n’êtes pas dans le cas d’une app qui est passée dans le bac à sable et de l’app Terminal qui n’a pas accès à toutes les données.

avatar R5555 | 

Je le suis toujours demandé le sens du "com" dans les préférences ? "com.apple.Safari"

avatar Ali Baba | 

@R5555

Nom de domaine inversé.

Apple a le nom de domaine apple.com donc les fichiers de préférence des apps d’Apple commencent par com.apple.

Pour iGeneration ce serait fr.igen.

avatar huexley | 

C'est le domaine de l'éditeur, tu peux en avoir en fr.toto net.trucmuch etc…

avatar huexley | 

Sinon pour ceux qui ont un MDM il faut faire un profile avec pour le terminal SystemPolicyAllFiles allow et c'est reglé.

avatar vince29 | 

C'est juste une convention pour désigner de manière unique un objet.
On concatène le nom de l'éditeur puis le nom du programme (puis les objets/sections/fonctions du programme)
Le nom de l'éditeur peut poser problème. SUN peut désigner l'éditeur de logiciel ou une marque de nettoyant pour lave-vaisselle (qui pourrait hypothétiquement sortir une appli pour compter les lavages ou que sais-je encore (il y a une app pour cela))
Comme -généralement- l'éditeur a un site web, c'est un moyen d'avoir un nom d'éditeur unique et "indiscutable". https://sun.com appartient à Sun microsystem => com.sun
Et de la même manière https://apple.com => com.apple
Potentiellement plusieurs "marques" pourrait se partager différent TLD : les propriétaires de toto.com ne sont pas ceux de toto.net, toto.org, toto.fr, toto.io ce serait donc un moyen de les différencier.
Dans les faits c'est "toujours" le "com".* qui est utilisé, avec quelques exceptions pour le org.*

avatar StephanMart | 

Il y a un problème, l'article ne s'affiche pas correctement ?

avatar Nicolas Furno | 

@StephanMart

Sur quel appareil ?

avatar StephanMart | 

@nicolasf

Ios 14

avatar Nicolas Furno | 

@StephanMart

Dans l'app, sur le site web sur Safari… ? J'ai fait le tour en tout cas, je ne vois rien d'anormal.

avatar Nesus | 

C’est surtout un problème pour les vieux utilisateurs. Le clean instal évite le problème. Le vrai problème est qu’il faut régulièrement faire le ménage dans le fichier préférence, qui est toujours plus caché. C’était déjà le cas avec macOS 7 et c’est malheureux toujours le cas...

avatar xDave | 

Concernant l'article, ce comportement des préférences est-il uniquement sur Catalina et au dessus?

Car je regarde et compare à l'instant par curiosité le dossier préférences et le dossier containers et les fichiers ne sont pas dupliqués à l'identique. Pour safari par exemple il y en a dans les deux et certains modifiés dans préférences aujourd'hui. Donc je ne suis pas sûr de tout saisir de l'explication ci-dessus.
Si quelqu'un pouvait compléter, m'éclairer, merci.

PS: Je suis sur Mojave

avatar xfrown13 | 

Est-ce qu’il y aurait une librairie de toute les commandes « defaut write » ? Ou du moins pour les principales appli système ?

avatar xDave | 

J'ai trouvé ça

https://github.com/mathiasbynens/dotfiles/blob/master/.macos

et après il y a la commande "defaults read" mais c'est lourd à lire brut
pour filtrer voir avec "man defaults"

avatar JYTX | 

Il y a une option dans l'onglet "Avancé" des préférences de Safari pour afficher le menu "Développement" depuis quelques versions.

CONNEXION UTILISATEUR