Comment appliquer les règles du bac à sable pour l'application particulière?

8

J'ai écrit un fichier de spécification de sandbox (inspiré de fichiers /usr/share/sandboxet de manuels comme celui-ci ) et maintenant je peux lancer une application dans sandbox avec sandbox-exec $path_to_rules /Applications/$appname.app/Content/.... Bien.

Existe-t-il un moyen d'appliquer les règles lorsque l'application est démarrée de manière régulière (Finder "Ouvrir avec ...", etc.)?

J'ai pensé à remplacer le binaire à l'intérieur de .app par un script wrapper, mais il sera écrasé après la mise à jour de l'application et je devrai le restaurer à chaque fois.

Equidamoid
la source

Réponses:

5

Oui, vous pouvez changer le binaire, ou même changer l'Info.plist, mais comme pour changer le binaire que vous créez, vous devrez recommencer chaque fois que l'application est mise à jour. Il n'y a aucun moyen de le faire sans changer l'application d'une manière qui ne sera pas écrasée lors de sa mise à jour.

Vous pouvez effectuer automatiquement vos modifications avec un agent de lancement.
Enregistrez les éléments suivants ~/Library/LaunchAgentssous com.yourname.youragent.plist, puis exécutez launchctl load ~/Library/LaunchAgents/com.yourname.youragent.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.yourname.youragent</string>
        <key>OnDemand</key>
        <true/>
        <key>Program</key>
        <string>cp</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/grgarside/test/MyApp</string>
            <string>/Applications/MyApp.app/Contents/MacOS/</string>
        </array>
        <key>WatchPaths</key>
        <array>
            <string>/Applications/MyApp.app/Contents/MacOS/MyApp</string>
        </array>
    </dict>
</plist>

Le script ci-dessus surveillera les WatchPathséventuelles modifications (dans ce cas, il regarde le binaire pour une application) et s'exécutera cppour copier votre binaire dans l'application dans / Applications.

grg
la source
Je pense au patch automatique des applications installées. Existe-t-il un moyen d'exécuter mon script automatiquement chaque fois que quelque chose /Applicationsest modifié? Et aussi pour interdire à toute application de se modifier.
Equidamoid
@Equidamoid Vous pouvez utiliser LaunchAgents; réponse modifiée
grg
1
donc, dans votre exemple, il s'exécutera cp /Users/.../MyApp /Applications...chaque fois que le binaire MyApp est modifié? Merci!
Equidamoid
@Equidamoid Oui, exactement!
grg