Escribí un archivo de especificación de sandbox (inspirado en archivos /usr/share/sandbox
y manuales como este ) y ahora puedo iniciar alguna aplicación en sandbox con sandbox-exec $path_to_rules /Applications/$appname.app/Content/...
. Bien.
¿Hay alguna manera de hacer cumplir las reglas cuando la aplicación se inicia de manera regular (Finder's "Abrir con...", etc.)?
Pensé en reemplazar el binario dentro de .app con un script contenedor, pero se sobrescribirá después de la actualización de la aplicación y tendré que restaurarlo cada vez.
Sí, puede cambiar el binario, o incluso cambiar Info.plist, pero al igual que cambiar el binario que crea, tendrá que volver a hacerlo cada vez que se actualice la aplicación. No hay forma de hacer esto sin cambiar la aplicación de manera que no se sobrescriba cuando se actualice.
Puede realizar sus cambios automáticamente con un agente de lanzamiento.
Guarde lo siguiente ~/Library/LaunchAgents
como com.yourname.youragent.plist
, luego ejecute 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>
La secuencia de comandos anterior observará WatchPaths
cualquier modificación (en este caso, está observando el binario de una aplicación) y se ejecutará cp
para copiar su binario en la aplicación en /Aplicaciones.
Equidamoide
/Applications
se cambia algo? Y también para prohibir que cualquier aplicación se modifique a sí misma.grg
Equidamoide
cp /Users/.../MyApp /Applications...
cada vez que se cambie el binario MyApp? ¡Gracias!grg