AppleScript viene eseguito in Automator, ma fallisce quando viene lanciato tramite una scorciatoia

2

Ho il seguente AppleScript in un servizio usando Esegui AppleScript in Automator:

on run {input, parameters}
    set date_ to short date string of (current date)
    tell application "System Events"
        keystroke date_
    end tell
end run

È impostato per non ricevere input in nessuna applicazione e l'output sostituisce il testo. Se metto il cursore nella finestra di modifica in Automator e faccio clic sul pulsante Esegui, funziona e ottengo l'output, ad esempio:

...
end run8/15/18

L'ho associato a una scorciatoia da tastiera (Proprietà del sistema - > Tastiera - > Scorciatoie - > seleziona il mio script e associa una combinazione di tasti). Tuttavia, quando premo la combinazione di tasti, indipendentemente dall'applicazione, faccio brevemente (1-2 secondi) una piccola ruota nella barra dei menu e il seguente errore nella console:

Detected missing constraints for < private>. It cannot be placed because there are not enough constraints to fully define the size and origin. Add the missing constraints, or set translatesAutoresizingMaskIntoConstraints=YES and constraints will be generated for you. If this view is laid out manually on macOS 10.12 and later, you may choose to not call [super layout] from your override. Set a breakpoint on DETECTED_MISSING_CONSTRAINTS to debug. This error will only be logged once.

La data non viene aggiunta a nessuna applicazione dove faccio questo. Ho visto un'altra persona con un problema simile qui ( link ) ma non hanno avuto risposta. Ciò è fonte di confusione, in quanto sembra essere correlato al rendering delle finestre, ma non ho elementi GUI nel mio script, AFAIK.

Sto correndo:

Mac OS Sierra 10.12.6 (16G1510)
Automator Version 2.7 (428)

Ok, mentre cercavo questo post ho trovato questo post ( collegamento ) che afferma che esiste un bug che impedisce ai servizi di sistema di essere in esecuzione dopo Snow Leopard. Qualcuno sa una soluzione alternativa senza strumenti di terze parti?

    
posta Andrew Pierson 16.08.2018 - 06:11
fonte

1 risposta

1

Sono riuscito a farlo funzionare salvando AppleScript come applicazione separata, quindi creando un servizio di automazione che avvia semplicemente quell'app. Ecco i passaggi:

  • Crea un nuovo AppleScript in Script Editor e incolla il seguente codice (il tuo, ma con una leggera aggiunta):

    on run
        set date_ to short date string of (current date)
        tell application "System Events"
            set visible of (first process where it is frontmost) to false -- return focus to initiating app
            delay 0.1 -- make sure the application has had time to regain focus—if the script doesn't work, try upping this value a little
            keystroke date_
        end tell
    end run
    
  • Salva lo script come Application .

  • Crea un nuovo servizio in Automator e aggiungi un'azione Launch Application . Imposta l'applicazione su quella appena salvata da Script Editor.
  • Collega una scorciatoia da tastiera a quella azione di Automator.

Non riesco a verificare che funzioni su Sierra, ma funziona su High Sierra 10.13.6.

    
risposta data 22.08.2018 - 17:09
fonte

Leggi altre domande sui tag