Problema
Al parecer, con los cambios de seguridad realizados en Mojave y ahora en adelante, he perdido la capacidad de almacenar globales entre las invocaciones de mis scripts.
Todo lo que quiero hacer es alternar los estados de las conexiones en función de mi ubicación (por ejemplo, el trabajo frente a casa alterna entre Ethernet y WiFi y otras cosas). Quiero almacenar el estado para la próxima vez para que pueda saber lo que la configuración había sido.
No hago desarrollos en XCode (sin embargo programo en otros lenguajes como Python). Todo para AppleScript está en ScriptEditor (quizás pronto script Debugger en su lugar). Por último, soy lo suficientemente hábil para saber cómo escribir los script y guardarlos como aplicaciones. Cualquier otra cosa que necesite utilizar será, con suerte, de un nivel de esfuerzo "plug-and-play".
Ejemplo script
Aquí hay un ejemplo de un script que uso para alternar el estado entre presentaciones y no presentaciones. En este, pCurrentMode ya no se mantiene entre las invocaciones. Bajo High Sierra, se ejecutó sin problemas. Bajo Mojave, no recuerda el estado de la invocación anterior. Tengo algunos otros equivalentes script que hacen lo mismo. Están guardados como archivos .app en la carpeta script (para acceder al menú cuando los necesite).
property pAppsToToggleOFF : {"Mail", "Safari"}
property pAppsToToggleinMSB : {"EasyMP Network Projection"}
property pAppsToToggleinTeach : {"AirServer", "Panopto"}
property blueutil : "/usr/local/bin/blueutil"
property pCurrentMode : "Off"
on run {}
-- ask how to set
set whichMode to choose from list {"Teach", "MSB Show", "Off"} with prompt "How?" default items pCurrentMode
if result is false then return
if (whichMode is equal to pCurrentMode) then return
set pCurrentMode to whichMode as text
set inTeachMode to (whichMode as text is equal to "Teach")
set inMSBMode to (whichMode as text is equal to "MSB Show")
set inONMode to (inTeachMode or inMSBMode)
set inOFFMode to (whichMode as text is equal to "Off")
if (inONMode) then
-- start presentation mode
if (inTeachMode) then
repeat with apptoToggle in pAppsToToggleinTeach
try
tell application apptoToggle to activate
end try
end repeat
else if (inMSBMode) then
repeat with apptoToggle in pAppsToToggleinMSB
try
tell application apptoToggle to activate
end try
end repeat
end if
repeat with apptoToggle in pAppsToToggleOFF
try
tell application apptoToggle to quit
end try
end repeat
-- switch to WiFi and turn off bluetooth
do shell script "scselect WiFi"
do shell script blueutil & " off"
else if (inOFFMode) then
-- end presentation modes
repeat with apptoToggle in pAppsToToggleinTeach
try
tell application apptoToggle to quit
end try
end repeat
repeat with apptoToggle in pAppsToToggleinMSB
try
tell application apptoToggle to quit
end try
end repeat
-- switch to ethernet and turn on bluetooth
do shell script "scselect Ethernet"
do shell script blueutil & " on"
end if
-- show or hide the dock and desktop icons
hidetheDock(inONMode)
showDesktopIcons(not inONMode)
end run
on showDesktopIcons(state)
set theCmd to "defaults write com.apple.finder CreateDesktop " & state & "&& killall Finder"
do shell script theCmd
end showDesktopIcons
on hidetheDock(state)
tell application "System Events" to set the autohide of dock preferences to state
end hidetheDock
Una pregunta general de conclusión
A modo de referencia, cuando empecé a buscar información sobre cómo resolver este problema, como usuario principiante/intermedio de AppleScript, estaba perdido sobre dónde debía ir para obtener la información más reciente para averiguar por qué estaba sucediendo esto ahora. Esto me lleva a hacer un seguimiento basado en una pregunta de hace dos años publicada en este enlace.
En pocas palabras, ¿a dónde van los programadores para encontrar recursos sobre la más reciente prácticas para escribir scripts robustos con AppleScript?
Me topé con el sitio de script Debugger mientras buscaba posteriormente "applescript globals". El sitio ofreció algunas ideas. Me sería difícil leer todos los mensajes del foro para obtener la información que necesito en forma de tutorial y ejemplo. Pero si este es el actual práctica, que así sea.
0 votos
Los comentarios no son para ampliar la discusión; esta conversación ha sido trasladado al chat .
0 votos
La edición para hacer esto sobre la retención global es bienvenida y mejora el valor de esto en gran medida IMO. En lugar de discutir los méritos del estilo de secuencias de comandos en los comentarios (y se alienta el desacuerdo educado) vamos a hacer que en Pregunte a Different Meta o la sala de chat hecha anteriormente para esta discusión.