1 votos

Cómo osacompile un script que contenga `tell Application` y NSAppleScriptEnabled sin activarlo

¿Cómo compilo el siguiente script sin activar realmente la aplicación durante la compilación?

tell application "/Applications/VLC.app" to activate

Por ejemplo, si hago esto, no solo creará un paquete de lanzamiento, sino que también activará VLC.app durante la compilación:

osacompile  -o foo.app -e 'tell application "/Applications/VLC.app" to activate'

Esto inicia VLC inmediatamente, incluso si no tocas foo.app.

Jugué con el Info.plist en VLC.app y descubrí que la bandera problemática es esta:

    NSAppleScriptEnabled

Si el paquete de la aplicación de destino especifica eso, se iniciará en la compilación. Solo puedo suponer que osacompile realiza algún tipo de inspección en el paquete, ve esa bandera, y luego de alguna manera tiene que activar la aplicación para inspeccionar su soporte de AppleScript?

VLC es solo un marcador de posición aquí, estoy tratando de crear lanzadores de forma programática para aplicaciones arbitrarias. Mi solución actual es do shell script "open \"/Applications/VLC.app\"". Funciona para activar (el gancho run), pero no para otros ganchos, por ejemplo,

on open names
  tell application ... to open names
end open

Eso también abre la aplicación de destino en la compilación si declara soporte para AppleScript.

Mi pregunta es: ¿cómo puedo evitar eso y simplemente crear un script de lanzador puro sin que osacompile realmente inicie la aplicación?

2voto

red_menace Puntos 111

Es correcto que la aplicación se inicia para obtener su terminología de scripting. Lo mejor sería probablemente crear y probar los scripts individuales, luego escapar cada script como una cadena y poner las literales de cadena en una lista. A partir de ahí puedes usar run script o osascript con la cadena de script deseada para que el script no se compile hasta que se use con el comando, por ejemplo:

set scriptText to "
on run args
    tell application \"VLC\"
        activate
        if args is not in {missing value, {}, me} then open first item of args -- whatever
    end tell
end run
"
run script scriptText -- with parameters {list of paths}
-- or --
do shell script "osascript -e " & quoted form of scriptText -- & space & quoted form of "/path/to/file"

Para usar open con argumentos, solo necesitas usar la opción --args:

do shell script "open '/Applications/VLC.app' --args " & quoted form of "/path/to/file"

Para los scripts de shell, los argumentos adicionales son rutas entre comillas separadas por espacios. Para listas de argumentos más largas, también puedes escapar las rutas individuales y unirlas en una sola cadena con espacios separados.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X