1 votes

Comment compiler un script contenant `tell Application` et NSAppleScriptEnabled sans l'activer

Comment compiler le script suivant sans activer réellement l'application pendant la compilation ?

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

Par exemple, si je fais cela, cela créera non seulement un bundle de lancement, mais activera également VLC.app pendant la compilation:

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

Cela lance VLC immédiatement, même si vous ne touchez pas à foo.app.

J'ai joué avec Info.plist dans VLC.app et j'ai trouvé que le drapeau offensant est celui-ci :

    NSAppleScriptEnabled

Si le bundle d'application cible le spécifie, il se lancera à la compilation. Je peux seulement supposer que osacompile effectue une sorte d'inspection sur le bundle, voit ce drapeau, puis doit d'une manière ou d'une autre activer l'application pour inspecter son support AppleScript ?

VLC est juste un espace réservé ici, j'essaie de créer des lanceurs de manière programmatique pour des applications arbitraires. Ma solution actuelle est do shell script "open \"/Applications/VLC.app\"". Cela fonctionne pour activer (le crochet run), mais pas pour d'autres crochets, par exemple

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

Cela ouvre également l'application cible à la compilation si elle déclare un support pour les scripts Apple.

Ma question est : comment éviter cela, et simplement créer un script de lanceur pur sans que osacompile lance réellement l'application ?

2voto

red_menace Points 1014

Vous avez raison que l'application est lancée pour obtenir son langage de script. Votre meilleure option serait probablement de créer et de tester les scripts individuels, puis d'échapper chaque script en tant que chaîne et de mettre les littéraux de chaîne dans une liste. À partir de là, vous pouvez utiliser run script ou osascript avec la chaîne de script désirée afin que le script ne soit pas compilé jusqu'à ce qu'il soit utilisé avec la commande, par exemple :

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}
-- ou --
do shell script "osascript -e " & quoted form of scriptText -- & space & quoted form of "/path/to/file"

Pour utiliser open avec des arguments, vous devez simplement utiliser l'option --args :

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

Pour les scripts shell, les arguments supplémentaires sont des chemins cités séparés par des espaces. Pour les listes d'arguments plus importantes, vous pouvez également échapper les chemins individuels et les joindre en une seule chaîne avec des espaces de séparation.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X