2 votes

Le service Applescript échoue à cause de contraintes manquantes

J'ai écrit un service Automator qui exécute un petit applescript pour régler le volume et jouer un son.

Pour activer le service, je l'ai copié dans /Library/Services et a fait un chmod +x . Pour enregistrer un raccourci clavier pour le service, j'ai exécuté defaults write -g NSUserKeyEquivalents '{"HelloWorld" = "$@~1";}'HelloWorld est le nom du service tel qu'il apparaît dans le menu Services et $@~1 mon raccourci (qui se résume à +++1)

Après un redémarrage, je peux voir le service dans le menu avec le raccourci à côté. Lorsque j'appuie sur la combinaison de touches désirée, une alerte s'affiche me disant que le script a rencontré une erreur. Il y a également une erreur dans le journal :

Détection de contraintes manquantes pour . Il ne peut pas être placé car il n'y a pas assez de contraintes pour définir complètement la taille et l'origine. Ajoutez les contraintes manquantes ou définissez translatesAutoresizingMaskIntoConstraints=YES et les contraintes seront générées pour vous. Si cette vue est mise en page manuellement sur MacOS 10.12 et plus, vous pouvez choisir de ne pas appeler [super layout] à partir de votre surcharge. Définissez un point d'arrêt sur DETECTED_MISSING_CONSTRAINTS pour déboguer. Cette erreur ne sera enregistrée qu'une seule fois.

Cela suggère une erreur avec une vue qui n'est pas initialisée correctement, mais je n'utilise aucune vue.

Voici le contenu du flux de travail Automator :

on run

    if (get output volume of (get volume settings)) < 50 then
        set volume output volume 50
    end if

    do shell script "afplay /Library/Application\ Support/HelloWorld/hello.mp3"

    return
end run

0 votes

J'ai résolu le problème. Vous ne pouvez pas échapper aux espaces dans do shell script arguments. J'ai dû mettre le nom du fichier entre guillemets doubles (que l'on peut échapper). Le message d'erreur est extrêmement trompeur !

0 votes

Il est tout à fait acceptable d'écrire une réponse à sa propre question et il est préférable de la placer dans un commentaire. Après la période d'attente, vous pouvez accepter votre propre réponse afin d'améliorer votre réputation.

0 votes

veuillez EDITER votre question avec une note précisant que vos "espaces échappés" ne sont pas valides dans un argument script de l'interpréteur de commandes. @clemsamlang Je ne comprends pas ce que vous voulez dire par là, désolé.

1voto

Ivo van Selst Points 41

Puisque cela a été demandé dans les commentaires (désolé que cela ait pris autant de temps), voici une version fonctionnelle du script. L'astuce consiste à mettre le nom du fichier (qui contient des espaces) entre guillemets doubles, car ceux-ci peuvent être échappés.

on run

    if (get output volume of (get volume settings)) < 50 then
        set volume output volume 50
    end if

    do shell script "afplay \"/Library/Application Support/HelloWorld/hello.mp3\""

    return
end run

1 votes

Les espaces échappés sont parfaitement acceptables dans un do shell script commande il suffit d'utiliser deux barres obliques inversées et non une seule pour échapper aux espaces dans un fichier de type do shell script commande , par exemple, do shell script "afplay /Library/Application\\ Support/HelloWorld/hello.mp3" fonctionnerait très bien !

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