J'essaie de créer un utilisateur LaunchAgents qui déclenchera un script lorsqu'un chemin géré par une application sandbox changera (dans mon cas, lorsque /Library/Containers/com.omnigroup.OmniFocus3/Data/Library/Application\ Support/OmniFocus/OmniFocus.ofocus
changera).
Pour cela, je veux utiliser le WatchPaths
En ce qui concerne la clé launchd, j'ai déjà essayé avec une action de dossier, mais ceux-ci sont limités à l'ajout de fichiers dans un dossier.
J'ai fait un test fonctionnel pour écouter un fichier et un dossier dans mon répertoire personnel et déclencher une notification, par exemple :
<?xml version=“1.0” encoding=“UTF-8”?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=“1.0”>
<dict>
<key>Label</key>
<string>me.mayeu.helloworld</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/terminal-notifier</string>
<string>-message</string>
<string>Test</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/me/watchtest/</string>
</array>
</dict>
</plist>
Cela fonctionne bien pour tous les changements qui se produisent sous le watchtest
dossier.
Mais lorsque je remplace le WatchPaths
avec la base de données OmniFocus, cela ne fonctionne plus (aucune notification n'est déclenchée) :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>me.mayeu.script.OmniListen</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/terminal-notifier</string>
<string>-message</string>
<string>Test</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/me/Library/Containers/com.omnigroup.OmniFocus3/Data/Library/Application\ Support/OmniFocus/OmniFocus.ofocus</string>
</array>
</dict>
</plist>
J'ai l'impression que cela est dû au sandboxing de l'application. Mais je ne trouve pas de documentation à ce sujet.
J'utilise MacOS Mojave 10.14.2.