Applescript Service falla por falta de restricciones

2

Escribí un Servicio de Automatización que ejecuta un pequeño script de manzana para configurar el volumen y reproducir un sonido.

Para activar el servicio, lo copié en /Library/Services e hizo un chmod +x. Para registrar un atajo de teclado para el servicio, ejecuté defaults write -g NSUserKeyEquivalents '{"HelloWorld" = "$@~1";}' dónde HelloWorld es el nombre del servicio como se ve en el menú Servicios y $@~1 mi acceso directo (que se resuelve en ⌘ + ⌥ + ⇧ + 1)

Después de reiniciar, puedo ver el servicio en el menú con el acceso directo al lado. Cuando presiono la combinación de teclas deseada, aparece una alerta que me dice que la secuencia de comandos encontró un error. También aparece un error en el registro:

Se detectaron restricciones faltantes para. No se puede colocar porque no hay suficientes restricciones para definir completamente el tamaño y el origen. Agregue las restricciones que faltan o configure translatesAutoresizingMaskIntoConstraints = YES y las restricciones se generarán para usted. Si esta vista se presenta de forma manual en macOS 10.12 y posteriores, puede elegir no llamar a [súper diseño] desde su anulación. Establezca un punto de interrupción en DETECTED_MISSING_CONSTRAINTS para depurar. Este error solo será registrado una vez.

Esto sugiere un error con alguna vista que no se inicializa correctamente, pero no estoy usando ninguna vista.

Aquí está el contenido del flujo de trabajo de 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
K40S
fuente
Lo resolví. No puedes escapar de espacios en do shell script argumentos Tuve que poner el nombre de archivo entre comillas dobles (de las que puedes escapar). El mensaje de error es masivamente engañoso!
K40S
Es perfectamente aceptable escribir una respuesta a su propia pregunta y también es preferible a colocarla en un comentario. Luego, después del período de espera, puede aceptar su propia respuesta para mejorar su reputación.
user3439894
EDITAR su pregunta con una nota explicando que sus "espacios de escape" no son válidos en un argumento del shell do shell @clemsamlang No entiendo lo que quieres decir con eso, lo siento.
K40S
Lo que quise decir es que podría escribir un mensaje muy corto "[EDIT: encontré la respuesta, mire mi respuesta elegida.]" Justo al principio de su pregunta. . . . (Eliminaré mi comentario anterior, ya que ahora publicó sus "hallazgos"). Gracias y +1.
clemsam lang

Respuestas:

1

Como se solicitó en los comentarios (perdón, tardó tanto), aquí hay una versión funcional del script. El truco consiste en poner el nombre del archivo (que contiene espacios) entre comillas dobles, ya que se pueden escapar.

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
K40S
fuente
1
Los espacios escapados están perfectamente bien en un do shell script mando , solo tiene que usar dos barras invertidas no una al escapar de los espacios en una do shell script mando , p.ej., do shell script "afplay /Library/Application\\ Support/HelloWorld/hello.mp3" funcionaria bien
user3439894