AppleScript - AppleScript
| Paradigma | Programmazione in linguaggio naturale , Scripting |
|---|---|
| Sviluppatore | La società Apple. |
| Apparso per la prima volta | 1993 |
| Rilascio stabile | 2.5 / 16 ottobre 2014
|
| Disciplina di digitazione | Debole , dinamico |
| OS | Sistema 7 , Mac OS 8 , Mac OS 9 , macOS |
| Licenza | Proprietario (parti disponibili sotto APSL ) |
| Estensioni dei nomi dei file | .scpt, .scptd, .applescript |
| Sito web | https://developer.apple.com/applescript |
| Influenzato da | |
| Linguaggio naturale , HyperTalk | |
AppleScript è un linguaggio di scripting creato da Apple Inc. che facilita il controllo automatizzato sulle applicazioni Mac con script . Introdotto per la prima volta in System 7 , è attualmente incluso in tutte le versioni di macOS come parte di un pacchetto di strumenti di automazione del sistema. Il termine "AppleScript" può riferirsi al linguaggio stesso, a un singolo script scritto nel linguaggio o, informalmente, all'architettura di scripting aperto di macOS che è alla base del linguaggio.
Panoramica
AppleScript è principalmente un linguaggio di scripting sviluppato da Apple per la comunicazione tra applicazioni (IAC) utilizzando gli eventi Apple . AppleScript è correlato a, ma diverso da, eventi Apple. Gli eventi Apple sono progettati per scambiare dati e controllare altre applicazioni al fine di automatizzare le attività ripetitive.
AppleScript ha alcune capacità di elaborazione proprie, oltre a inviare e ricevere eventi Apple alle applicazioni. AppleScript può eseguire calcoli di base ed elaborazione del testo ed è estensibile, consentendo l'uso di aggiunte di script che aggiungono nuove funzioni al linguaggio. Principalmente, tuttavia, AppleScript si basa sulla funzionalità di applicazioni e processi per gestire attività complesse. Come linguaggio di comando strutturato , AppleScript può essere paragonato a shell Unix , Microsoft Windows Script Host o IBM REXX nel suo scopo, ma è distinto da tutti e tre. Essenziale per la sua funzionalità è il fatto che le applicazioni Macintosh pubblicano "dizionari" di oggetti e operazioni indirizzabili.
AppleScript ha alcuni elementi di programmazione procedurale , programmazione orientata agli oggetti (in particolare nella costruzione di oggetti script) e tendenze di programmazione in linguaggio naturale nella sua sintassi, ma non è strettamente conforme a nessuno di questi paradigmi di programmazione .
Storia
Alla fine degli anni '80, Apple prese in considerazione l'utilizzo del linguaggio di scripting HyperTalk di HyperCard come linguaggio standard per lo sviluppo dell'utente finale in tutta l'azienda e all'interno del suo classico sistema operativo Mac OS e per la comunicazione tra processi tra prodotti Apple e non Apple. HyperTalk potrebbe essere utilizzato dai principianti per programmare uno stack HyperCard. Gli ingegneri Apple hanno riconosciuto che un linguaggio di scripting simile, ma più orientato agli oggetti, poteva essere progettato per essere utilizzato con qualsiasi applicazione , e il progetto AppleScript è nato come spin-off di uno sforzo di ricerca per modernizzare il Macintosh nel suo insieme e finalmente è diventato parte del Sistema 7 .
AppleScript è stato rilasciato nell'ottobre 1993 come parte di System 7.1.1 (System 7 Pro, il primo importante aggiornamento a System 7). QuarkXPress (ver. 3.2) è stata una delle prime principali applicazioni software a supportare AppleScript. Ciò a sua volta ha portato AppleScript ad essere ampiamente adottato nel mondo dell'editoria e della prestampa, spesso legando insieme flussi di lavoro complessi. Questo è stato un fattore chiave per mantenere la posizione dominante del Macintosh nell'editoria e nella prestampa, anche dopo che QuarkXpress e altre applicazioni di pubblicazione sono state portate su Microsoft Windows.
Dopo alcune incertezze sul futuro di AppleScript sul sistema operativo di prossima generazione di Apple, il passaggio a Mac OS X (intorno al 2002) e ai suoi framework Cocoa ha notevolmente aumentato l'utilità e la flessibilità di AppleScript. Le applicazioni Cocoa consentono agli sviluppatori di applicazioni di implementare la scriptability di base per le loro app con il minimo sforzo, ampliando il numero di applicazioni direttamente scriptabili. Allo stesso tempo, il passaggio alle basi Unix e la capacità di AppleScript di eseguire i comandi Unix direttamente, con il do shell scriptcomando, hanno consentito ad AppleScript un controllo molto maggiore sul sistema operativo stesso. AppleScript Studio , rilasciato con Mac OS X 10.2 come parte di Xcode , e il successivo framework AppleScriptObjC , rilasciato in Mac OS X 10.6 , consentivano agli utenti di creare applicazioni Cocoa utilizzando AppleScript.
In un articolo del 2006, Macworld ha incluso AppleScript nella sua classifica dei 30 prodotti Apple più significativi fino ad oggi, posizionandolo al numero 17.
In un articolo del 2013 per Macworld , il veterano sviluppatore di software Mac e commentatore John Gruber ha concluso la sua riflessione su "l'improbabile persistenza di AppleScript" osservando: "In teoria, AppleScript potrebbe essere molto migliore; in pratica, però, è la cosa migliore che abbiamo funziona. Esemplifica i vantaggi del Mac rispetto a iOS per gli esperti e gli utenti avanzati."
Nell'ottobre 2016, Sal Soghoian , product manager di lunga data di AppleScript ed evangelista dell'automazione, ha lasciato Apple quando la sua posizione è stata eliminata "per motivi di lavoro". I veterani della comunità Mac come John Gruber e Andy Ihnatko hanno generalmente risposto con preoccupazione, mettendo in dubbio l'impegno di Apple nei confronti della comunità degli sviluppatori e degli utenti professionisti. Il vicepresidente senior dell'ingegneria del software di Apple Craig Federighi ha risposto in una e-mail dicendo che "Abbiamo tutte le intenzioni di continuare a supportare le grandi tecnologie di automazione in macOS!", anche se Jeff Gamet di The Mac Observer ha affermato che ha fatto ben poco per placare i suoi dubbi sul futuro dell'automazione Apple in generale e di AppleScript in particolare. Per il momento, AppleScript rimane un componente delle tecnologie di automazione macOS, insieme a Automator , Shortcuts , Services e shell scripting .
Concetti basilari
AppleScript è stato progettato per essere utilizzato come linguaggio di scripting accessibile per l'utente finale, offrendo agli utenti un meccanismo intelligente per controllare le applicazioni e per accedere e modificare dati e documenti. AppleScript utilizza gli eventi Apple , un insieme di formati di dati standardizzati che il sistema operativo Macintosh utilizza per inviare informazioni alle applicazioni, all'incirca analogo all'invio di query XPath su XML-RPC nel mondo dei servizi web . Gli eventi Apple consentono a uno script di funzionare con più applicazioni contemporaneamente, passando i dati tra di loro in modo che le attività complesse possano essere eseguite senza l'interazione umana. Ad esempio, un AppleScript per creare una semplice galleria web potrebbe fare quanto segue:
- Apri una foto in un'applicazione di fotoritocco (inviando a tale applicazione un evento Apple Apri file ).
- Dire all'applicazione di fotoritocco di manipolare l'immagine (ad esempio ridurne la risoluzione, aggiungere un bordo, aggiungere un credito fotografico)
- Dire all'applicazione di fotoritocco di salvare l'immagine modificata in un file in una cartella diversa (inviando a quell'applicazione un evento Salva e/o Chiudi Apple).
- Invia il nuovo percorso del file (tramite un altro evento Apple) a un editor di testo o a un'applicazione di editor web
- Di' a quell'applicazione editor di scrivere un link per la foto in un file HTML.
- Ripeti i passaggi precedenti per un'intera cartella di immagini (centinaia o addirittura migliaia di foto).
- Carica il file HTML e la cartella delle foto riviste su un sito Web, inviando eventi Apple a un client FTP grafico , utilizzando i comandi AppleScript integrati o inviando eventi Apple alle utility FTP Unix.
Per l'utente, centinaia o migliaia di passaggi in più applicazioni sono stati ridotti al singolo atto di eseguire lo script e l'attività viene eseguita in molto meno tempo e senza possibilità di errore umano casuale. Uno script grande e complesso potrebbe essere sviluppato per essere eseguito solo una volta, mentre altri script vengono utilizzati più e più volte.
Gli elementi scriptabili di un'applicazione sono visibili nello Scripting Dictionary dell'applicazione (distribuito come parte dell'applicazione), che può essere visualizzato in qualsiasi editor di script . Gli elementi sono generalmente raggruppati in suite, secondo relazioni funzionali allentate tra loro. Ci sono due tipi fondamentali di elementi presenti in ogni suite: classi e comandi.
- Le classi sono oggetti scriptabili, ad esempio, un'applicazione di modifica del testo avrà quasi sicuramente classi per finestre, documenti e testi e queste classi avranno proprietà che possono essere modificate (dimensioni della finestra, colore di sfondo del documento, dimensione del carattere del testo, ecc.) , e può contenere altre classi (una finestra conterrà uno o più documenti, un documento conterrà del testo, un oggetto di testo conterrà paragrafi e parole e caratteri).
- I comandi , al contrario, sono istruzioni che possono essere date a oggetti scriptabili. Il formato generale per un blocco di AppleScript è dire a un oggetto script di eseguire un comando.
Tutte le applicazioni con script condividono alcuni comandi e oggetti di base, generalmente chiamati Standard Suite, comandi per aprire, chiudere o salvare un file, stampare qualcosa, uscire, impostare dati su variabili, nonché un oggetto dell'applicazione di base che fornisce proprietà scriptabili dell'applicazione stessa. Molte applicazioni dispongono di numerose suite in grado di eseguire qualsiasi attività che l'applicazione stessa può eseguire. In casi eccezionali, le applicazioni possono supportare plugin che includono i propri dizionari di script.
AppleScript è stato progettato con la capacità di creare script in modo intuitivo registrando le azioni dell'utente. Tale registrabilità AppleScript deve essere progettata nell'app: l'app deve supportare gli eventi Apple e la registrazione AppleScript; poiché Finder supporta la registrazione AppleScript, può essere utile come riferimento. Quando AppleScript Editor (Script Editor) è aperto e si fa clic sul pulsante Registra, le azioni dell'utente per le app registrabili vengono convertite nei comandi AppleScript equivalenti e vengono emesse nella finestra Script Editor. Lo script risultante può essere salvato e rieseguito per duplicare le azioni originali o modificato per essere più generalmente utile.
Commenti
I commenti possono essere fatti in più modi. Un commento di una riga può iniziare con 2 trattini ( -- ). In AppleScript 2.0, rilasciato per la prima volta in Mac OS X Leopard , può anche iniziare con un cancelletto (#). Ciò consente di memorizzare uno script AppleScript autonomo come file di testo eseguibile che inizia con la riga shebang #!/usr/bin/osascript
Esempio:
--This is a one line comment
# So is this! (in Mac OS X Leopard or later)
Per i commenti che occupano più righe, AppleScript utilizza parentesi con asterischi all'interno. Esempio:
(* This is a
multiple
line
comment *)
Ciao mondo!
In AppleScript, il tradizionale "Hello, World!" programma potrebbe essere scritto in molte forme diverse, tra cui:
display dialog "Hello, world!" -- a modal window with "OK" and "Cancel" buttons
-- or
display alert "Hello, world!" -- a modal window with a single "OK" button and an icon representing the app displaying the alert
-- or
say "Hello, world!" -- an audio message using a synthesized computer voice
AppleScript ha diverse opzioni dell'interfaccia utente, tra cui finestre di dialogo, avvisi e un elenco di scelte. (Il carattere ¬, prodotto digitando ⌥ Option+ returnnello Script Editor, indica la continuazione di una singola istruzione su più righe.)
-- Dialog
set dialogReply to display dialog "Dialog Text" ¬
default answer "Text Answer" ¬
hidden answer false ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button "Okay" ¬
cancel button "Skip" ¬
with title "Dialog Window Title" ¬
with icon note ¬
giving up after 15
-- Choose from list
set chosenListItem to choose from list {"A", "B", "3"} ¬
with title "List Title" ¬
with prompt "Prompt Text" ¬
default items "B" ¬
OK button name "Looks Good!" ¬
cancel button name "Nope, try again" ¬
multiple selections allowed false ¬
with empty selection allowed
-- Alert
set resultAlertReply to display alert "Alert Text" ¬
as warning ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button 2 ¬
cancel button 1 ¬
giving up after 2
Ciascun metodo di interazione dell'utente può restituire i valori dei pulsanti cliccati, degli elementi scelti o del testo immesso per ulteriori elaborazioni. Per esempio:
display alert "Hello, world!" buttons {"Rudely decline", "Happily accept"}
set theAnswer to button returned of the result
if theAnswer is "Happily accept" then
beep 5
else
say "Piffle!"
end if
Metafora del linguaggio naturale
Mentre gli eventi Apple sono un modo per inviare messaggi alle applicazioni, AppleScript è un linguaggio particolare progettato per inviare eventi Apple. In linea con l'obiettivo della facilità d'uso per i principianti, il linguaggio AppleScript è progettato sulla metafora del linguaggio naturale , proprio come l' interfaccia utente grafica è progettata sulla metafora del desktop . Un AppleScript ben scritto dovrebbe essere abbastanza chiaro da essere letto e compreso da chiunque e facilmente modificabile. Il linguaggio è basato in gran parte sul linguaggio HyperTalk di HyperCard, esteso per fare riferimento non solo al mondo HyperCard di carte e pile, ma anche teoricamente a qualsiasi documento. A tal fine, il team di AppleScript ha introdotto l' AppleEvent Object Model (AEOM), che specifica gli oggetti che ogni particolare applicazione "conosce".
Il cuore del linguaggio AppleScript è l'uso di termini che fungono da nomi e verbi che possono essere combinati. Ad esempio, invece di un verbo diverso per stampare una pagina, un documento o un intervallo di pagine (come printPage, printDocument, printRange), AppleScript utilizza un singolo verbo "print" che può essere combinato con un oggetto, come una pagina, un documento o un intervallo di pagine.
print page 1
print document 2
print pages 1 thru 5 of document 2
Generalmente, AEOM definisce un numero di oggetti, come "documento" o "paragrafo" e le azioni corrispondenti, come "taglia" e "chiudi". Il sistema definisce anche le modalità per fare riferimento alle proprietà degli oggetti, quindi si può fare riferimento al "terzo paragrafo del documento 'Buongiorno'", oppure al "colore dell'ultima parola della finestra frontale". AEOM utilizza un dizionario dell'applicazione per associare gli eventi Apple a termini leggibili dall'uomo, consentendo la traduzione avanti e indietro tra AppleScript leggibile dall'uomo e gli eventi Apple bytecode . Per scoprire quali elementi di un programma sono scriptabili, è possibile visualizzare i dizionari per le applicazioni supportate. (Nelle applicazioni Xcode e Script Editor , questo si trova in File → Apri dizionario .)
Per designare quale applicazione deve essere l'obiettivo di tale messaggio, AppleScript utilizza un costrutto "tell":
tell application "Microsoft Word"
quit
end tell
In alternativa, il tell può essere espresso in una riga usando un infinito :
tell application "Microsoft Word" to quit
Per gli eventi della "Core Suite" (attiva, apri, riapri, chiudi, stampa ed esci), l'applicazione può essere fornita come oggetto diretto di comandi transitivi:
quit application "Microsoft Word"
Il concetto di gerarchia di oggetti può essere espresso utilizzando blocchi annidati:
tell application "QuarkXPress"
tell document 1
tell page 2
tell text box 1
set word 5 to "Apple"
end tell
end tell
end tell
end tell
Il concetto di una gerarchia di oggetti può essere espresso anche utilizzando frasi preposizionali nidificate :
pixel 7 of row 3 of TIFF image "my bitmap"
che in un altro linguaggio di programmazione potrebbe essere espresso come chiamate di metodo sequenziali , come in questo pseudocodice :
getTIFF("my bitmap").getRow(3).getPixel(7);
AppleScript include la sintassi per il conteggio ordinale, "il primo paragrafo", così come cardinale, "paragrafo uno". Allo stesso modo, i numeri stessi possono essere indicati come testo o numericamente, "cinque", "quinto" e "5" sono tutti supportati; sono sinonimi in AppleScript. Inoltre, la parola "il" può essere legalmente utilizzata ovunque nello script per migliorare la leggibilità: non ha alcun effetto sulla funzionalità dello script.
Esempi di script
Un calcolatore di sicurezza:
tell application "Finder"
-- Set variables
set the1 to text returned of (display dialog "1st" default answer "Number here" buttons {"Continue"} default button 1)
set the2 to text returned of (display dialog "2nd" default answer "Number here" buttons {"Continue"} default button 1)
try
set the1 to the1 as integer
set the2 to the2 as integer
on error
display dialog "You may only input numbers into a calculator." with title "ERROR" buttons {"OK"} default button 1
return
end try
-- Add?
if the button returned of (display dialog "Add?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 + the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Subtract?
else if the button returned of (display dialog "Subtract?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 - the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Multiply?
else if the button returned of (display dialog "Multiply?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 * the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Divide?
else if the button returned of (display dialog "Divide?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 / the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
else
delay 1
say "You haven't selected a function. The operation has cancelled."
end if
end tell
Una semplice sequenza di finestre di dialogo con nome utente e password . Qui, il nome utente è John e la password è app123:
tell application "Finder"
set passAns to "app123"
set userAns to "John"
if the text returned of (display dialog "Username" default answer "") is userAns then
display dialog "Correct" buttons {"Continue"} default button 1
if the text returned of (display dialog "Username : John" & return & "Password" default answer "" buttons {"Continue"} default button 1 with hidden answer) is passAns then
display dialog "Access granted" buttons {"OK"} default button 1
else
display dialog "Incorrect password" buttons {"OK"} default button 1
end if
else
display dialog "Incorrect username" buttons {"OK"} default button 1
end if
end tell
Strumenti di sviluppo
Editor di script
Gli editor di script forniscono un ambiente di programmazione unificato per AppleScript, inclusi strumenti per la composizione, la convalida, la compilazione, l'esecuzione e il debug degli script. Forniscono inoltre meccanismi per l'apertura e la visualizzazione di dizionari AppleScript da applicazioni con script, il salvataggio di script in diversi formati (file di script compilati, pacchetti di applicazioni, pacchetti di script e file di testo normale) e di solito forniscono funzionalità come l' evidenziazione della sintassi e frammenti di codice prescritti .
Da Apple
- AppleScript Editor (editor di script)
- L'editor per AppleScript confezionato con macOS, chiamato AppleScript Editor in Mac OS X Snow Leopard (10.6) tramite OS X Mavericks (10.9) e Script Editor in tutte le versioni precedenti e successive di macOS. Gli script sono scritti in finestre di modifica dei documenti in cui possono essere compilati ed eseguiti e queste finestre contengono vari riquadri in cui sono disponibili informazioni registrate, risultati di esecuzione e altre informazioni a scopo di debug. L'accesso ai dizionari di scripting e ai frammenti di codice prescritti è disponibile tramite i menu dell'applicazione. Da OS X Yosemite (10.10), Script Editor include la possibilità di scrivere sia in AppleScript che in JavaScript .
- Xcode
- Una suite di strumenti per lo sviluppo di applicazioni con funzionalità per la modifica di AppleScript o la creazione di applicazioni complete scritte con AppleScript.
Da terze parti
- Script Debugger , da Late Night Software
- Un IDE commerciale di terze parti per AppleScript. Script Debugger è un ambiente AppleScript più avanzato che consente all'autore dello script di eseguire il debug di AppleScript tramite passaggi singoli , punti di interruzione , ingresso e uscita da funzioni/subroutine, tracciamento delle variabili, ecc. Script Debugger contiene anche un browser dizionario avanzato che consente all'utente di vedere il dizionario in azione in situazioni del mondo reale. Cioè, invece di un semplice elenco di ciò che copre il dizionario, si può aprire un documento in Pages , ad esempio, e vedere come i termini del dizionario si applicano a quel documento, rendendo più facile determinare quali parti del dizionario usare. Script Debugger non è progettato per creare script con una GUI, a parte gli avvisi e le finestre di dialogo di base, ma si concentra maggiormente sulla codifica e sul debug degli script.
- Smile e SmileLab
- Un IDE freeware/commerciale di terze parti per AppleScript, scritto interamente in AppleScript. Smile è gratuito e progettato principalmente per lo sviluppo di AppleScript. SmileLab è un software commerciale con ampie integrazioni per l'analisi numerica, la creazione di grafici, l'automazione delle macchine e la produzione web. Smile e SmileLab utilizzano un assortimento di finestre diverse: finestre AppleScript per eseguire e salvare script completi, terminali AppleScript per testare il codice riga per riga, finestre Unicode per lavorare con testo e XML. Gli utenti possono creare interfacce complesse, chiamate finestre di dialogo, per situazioni in cui le finestre di dialogo integrate in AppleScript sono insufficienti.
- ASobjC Explorer 4, di Shane Stanley
- Un IDE commerciale di terze parti interrotto per AppleScript, in particolare per AppleScriptObjC . La caratteristica principale è Cocoa : registrazione di oggetti/eventi, debug e completamento del codice. Gli utenti possono leggere eventi e oggetti Cocoa come altre applicazioni script. Questo strumento è stato originariamente creato per le librerie AppleScript (disponibile in OS X Mavericks ). Le librerie AppleScript mirano a componenti AppleScript riutilizzabili e supportano il dizionario AppleScript integrato (sdef). ASobjC Explorer 4 può essere anche un editor di script Xcode esterno.
- FaceSpan, dal software Late Night
- Un IDE commerciale di terze parti fuori produzione per la creazione di applicazioni AppleScript con interfacce utente grafiche.
Lanciatori di script
Gli AppleScript possono essere eseguiti da un editor di script, ma in genere è più conveniente eseguire gli script direttamente, senza aprire un'applicazione di editor di script. Ci sono una serie di opzioni per farlo:
- applet
- Gli AppleScript possono essere salvati da un editor di script come applicazioni (chiamate applet o droplet quando accettano input tramite trascinamento della selezione ). Le applet possono essere eseguite dal Dock , dalla barra degli strumenti delle finestre del Finder , da Spotlight , da lanciatori di applicazioni di terze parti o da qualsiasi altro luogo in cui è possibile eseguire le applicazioni.
- Azioni cartella
- Utilizzando le azioni della cartella AppleScript, gli script possono essere avviati quando si verificano modifiche specifiche nelle cartelle (come l'aggiunta o la rimozione di file). Le azioni della cartella possono essere assegnate facendo clic su una cartella e scegliendo Configurazione azioni cartella... dal menu contestuale; la posizione di questo comando è leggermente diversa in Mac OS X 10.6.x rispetto alle versioni precedenti. Questa stessa azione può essere ottenuta con utilità di terze parti come Hazel.
- Lanciatori di tasti di scelta rapida
- Le scorciatoie da tastiera possono essere assegnate agli AppleScript nel menu degli script utilizzando il pannello delle preferenze delle impostazioni di tastiera e mouse in Preferenze di Sistema . Inoltre, sono disponibili varie utilità di terze parti - Alfred , FastScripts, Keyboard Maestro , QuicKeys, Quicksilver , TextExpander - che possono eseguire AppleScript su richiesta utilizzando combinazioni di tasti.
- Menu script
- Questo menu a livello di sistema fornisce l'accesso agli AppleScript dalla barra dei menu di macOS, visibile indipendentemente dall'applicazione in esecuzione. (Inoltre, molte applicazioni Apple, alcune applicazioni di terze parti e alcuni componenti aggiuntivi forniscono i propri menu di script. Questi possono essere attivati in modi diversi, ma funzionano tutti essenzialmente allo stesso modo.) La selezione di uno script nel menu di script si avvia esso. A partire da Mac OS X 10.6.x, il menu degli script a livello di sistema può essere abilitato dalle preferenze di Script Editor ; nelle versioni precedenti di Mac OS X, poteva essere abilitato dall'applicazione AppleScript Utility. Quando viene abilitato per la prima volta, il menu degli script visualizza una libreria predefinita di AppleScript funzionali abbastanza generici, che possono essere aperti anche in Script Editor e utilizzati come esempi per l'apprendimento di AppleScript. Gli script possono essere organizzati in modo che appaiano nel menu solo quando particolari applicazioni sono in primo piano.
- Riga di comando Unix e launchd
- Gli AppleScript possono essere eseguiti dalla riga di comando Unix o da launchd per le attività pianificate, utilizzando lo strumento della riga di comando osascript. Lo strumento osascript può eseguire script compilati (file .scpt) e file di testo normale (file .applescript, che vengono compilati dallo strumento in fase di esecuzione). Le applicazioni di script possono essere eseguite utilizzando il comando Unix open.
Problemi di script correlati
- Librerie AppleScript
- Moduli AppleScript riutilizzabili (disponibili a partire da OS X Mavericks ), scritti in AppleScript o AppleScriptObjC e salvati come file di script o bundle in determinate posizioni, che possono essere richiamati da altri script. Quando viene salvata come bundle, una libreria può includere un file di dizionario AppleScript (sdef), che funziona quindi come un'aggiunta di script ma scritta in AppleScript o AppleScriptObjC.
- AppleScript Studio
- Un framework per collegare le interfacce Cocoa alle applicazioni AppleScript, parte del pacchetto Xcode in Mac OS X 10.4 e 10.5, ora deprecato a favore di AppleScriptObjC.
- AppleScriptObjC
- Un framework software di sviluppo Cocoa , chiamato anche AppleScript/Objective-C o ASOC, parte del pacchetto Xcode a partire da Mac OS X Snow Leopard . AppleScriptObjC consente a AppleScript di utilizzare direttamente classi e metodi Cocoa. La tabella seguente mostra la disponibilità di AppleScriptObjC in varie versioni di macOS:
| In Xcode | Nelle applet | Nelle librerie AppleScript |
Nell'editor di script | |
|---|---|---|---|---|
| 10.6 | ||||
| 10.7 | ||||
| 10.8 | ||||
| 10.9 | ||||
| 10.10 |
|
- Automator
- Un ambiente di editing grafico e modulare in cui i flussi di lavoro sono costruiti dalle azioni. Ha lo scopo di duplicare molte delle funzioni di AppleScript senza la necessità di conoscenze di programmazione. Automator ha un'azione progettata specificamente per contenere ed eseguire AppleScript, per attività troppo complesse per il framework semplificato di Automator.
- Applicazioni di sistema di base con script
- Queste applicazioni solo in background, fornite con macOS, vengono utilizzate per consentire ad AppleScript di accedere a funzionalità che normalmente non sarebbero scriptabili. A partire da Mac OS X 10.6.3 includono le applicazioni scriptabili per VoiceOver (pacchetto di lettori di schermo braille e uditivi script), Eventi di sistema (controllo di applicazioni non scriptabili e accesso a determinate funzioni di sistema e operazioni di base sui file), Utility di configurazione stampante ( utility con script per la gestione dei lavori di stampa), Image Events (manipolazione dell'immagine principale), HelpViewer (utility con script per mostrare le schermate della guida), Database Events (interfaccia di database SQLite3 minima) e AppleScript Utility (per lo scripting di alcune preferenze relative ad AppleScript), nonché come poche applicazioni di utilità utilizzate dal sistema.
- Aggiunte di scripting (OSAX)
- Plug-in per AppleScript sviluppati da Apple o da terze parti. Sono progettati per estendere il set di comandi integrato, espandendo le funzionalità di AppleScript e rendendolo un po' meno dipendente dalle funzionalità fornite dalle applicazioni. macOS include una raccolta di aggiunte di script denominate Standard Additions ( StandardAdditions.osax ) che aggiunge una serie di comandi e classi che non fanno parte delle funzionalità principali di AppleScript, tra cui finestre di dialogo di interazione con l'utente, lettura e scrittura di file, comandi del file system, funzioni di data e operazioni matematiche e testuali; senza questo OSAX, AppleScript non avrebbe la capacità di eseguire molte azioni di base non fornite direttamente da un'applicazione.
Elementi essenziali della lingua
Classi (tipi di dati)
Mentre le applicazioni possono definire classi specializzate (o tipi di dati), AppleScript ha anche un numero di classi integrate. Queste classi di dati di base sono direttamente supportate dal linguaggio e tendono ad essere universalmente riconosciute dalle applicazioni con script. I più comuni sono i seguenti:
- Oggetti di base
-
application : un oggetto application, usato principalmente come specificatore per le istruzioni tell (
tell application "Finder" …). - script : un oggetto script. Gli oggetti di script sono contenitori per gli script. Ogni AppleScript crea un oggetto script quando viene eseguito e gli oggetti script possono essere creati all'interno di AppleScript.
- class : un metaoggetto che specifica il tipo di altri oggetti.
-
riferimento : un oggetto che incapsula un identificatore di oggetto non valutato che può o meno puntare a un oggetto valido. Valutabile su richiesta accedendo alla sua
contentsproprietà.
-
application : un oggetto application, usato principalmente come specificatore per le istruzioni tell (
- Oggetti dati standard
-
costante : un valore costante . Ci sono una serie di costanti linguistiche definite, come ad esempio
pi,tabelinefeed. -
boolean : un valore booleano vero/falso. In realtà una sottoclasse di
constant. -
numero : una superclasse astratta raramente usata di e .
integerreal - intero : un intero . Può essere manipolato con operatori matematici incorporati.
- real : un numero in virgola mobile ( real ). Può essere manipolato con operatori matematici incorporati.
- data : una data e un'ora.
-
testo : testo. Nelle versioni di AppleScript precedenti alla 2.0 (Mac OS X 10.4 e precedenti) la
textclasse era distinta dastringeUnicode text, e le tre si comportavano in modo leggermente diverso; in 2.0 (10.5) e versioni successive, sono tutti sinonimi e tutto il testo viene gestito come codificato in UTF-16 (" Unicode ").
-
costante : un valore costante . Ci sono una serie di costanti linguistiche definite, come ad esempio
- Contenitori
- list : un elenco ordinato di oggetti. Può contenere qualsiasi classe, inclusi altri elenchi e classi definiti dalle applicazioni.
- record : un elenco di oggetti con chiave. Come un elenco, ma strutturato come coppie chiave-valore . L'accesso con chiave di runtime non è supportato; tutte le chiavi devono essere identificatori di costanti in fase di compilazione.
- File system
- alias : un riferimento a un oggetto del file system (file o cartella). L'alias manterrà il suo collegamento all'oggetto se l'oggetto viene spostato o rinominato.
- file : un riferimento a un oggetto del file system (file o cartella). Questo è un riferimento statico e può puntare a un oggetto che non esiste attualmente.
- File POSIX : un riferimento a un oggetto del file system (file o cartella), in testo normale, utilizzando la notazione barra (/) in stile Unix ( POSIX ). Non è un vero tipo di dati, poiché AppleScript converte automaticamente i file POSIX in file ordinari ogni volta che vengono utilizzati.
- Varie
- Colore RGB : specifica una tripletta RGB (in formato di colore elevato a 16 bit ), da utilizzare nei comandi e negli oggetti che funzionano con i colori.
-
tipi di unità : classe che converte tra unità standard. Ad esempio, un valore può essere definito come
square yards, quindi convertito insquare feetcast tra tipi di unità (utilizzando l'asoperatore).
Strutture linguistiche
Molti processi AppleScript sono gestiti da blocchi di codice, in cui un blocco inizia con un comando di comando e termina con un'istruzione di comando di fine . Di seguito vengono descritte le strutture più importanti.
Condizionali
AppleScript offre due tipi di condizionali.
-- Simple conditional
if x < 1000 then set x to x + 1
-- Compound conditional
if x is greater than 3 then
-- commands
else
-- other commands
end if
loop
Il ciclo di ripetizione di AppleScript è disponibile in diversi gusti leggermente diversi. Eseguono tutti il blocco tra le righe di ripetizione e di fine ripetizione un numero di volte. Il ciclo può essere interrotto prematuramente con il comando exit repeat .
Ripeti per sempre.
repeat
-- commands to be repeated
end repeat
Ripetere un determinato numero di volte.
repeat 10 times
-- commands to be repeated
end repeat
Cicli condizionali. Il blocco all'interno del ciclo repeat while viene eseguito finché la condizione restituisce true. La condizione viene rivalutata dopo ogni esecuzione del blocco. Il ciclo ripeti fino a quando è identico, ma il blocco viene eseguito finché la condizione restituisce false.
set x to 5
repeat while x > 0
set x to x - 1
end repeat
set x to 5
repeat until x ≤ 0
set x to x - 1
end repeat
Ciclo con una variabile. Quando si avvia il ciclo, la variabile viene assegnata al valore iniziale. Dopo ogni esecuzione del blocco, il valore del passo opzionale viene aggiunto alla variabile. Il valore del passo è predefinito su 1.
-- repeat the block 2000 times, i gets all values from 1 to 2000
repeat with i from 1 to 2000
-- commands to be repeated
end repeat
-- repeat the block 4 times, i gets values 100, 75, 50 and 25
repeat with i from 100 to 25 by -25
-- commands to be repeated
end repeat
Enumerare un elenco. Ad ogni iterazione imposta loopVariable su un nuovo elemento nell'elenco dato
set total to 0
repeat with loopVariable in {1, 2, 3, 4, 5}
set total to total + loopVariable
end repeat
| Targeting per applicazione | Gestione degli errori |
|---|---|
-- Simple form
tell application "Safari" to activate
-- Compound
tell application "MyApp"
-- commands for app
end tell
|
try
-- commands to be tested
on error
-- error commands
end try
|
Un'importante variazione su questa struttura a blocchi è sotto forma di blocchi on — end ... utilizzati per definire i gestori (subroutine di tipo funzione). I gestori iniziano con on functionName() e terminano con end functionName e non vengono eseguiti come parte del normale flusso di script a meno che non vengano chiamati da qualche parte nello script.
| Gestore di funzioni | Blocco azioni cartella | Gestore di corsa |
|---|---|---|
on myFunction(parameters...)
-- subroutine commands
end myFunction
|
on adding folder items to thisFolder after receiving theseItems
-- commands to apply to the folder or items
end adding folder items to
|
on run
-- commands
end run
|
I gestori possono anche essere definiti usando "to" al posto di "on" e possono essere scritti per accettare parametri etichettati, non racchiusi tra parentesi.
| Gestore con parametri etichettati | Gestore che utilizza "to" e parametri etichettati |
|---|---|
on rock around the clock
display dialog (clock as string)
end rock
-- called with:
rock around the current date
|
to check for yourNumber from bottom thru top
if bottom ≤ yourNumber and yourNumber ≤ top then
display dialog "Congratulations! You scored."
end if
end check
--called with:
check for 8 from 7 thru 10
|
Esistono quattro tipi di gestori predefiniti in AppleScript: esegui, apri, inattivo e esci, ognuno dei quali viene creato nello stesso modo del gestore di esecuzione mostrato sopra.
- Gestore di corsa
- Definisce il codice principale dello script, che viene chiamato quando viene eseguito lo script. I blocchi del gestore di esecuzione sono facoltativi, a meno che non vengano passati argomenti allo script. Se un blocco del gestore di esecuzione esplicito viene omesso, tutto il codice che non è contenuto all'interno dei blocchi del gestore viene eseguito come se fosse in un gestore di esecuzione implicito.
- Apri gestore
- Definito usando "on open theItems".
on open theItems
repeat with thisItem in theItems
tell application "Finder" to update thisItem
end repeat
end open
Quando uno script contenente un "gestore aperto" viene salvato come applet, l'applet diventa un droplet. Un droplet può essere identificato nel Finder dalla sua icona, che include una freccia, che indica che gli elementi possono essere rilasciati sull'icona. Il droplet è aperto handler viene eseguito quando file o cartelle vengono rilasciati sull'icona del droplet. I riferimenti agli elementi trascinati sull'icona del droplet vengono passati allo script del droplet come parametro del gestore aperto. Un droplet può anche essere lanciato allo stesso modo di un normale applet, eseguendo il suo gestore di esecuzione.
- Gestore inattivo
- Una subroutine che viene eseguita periodicamente dal sistema quando l'applicazione è inattiva.
on idle
--code to execute when the script's execution has completed
return 60 -- number of seconds to pause before executing idle handler again
end idle
Un gestore di inattività può essere utilizzato in applet o droplet salvati come applet rimani aperti ed è utile per gli script che controllano dati o eventi particolari. La lunghezza del tempo di inattività è di 30 secondi per impostazione predefinita, ma può essere modificata includendo un'istruzione 'return x' alla fine della subroutine, dove x è il numero di secondi che il sistema deve attendere prima di eseguire nuovamente il gestore.
- Esci dal gestore
- Un gestore che viene eseguito quando l'applet riceve una richiesta di chiusura. Questo può essere utilizzato per salvare i dati o eseguire altre attività finali prima di uscire.
on quit
--commands to execute before the script quits
continue quit -- required for the script to actually quit
end quit
- Oggetti script
Gli oggetti script possono essere definiti esplicitamente utilizzando la sintassi:
script scriptName
-- commands and handlers specific to the script
end script
Gli oggetti script possono utilizzare le stesse strutture 'tell' utilizzate per gli oggetti applicazione e possono essere caricati da e salvati su file. Il tempo di esecuzione del runtime può essere ridotto in alcuni casi utilizzando oggetti di script.
Informazioni varie
- Le variabili non sono rigorosamente tipizzate e non devono essere dichiarate. Le variabili possono accettare qualsiasi tipo di dati (inclusi script e funzioni). I seguenti comandi sono esempi di creazione di variabili:
set variable1 to 1 -- create an integer variable called variable1 set variable2 to "Hello" -- create a text variable called variable2 copy {17, "doubleday"} to variable3 -- create a list variable called variable3 set {variable4, variable5} to variable3 -- copy the list items of variable3 into separate variables variable4 and variable5 set variable6 to script myScript -- set a variable to an instance of a script
- Gli oggetti script sono oggetti completi: possono incapsulare metodi e dati ed ereditare dati e comportamenti da uno script padre.
- Le subroutine non possono essere chiamate direttamente dai blocchi tell dell'applicazione. Utilizza le parole chiave "mio" o "di me" per farlo.
tell application "Finder"
set x to my myHandler()
-- or
set x to myHandler() of me
end tell
on myHandler()
--commands
end myHandler
L'utilizzo della stessa tecnica per l'aggiunta di comandi di script può ridurre gli errori e migliorare le prestazioni.
tell application "Finder"
set anyNumber to my (random number from 5 to 50)
end tell
Architettura di script aperta
Un aspetto importante dell'implementazione di AppleScript è l' Open Scripting Architecture ( OSA ). Apple fornisce OSA per altri linguaggi di scripting e prodotti di scripting/automazione di terze parti come QuicKeys e UserLand Frontier, per funzionare allo stesso livello di AppleScript. AppleScript è stato implementato come componente di scripting e le specifiche di base per l'interfaccia di tali componenti all'OSA erano pubbliche, consentendo ad altri sviluppatori di aggiungere i propri componenti di scripting al sistema. Le API client pubbliche per il caricamento, il salvataggio e la compilazione di script avrebbero funzionato allo stesso modo per tutti questi componenti, il che significava anche che applet e droplet potevano contenere script in qualsiasi di quei linguaggi di scripting.
Una caratteristica dell'OSA è l' aggiunta di script , o OSAX per Open Scripting Architecture eXtension , che è stata ispirata dai comandi esterni di HyperCard . Le aggiunte agli script sono librerie che consentono ai programmatori di estendere la funzione di AppleScript. I comandi inclusi come aggiunte di script sono disponibili in tutto il sistema e non dipendono da un'applicazione (vedi anche § Librerie AppleScript ). L'editor AppleScript è anche in grado di modificare ed eseguire direttamente alcuni dei linguaggi OSA.
JavaScript per l'automazione
In OS X Yosemite e nelle versioni successive di macOS, il componente JavaScript for Automation ( JXA ) rimane l'unico linguaggio OSA serio alternativo ad AppleScript, sebbene le versioni Macintosh di Perl , Python , Ruby e Tcl supportino tutte i mezzi nativi per lavorare con gli eventi Apple senza essere componenti OSA.
JXA fornisce anche un'interfaccia in lingua straniera Objective-C (e linguaggio C). Essendo un ambiente basato sul motore JavaScriptCore di WebKit, il set di funzionalità JavaScript è sincronizzato con il motore del browser Safari di sistema. JXA fornisce un sistema modulare JavaScript ed è anche possibile usare CommonJS moduli via browserify.
Guarda anche
- BBEdit — un editor di testo altamente scriptabile
Riferimenti
Ulteriori letture
- "Guida al linguaggio AppleScript" . sviluppatore.apple.com . 2016 . Estratto il 9 maggio 2017 .Versione precedente (2015) in formato PDF disponibile da: CiteSeer x : 10.1.1.697.5220
- Munro, Mark Conway (2010). AppleScript . Riferimento per gli sviluppatori. Wiley. ISBN 978-0-470-56229-1.
- Rosenthal, Hanaan; Sanderson, Hamish (2010). Impara AppleScript: la guida completa allo scripting e all'automazione su Mac OS X (terza ed.). Apress . ISBN 978-1-4302-2361-0.
- Soghoian, Sal ; Cheeseman, Bill (2009). Apple Training Series: AppleScript 1-2-3 . Pressa Peachpit . ISBN 978-0-321-14931-2.
- Cook, William (2007). "Apple Script" (PDF) . Storia dei linguaggi di programmazione (HOPL III) . Atti del terzo convegno ACM SIGPLAN. ACM: 1-21. doi : 10.1145/1238844.1238845 . ISBN 9781595937667. S2CID 220938191 .
- Ford Jr., Jerry Lee (2007). Programmazione AppleScript per principianti assoluti . Tecnologia del corso . ISBN 978-1-59863-384-9.
- Neuburg, Matt (2006). AppleScript: la guida definitiva . O'Reilly Media . ISBN 0-596-10211-9.
- Goldstein, Adam (2005). AppleScript: il manuale mancante . O'Reilly Media. ISBN 0-596-00850-3.
- Trinko, Tom (2004). AppleScript per i manichini . Per manichini . ISBN 978-0-7645-7494-8.
link esterno
- AppleScript at Curlie (il contenuto del sito è obsoleto da anni)
- "Panoramica di AppleScript" . sviluppatore.apple.com . 2007 . Estratto il 7 novembre 2020 .
- "AppleScript per programmatori Python (grafico di confronto)" . aurelio.net . 2005 . Estratto il 9 maggio 2017 .
- "AppleScript di Doug per iTunes" . dougscripts.com . Estratto il 9 maggio 2017 .
- "Automazione per Mac OS X" . macosautomation.com . Estratto il 9 maggio 2017 .
- "Comunità MacScripter AppleScript" . macscripter.net . Estratto il 9 maggio 2017 .