Sí, un script puede activarse cuando el iPhone está conectado...
Cuando el iPhone está conectada al Mac , lo siguiente archivo se modifica:
/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist
Utilizando un Agente de lanzamiento con un WatchPaths
clave se puede determinar si el iPhone está conectado al Mac cuando el NetworkInterfaces.plist archivo se modifica.
A modo de prueba, he creado el agente de lanzamiento como:
$HOME/Library/LaunchAgents/com.me.iphone.connected.plist
Contenido del com.me.iphone.connected.plist archivo :
<?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>com.me.iphone.connected</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/iPhone</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string>
</array>
</dict>
</plist>
En el LISTA XML archivo , /usr/local/bin/iPhone es un shell script que se ejecuta cuando hay un cambio en el NetworkInterfaces.plist archivo y el contenido del shell script es:
#!/bin/zsh
iPhone="$(/usr/bin/defaults read /Library/Preferences/SystemConfiguration/NetworkInterfaces.plist | /usr/bin/grep -m 1 -o 'iPhone')"
if [[ -n "$iPhone" ]]; then
if [[ -d "/Volumes/Data" ]]; then
if [[ ! -d "/Volumes/iPhone Backup" ]]; then
open "/Volumes/Data/iPhone_Backup.sparsebundle"
fi
fi
fi
Cuando el ejemplo shell script se ejecuta asume que ya estoy conectado al Compartir la red , en este ejemplo es " Datos ", pero primero establece el valor de la iPhone
variable utilizando el defaults
comando a leer el .plist
archivo y tubos su salida a grep
para devolver la primera aparición de " iPhone " si se encuentra. Si el iPhone está conectado, entonces iPhone="iPhone"
y el prueba en la primera if
declaración tiene éxito.
El siguiente prueba tiene éxito si estoy conectado a Datos y la posterior prueba tiene éxito si no estoy ya conectado a mi Copia de seguridad del iPhone sparsebundle . Está codificado de esta manera para no intentar abrir el sparsebundle si ya está montado si el NetworkInterfaces.plist archivo se modifica de nuevo mientras el sparsebundle ya está montado. En otras palabras, el sparsebundle sólo se abre si no está ya montado.
Si también desea el montaje de la SMB compartir que se produzca, por ejemplo, en el iPhone
, shell script puede añadir el siguiente ejemplo comando directamente después de la apertura de la primera if
declaración . En otras palabras, literalmente entre los dos primeros if
declaraciones :
/usr/bin/osascript -e 'mount volume "smb://user:@server/share"'
Esto utiliza AppleScript código para montar el cuota de destino y asume que las credenciales ya están almacenadas en su Llavero . Tampoco es problemático si el SMB compartir ya está montado, entonces el comando simplemente falla en silencio.
Notas:
Si hubiera incluido el script o código que ya está utilizando, habría creado un ejemplo de trabajo que lo hubiera incorporado, sin embargo lo que he presentado es un ejemplo que me funciona probado bajo MacOS Catalina .
Le recomiendo que lea el páginas del manual para launchctl
, launchd.plist
y launchd
. Puede leer el página del manual para command
en Terminal tecleando command
y luego haga clic con el botón derecho del ratón y seleccione: Abrir la página del hombre
Después de crear el $HOME/Library/LaunchAgents/com.me.iphone.connected.plist
archivo Lo he cargado utilizando el launchctl
comando Por ejemplo:
cd "$HOME/Library/LaunchAgents/"
launchctl load com.me.iphone.connected.plist
Una vez cargado, se cargará automáticamente cuando accedas a tu cuenta, por lo que no deberías tener que volver a hacerlo manualmente en circunstancias normales. Para descargarlo, utilice el botón unload
subcomando con el launchctl
comando .
Después de descargarlo, puede utilizar el disable
subcomando para que no se vuelva a cargar o puedes borrar el archivo . plist
archivo Si quieres deshacer los cambios que has hecho en tu sistema .