1 votes

Comment puis-je modifier /System/Library/ScriptingDefinitions/CocoaStandard.sdef et faire en sorte que les changements persistent ?

J'essaie de modifier /System/Library/ScriptingDefinitions/CocoaStandard.sdef . Je veux faire cela parce que beaucoup d'applications font référence à ce fichier dans leurs propres définitions de scripts, et je veux expérimenter l'ajout de nouveaux éléments qui prendront effet dans chaque application. Puisque les entrées des définitions de scripts correspondent directement aux objets Cocoa et à leurs méthodes, je me suis dit que ce serait un moyen efficace de manipuler les objets des autres applications.

J'ai redémarré en mode Recovery OS et j'ai exécuté les commandes suivantes dans un terminal :

csrutil disable
umount "/Volumes/Macintosh HD"
mkdir /Volumes/mhd
mount /dev/disk3s1 /Volumes/mhd
cd /Volumes/mhd/System/Library/ScriptingDefinitions
mv CocoaStandard.sdef CocoaStandard.sdef.original
ln -s /Library/ScriptingDefinitions/CocoaStandard.sdef .
reboot

Notez que j'ai déjà placé une copie de CocoaStandard.sdef sur /Library/ScriptingDefinitions .

Le problème que je rencontre est que, malgré la désactivation de la protection de l'intégrité du système, une fois que j'ai redémarré sous MacOS, les changements que j'ai effectués dans le système de gestion de l'intégrité du système (SIPS) ne sont pas pris en compte. /System/Library/ScriptingDefinitions ont en quelque sorte été inversées. Il n'y a pas CocoaStandard.sdef.original et CocoaStandard.sdef est à nouveau un fichier ordinaire plutôt qu'un lien symbolique.

Comment puis-je empêcher l'annulation de ces modifications ? Sinon, s'il existe un meilleur moyen d'ajouter des définitions de script personnalisées à des applications existantes, cela fonctionnerait également. (J'ai essayé d'ajouter directement des entrées au .sdef à l'intérieur d'une copie de l'application, mais ensuite, chaque fois que j'essaie de contrôler cette copie de l'application en utilisant AppleScript, j'obtiens l'erreur -1728).

0 votes

Quel est votre système d'exploitation ? Notez que MacOS 11 (Big Sur) et les versions ultérieures utilisent une protection cryptographique avec un volume système signé - le volume système en lecture seule est désormais scellé et n'acceptera aucune modification sans une signature valide d'Apple.

0 votes

Je pense que vous devriez plutôt ajouter des modifications à /Library/Scripting Additions.

0 votes

@benwiggy : Est-ce que cela me permettra de contrôler les objets internes d'autres applications, comme si j'ajoutais des choses au fichier .sdef intégré d'une application ?

1voto

bobince Points 270740

J'ai lu plus tard que (comme @red_menace l'a souligné dans les commentaires) le comportement était causé par le volume du système scellé. Je ne l'ai pas fait, mais csrutil authenticated-root disable au terminal de récupération devrait l'empêcher de se produire. Mais selon cette page Il y a plusieurs raisons pour lesquelles cela n'est pas souhaitable, surtout pour quelque chose qui peut être accompli d'une autre manière.

Plus précisément, la méthode que j'ai trouvée et qui fonctionne consiste à créer une image disque dans l'Utilitaire de disque, puis à la monter à l'adresse suivante /System/Library/ScriptingDefinitions . Cela remplacera temporairement le contenu du répertoire par le contenu de l'image disque sans modifier quoi que ce soit sur le disque. Les étapes de base pour ce faire sont les suivantes :

  1. Ouvrez l'utilitaire de disque.
  2. Fichier->Nouvelle image->Image vierge...
  3. Définissez une taille de fichier plus petite (j'ai utilisé 16 Mo, même si c'est beaucoup) et enregistrez l'image disque. Je l'ai enregistré sur le bureau sous le nom de ScriptDefs.dmg.
  4. Placez le fichier CocoaStandard.sdef modifié dans l'image disque montée, et éjectez-la.
  5. Terminal ouvert.
  6. hdiutil attach ~/Desktop/ScriptDefs.dmg
  7. Regardez la liste qui s'affiche et trouvez l'option /dev/disk#s# figurant en bas de page.
  8. sudo mount -t apfs -o nobrowse /dev/disk#s# /System/Library/ScriptingDefinitions (remplacement disk#s# avec les valeurs ci-dessus)

D'après mes tests, cette opération échouera (de manière compréhensible) avec une erreur "permission denied" si la protection de l'intégrité du système est activée, vous devrez donc la désactiver d'abord. De plus, ne créez pas de DMG compressé, car pour une raison quelconque, cela échouera avec la même erreur même si SIP est désactivé.

0 votes

Quel a été le résultat de la modification de la CocoaStandard.sdef ? Cela a-t-il eu une incidence sur quoi que ce soit ?

0 votes

@CJK : Oui, cela a eu l'effet que j'attendais, en grande partie. J'ai réussi à rendre la barre d'outils de Messages personnalisable, bien que le déplacement des boutons ait eu pour effet de briser l'apparence et que les changements n'aient pas été sauvegardés. Je l'ai fait à titre de test, cependant.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X