

Eine umfassende Einführung in AppleScript
1. Mai 2016 Mit OS X 10.10 führte Apple JavaScript als gleichberechtigte Skriptsprache neben AppleScript ein. Auch wenn JavaScript for Automation für die Programmierung von Skripten sicherlich vorzuziehen ist – die Programmierung wird in Kapitel 19 des aktuellen Buchs beschrieben – so gehört AppleScript doch noch lange nicht zum alten Eisen. Aus diesem Grund finden Sie hier den Volltext des fünfzig Seiten umfassenden Kapitels zu AppleScript aus dem Buch »OS X Mavericks. Das umfassende Handbuch«, basierend auf der Aktualisierung von Andreas Schenk.
Übersicht
- Erste Schritte: Hallo Welt!
- Der AppleScript-Editor
- Variablen und Datentypen
- Objekte und Eigenschaften manipulieren
- Grundlegende Befehle
- Mit Dateien arbeiten
- Bilder bearbeiten mit Image Events
- Skripten in Funktionen unterteilen
- Integration ins System
- Skripten als Programme
- AppleScript im Netzwerk
- Weitere Möglichkeiten
Neben dem leicht verständlichen Automator bietet OS X Mavericks mit AppleScript eine weitere Möglichkeit, Arbeiten und Aufgaben zu automatisieren. Bei AppleScript handelt es sich um eine ausgewachsene und bisweilen etwas eigenwillige Programmiersprache. Dabei ist sie gar nicht so schwer zu lernen und eignet sich auch für Anfänger, die bisher noch keine Programmiersprache beherrschen. AppleScript unterscheidet sich von anderen Programmiersprachen darin, dass seine Hauptaufgabe in der Steuerung anderer Programme besteht. Sie können mit AppleScript den Finder, iPhoto, Pages, InDesign, FileMaker und viele andere Programme kontrollieren und sich deren Funktionen in Ihren Skripten zunutze machen.
Apple-Events
Die technische Grundlage für die Kommunikation zwischen AppleScript und Programmen wie dem Finder oder InDesign stellen die sogenannten Apple-Events dar. Diese Ereignisse sind eine standardisierte Form der Kommunikation von Programmen mit grafischer Oberfläche und dabei nicht auf AppleScript festgelegt.
AppleScript und Automator
Dem Automator ist AppleScript dann vorzuziehen, wenn die zu erledigenden Aufgaben etwas komplizierter werden, vom Anwender mehrere Entscheidungen verlangen oder Ihnen die vom Automator zur Verfügung gestellten Aktionen nicht ausreichen. Während Sie beim Automator auf die Aktionen angewiesen sind, die Ihnen Apple oder andere Entwickler zur Verfügung stellen, ist die Arbeit mit AppleScript flexibler und die Unterstützung durch die Programme vielfach auch ausgereifter.
Dieses Kapitel ermöglicht Ihnen einen Einstieg in die Entwicklung eigener Programme mit AppleScript. Im ersten Teil stellen wir Ihnen grundlegende Konzepte von AppleScript vor und erläutern sie anhand kleinerer Beispiele. Diese Grundlagen werden dann im zweiten Teil zu zwei umfangreicheren Beispielen ausgebaut. Der Schwerpunkt des dritten Teils liegt dann in der Integration von Skripten in das System.
Englische Sprache
Die Art und Weise, wie Sie bei AppleScript Befehle eingeben, lehnt sich eng an die englische Sprache an. So lautet die Anweisung, dass der Finder beendet werden soll, zum Beispiel tell application "Finder" to quit
, also fast wörtlich: „Sage dem Finder, er möge sich beenden.“
Erste Schritte: Hallo Welt!
Das Werkzeug für die Entwicklung eigener Skripten ist der AppleScript-Editor, den Sie im Verzeichnis DIENSTPROGRAMME finden. Über den Menüpunkt ABLAGE • NEU können Sie ein neues AppleScript erstellen. Im Fenster OHNE TITEL geben Sie die Anweisungen ein. Das erste Beispiel besteht aus zwei Zeilen:
say "Hallo Welt" display dialog "Hallo Welt"

Geben Sie diese zwei Zeilen ein, und klicken Sie dann zunächst auf die Schaltfläche ÜBERSETZEN, oder nutzen Sie die Tastenkombination Apfel + K. Der Editor färbt die Wörter say
sowie display dialog
dunkelblau ein und nutzt eine fette Schrift. Der Text in Anführungszeichen wird schwarz. Wenn Sie nun auf AUSFÜHREN klicken, hören Sie über die Sprachausgabe von OS X Mavericks zunächst die Worte „Hallo Welt“, und anschließend erscheint ein Dialog, der Ihnen den Text „Hallo Welt“ anzeigt.
Der AppleScript-Editor
Der AppleScript-Editor bietet einige Funktionen, die Ihnen die Eingabe von Skripten erleichtern und bei der Fehlersuche behilflich sind. Haben Sie das erste Beispiel ausgeführt, wird das Hauptfenster des Editors ungefähr dem in Abbildung 26.2 entsprechen.
Skript speichern
Wenn Sie Ihr Skript sichern möchten, dann wird es vom AppleScript-Editor vor dem Speichern übersetzt. Das heißt, dass Sie nur syntaktisch korrekte Skripten im Dateiformat SKRIPT speichern können. Möchten Sie einen vorläufigen und noch fehlerhaften Stand speichern, dann müssen Sie als Dateiformat TEXT auswählen. Die Datei wird dann mit der Dateiendung .applescript anstelle von .scpt versehen.

Ausführen und Übersetzen
In der Symbolleiste des Fensters finden Sie zunächst fünf Schaltflächen. Sie können Ihr Skript AUSFÜHREN, und es wird sofort gestartet. Alternativ nutzen Sie die Tastenkombination Apfel + R. Die Schaltfläche STOPP steht Ihnen zur Verfügung, wenn Sie Ihr Skript ausführen. Mit ihr brechen Sie ein Skript, das zum Beispiel in einer Endlosschleife gefangen ist, vorzeitig ab.
Haben Sie mehrere Zeilen nacheinander eingegeben, können Sie Ihre Eingabe auch ÜBERSETZEN (Apfel + K) lassen. Dies führt dazu, dass das Syntax-Highlighting auf Ihre Eingabe angewandt wird. Zeitgleich prüft der Skripteditor Ihre Eingabe auf Fehler hin und gibt Ihnen eine Meldung aus. Die Prüfung Ihrer Eingaben auf syntaktische Fehler kann hilfreich sein, um zum Beispiel Tippfehler schon im Vorfeld zu erkennen.
Über die Funktion AUFZEICHNEN weisen Sie den Skripteditor an, Ihre Mausklicks und Tastatureingaben als Grundlage für ein Skript zu nehmen. Diese Funktion entspricht im Wesentlichen der Aktion MEINE AKTIONEN AUFZEICHNEN im Automator (siehe Abschnitt 25.8). Den BUNDLE-INHALT einblenden können Sie bei Skripten, die Sie als Programm (siehe Abschnitt 26.10) gespeichert haben.
[Syntax Highlighting]
Die Einfärbung des Quelltextes erhöht die Lesbarkeit. Befehle, die zum grundlegenden Wortschatz von AppleScript gehören, werden schwarz dargestellt. Anweisungen, die von Programmen bereitgestellt werden, erhalten eine blaue Schrift. Variablen werden grün dargestellt, während Objekte blau und kursiv angezeigt werden. Eigenschaften von Objekten werden lila dargestellt.
Skriptassistent
In den Voreinstellungen des Editors können Sie in der Ansicht BEARBEITUNG den Skriptassistenten verwenden. Ist der Assistent aktiv, dann beobachtet der Editor Ihre Eingaben und analysiert sie dahingehend, ob eine mögliche Vervollständigung angeboten werden kann. Findet der Editor im Befehlsfundus von AppleScript eine Anweisung oder ein Element, das mit der von Ihnen bereits eingegebenen Zeichenkette beginnt, dann erscheinen drei Punkte nach dem Cursor. Mit der Taste esc können Sie nun die Liste der möglichen Vervollständigungen aufrufen, mit den Pfeiltasten eine auswählen und Ihre Eingabe mit Enter vervollständigen. Ist der Vorschlag eindeutig, zum Beispiel bei der Eingabe von disp
, dann erscheint die Vervollständigung mit grauer Schrift, und die Taste esc vervollständigt Ihre Eingabe zu display
.
Beschreibung
Über die Schaltfläche BESCHREIBUNG am unteren Rand des Fensters können Sie einen Text eingeben, der dann angezeigt wird, wenn Sie Ihr AppleScript als Programm (siehe Abschnitt 26.10) sichern und dabei die Option STARTDIALOG aktivieren. Der als Beschreibung angegebene Text wird in diesem Dialog angezeigt.

Das Event-Protokoll
Bei der oft unvermeidlichen Suche nach Fehlern im Skript ist das Event-Protokoll eine große Hilfe. Zunächst können Sie es sich über die Schaltfläche am unteren Rand des Fensters anzeigen lassen. Dabei wird Ihnen der Verlauf der Events bei der aktuellen Ausführung des AppleScripts angezeigt. Über den Menüpunkt FENSTER • VERLAUF DES EVENT-PROTOKOLLS können Sie ein eigenes Fenster aufrufen. Hier werden nicht nur die Ereignisse der letzten Ausführung, sondern die der letzten zehn ausgeführten Skripten angezeigt. Sie können sich also den Verlauf einer früheren Fassung eines AppleScripts anschauen, nachdem Sie den Quelltext geändert haben.
Voreinstellungen
In den Einstellungen des AppleScript-Editors können Sie in der Ansicht VERLAUF das Event-Protokoll konfigurieren. In den Standardeinstellungen werden zehn Abläufe protokolliert. Sie können bei Bedarf diesen Wert erhöhen oder alle Skriptabläufe protokollieren. Deaktivieren Sie die Option NUR PROTOKOLLIEREN, WENN SICHTBAR, dann wird das Protokoll auch dann erzeugt, wenn Sie das Event-Protokoll komplett ausgeblendet haben.
Events, Antworten und Ergebnisse
Protokolliert werden drei Informationen, die Sie sich über die gleichnamigen Schaltflächen anzeigen lassen können. Bei den EVENTS handelt es sich um die Aktionen, die Sie mit einem Befehl ausgelöst haben. Die Anweisung say
führte zu einem Ereignis innerhalb des aktuellen Programms (current application
). Zusätzlich zu den Ergebnissen können Sie sich die ANTWORTEN anzeigen lassen. Um die Interaktionen zwischen Ihrem Skript und dem angewiesenen Programm zu ermöglichen, erhält Ihr Skript auf verschiedene Anweisungen auch eine Reaktion. In diesem Beispiel hat der Befehl display dialog
die Antwort {button returned: "OK”}
erzeugt. Als ERGEBNIS wird das Resultat des zuletzt ausgeführten Befehls angezeigt. In diesem Beispiel wäre dies erneut {button returned: "OK"}
. Bei einem Skript, das lediglich aus der Anweisung 1 + 1
besteht, erhalten Sie als Ergebnis naturgemäß 2
. Die Beobachtung der Ergebnisse kann wichtig sein, wenn Sie ermitteln möchten, welche Werte und Datentypen von Befehlen zurückgegeben werden. Mehr zu den Datentypen erfahren Sie im nächsten Abschnitt.


Kontextmenü
Auch der AppleScript-Editor verfügt über ein Kontextmenü. Dieses stellt Ihnen nicht nur bekannte Befehle aus dem Menü BEARBEITEN sowie unten die Dienste (siehe Abschnitt 2.7) zur Verfügung, sondern enthält auch eine ganze Reihe von Skripten.
Diese unter /LIBRARY/SCRIPTS/SCRIPT EDITOR SCRIPTS gespeicherten Skripten können Sie aus dem Kontextmenü ausführen, und es werden Code-Fragmente in Ihr Skript eingefügt. Markieren Sie vorher Zeilen, die Sie bereits eingegeben haben, dann werden sie von den neuen Funktionen umschlossen. Die Skripten im Kontextmenü können Ihnen dann Arbeit abnehmen, wenn Sie mit den Grundlagen von AppleScript vertraut sind.
Open Scripting Architecture
AppleScript ist nicht einzige Programmiersprache, mit der Sie Apple-Events zur Steuerung von Programmen nutzen können. Die Apple-Events bilden die Grundlage der sogenannten Open Scripting Architecture, mit der auch andere Programmiersprachen zur Steuerung von Programmen genutzt werden. Daher finden Sie oben links im Fenster auch das Einblendmenü mit dem einzigen Eintrag APPLESCRIPT. Wenn Sie eine Erweiterung installiert hätten, mit der Sie Skripten in einer Sprache wie JavaScript, Python oder Ruby schreiben können, dann würden Ihnen hier die verfügbaren Programmiersprachen angezeigt. Die Open Scripting Architecture hat allerdings niemals eine breite Anwenderschaft gefunden, sodass funktionsfähige Erweiterungen bisher nicht entwickelt wurden.
Variablen und Datentypen
Variablen haben in AppleScript die gleiche Aufgabe wie im Automator: Sie speichern Werte und ermöglichen es Ihnen, zu einem späteren Zeitpunkt darauf zurückzugreifen. Der Unterschied zwischen den Variablen im Automator, die in erster Linie als Platzhalter fungieren, und den Variablen, die in einer Programmiersprache wie AppleScript verwendet werden, besteht in der Flexibilität. Mit AppleScript sind Sie in der Lage, die Werte von Variablen mit Befehlen zu manipulieren. Zum Beispiel können Sie das zweite Wort aus einem Text auslesen oder aus dem Inhalt eines Verzeichnisses gezielt die zweite Datei auswählen.
Reservierte Wörter
Bei den Bezeichnungen Ihrer Variablen müssen Sie reservierte Wörter vermeiden. Diese werden von AppleScript selbst genutzt. Eine Variable mit set set to "Wert"
können Sie nicht vergeben; im Skripteditor erhalten Sie eine Fehlermeldung. Wenn Sie bei komplexen Skripten dennoch ein reserviertes Wort als Variable verwenden müssen, können Sie dies ausnahmsweise in der Form set |set| to "Wert"
vornehmen. Die Form |set|
müssen Sie dann durchgängig verwenden.
„set“ und „get“
Die Arbeit mit Variablen erfolgt in AppleScript hauptsächlich mit den Befehlen set
und get
. Dabei weisen Sie einer Variablen mit set
einen Wert zu, mit get
lesen Sie diesen aus. Mit dem Skript
set Vorname to "Andreas" display dialog Vorname get Vorname
würden Sie in der ersten Zeile die Variable Vorname
erzeugen und ihr den Wert Andreas
zuweisen. Die Variable wird im folgenden Dialog genutzt, der nun lediglich aus dem Vornamen besteht. Der abschließende Aufruf von get
führt dazu, dass der Wert der angegebenen Variablen im Fenster des Skripts im Bereich ERGEBNIS ausgegeben wird.
„class“
Der Befehl class of
ermöglicht es Ihnen, innerhalb eines Skripts den Typ einer Variablen zu ermitteln. Die Anweisung class of Variable
erzeugt im Ergebnisprotokoll einen Eintrag mit dem Typ der Variablen.

Die typische Verwendung von set
zur Definition einer Variablen erfolgt in der Form
set Variable to Wert as Typ
Sie geben der Variablen zunächst einen möglichst eindeutigen Namen und weisen ihr nach to
einen Wert zu. Die Anweisung as
können Sie verwenden, um der Variablen einen bestimmten Typ zuzuordnen. Diese Angabe ist nicht zwingend.
[Coercion]
Die Umwandlung von Variablen in einen anderen Typ wird auch Coercion genannt. Bei der Arbeit mit Dateien ist die Umwandlung zwischen Text und Alias zum Beispiel notwendig.
Datentypen
Der Zusatz as Typ
ist in vielen Situationen notwendig. In einer Programmiersprache ist es nötig, bei den Werten von Variablen nach Typen zu differenzieren. So können Sie Zahlen, Zeichen, Dateien und auch mehrere Objekte in einer Variablen speichern. Je nach Typ können Sie dann unterschiedliche Befehle mit den Variablen verwenden, also eine Zeichenkette ausgeben oder eine Datei öffnen. Umgekehrt führen andere Kombinationen zu einer Fehlermeldung. Sie können zum Beispiel nicht zwei Dateien addieren.
Den ersten Datentyp haben Sie bereits im ersten Beispiel kennengelernt, es handelt sich ganz profan um eine Zeichenkette. Sie wird im Englischen auch als „string“ bezeichnet. Eine Zeichenkette wird durch Anführungszeichen umschlossen. Um Zeichenketten miteinander zu kombinieren, können Sie das Zeichen &
nutzen. In dem Skript
set Vorname to "Andreas" set Nachname to "Schenk" set Person to Vorname & " " & Nachname
werden zuerst die Variablen Vorname
und Nachname
mit einem Wert versehen. In der dritten Zeile wird eine weitere Variable Person
erstellt, deren Wert durch die Verknüpfung der anderen beiden Variablen konstruiert wird. Beachten Sie, dass Sie bei diesem Verfahren nicht nur auf andere Variablen zurückgreifen, sondern auch Zeichen direkt eingeben können. Durch die Angabe von & " "
wurde ein Leerzeichen zwischen dem Vor- und Nachnamen eingefügt, ohne zuvor eine weitere Variable zu definieren.
Zeichenketten
Sie können mit AppleScript auch die Inhalte von Zeichenketten ansprechen. Dies geschieht über die Befehle character
, word
und paragraph
, zusammen mit einer Zahl. Mit set Buchstabe to character 2 of Person
entspräche der Wert von Buchstabe
dem zweiten Zeichen, mit set Wort to word 1 of Person
dem ersten Wort, also dem Vornamen.

Zahlen
Eine Zahl wird als Wert ohne Anführungszeichen übergeben, und es ist in AppleScript auch möglich, die Grundrechenarten anzuwenden. In dem Skript
set Zahl1 to 2 set Zahl2 to 3 set Summe to Zahl1 + Zahl2
werden erst zwei Variablen definiert, die dann in der dritten Zeile addiert werden. Der in der Variablen Summe
enthaltene Wert entspricht in diesem Fall 5
. AppleScript eignet sich allerdings nicht für komplizierte mathematische Berechnungen. Berechnungen in AppleScript sind eher dann nützlich, wenn Sie zum Beispiel die Größe mehrerer Dateien addieren und anschließend prüfen, ob auf dem Datenträger noch genug Speicherplatz für einen Kopiervorgang vorhanden ist.
[Integer] und [Reelle Zahlen]
AppleScript ist in der Lage, mit Ganzzahlen, die als Integer bezeichnet werden, und reellen Zahlen zu arbeiten. Achten Sie darauf, dass Sie bei reellen Zahlen den Punkt verwenden, also 1.2
und nicht 1,2
angeben.
Operator | Bedeutung |
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Division |
div | Integer einer Division |
mod | Rest einer Division |
^ | Potenz |
Tabelle 26.1: Arithmetische Operatoren
Zeiten mit „date“
Zeitangaben können Sie auch mit AppleScript nutzen. In manchen Situationen sind sie recht nützlich. Zum Beispiel möchten Sie das Änderungsdatum von zwei Dateien mit dem gleichen Namen vergleichen. Bei der Arbeit mit Zeitangaben spielt die Anweisung date
eine entscheidende Rolle, da AppleScript mit der Langfassung des Datums in der Form Sonntag, 18. April 2012 15:00:00 Uhr
arbeitet.
„current date“
Einer Variablen können Sie mit current date
den aktuellen Zeitpunkt als Wert zuweisen, zum Beispiel mit set Jetzt to current date
.

Um sich die Eingabe der Langfassung zu ersparen, können Sie die Anweisung date
nutzen. Sie führt dazu, dass der Skripteditor die Zeitangabe bei der Übersetzung des Skripts in die Langfassung vervollständigt. Dabei folgt die Darstellung den in den Systemeinstellungen im Bereich SPRACHE & TEXT vorgegebenen Formaten. Die Angabe von date "18.4.2012 15:00"
würde vor der Ausführung in date "Mittwoch, 18. April 2012 15:00:00 Uhr"
umgewandelt.
Elemente im Datum
Über die Schlüsselwörter weekday
, day
, month
, year
, hours
, minutes
und seconds
können Sie auf die einzelnen Elemente zugreifen. So würde die Anweisung set Monat to month of (current date)
den aktuellen Monat der Variablen Monat
zuweisen. Beachten Sie hier die Klammern bei der Angabe von current date
.
Listen und Datensätze
Die bisher vorgestellten Datentypen waren nicht in der Lage, mehr als einen Wert zu speichern. Mehrere Werte in einer Variablen zu bündeln wird mit Listen und Datensätzen möglich. Beide geben Sie mit geschweiften Klammern {}
an und trennen die enthaltenen Einträge durch Kommata.
Listen
Listen können zum Beispiel den Inhalt eines Verzeichnisses enthalten oder eine Sammlung von Schlüsselwörtern, die Sie einem Foto in iPhoto nacheinander zuweisen möchten. Eine Liste definieren Sie mittels set
, indem Sie geschweifte Klammern verwenden. So würden Sie mit
Flexible Listen
Listen und Datensätze sind in AppleScript in Bezug auf den Inhalt sehr flexibel. Sie können in einer Liste oder einem Datensatz problemlos Werte unterschiedlicher Typen zusammenfassen. Mit set Liste to {"Andreas", 25, 2.3}
würde Liste
eine Zeichenkette, eine Ganzzahl und eine reelle Zahl enthalten.
set Liste to {"Andreas Schenk", "John Appleseed"}
eine Liste mit zwei Elementen erstellen. Bei beiden Elementen handelt es sich um Zeichenketten. Zugreifen können Sie auf die Elemente einer Liste, indem Sie die Anweisung item
verwenden. Den ersten Eintrag, der auch dem Namen einer Datei entsprechen könnte, würden Sie mit
set ersterEintrag to item 1 in Liste
auslesen. Wie viele Einträge sich überhaupt in einer Liste befinden, bringen Sie mit der Anweisung count items
in Erfahrung. Mit set Anzahl to count items in Liste
entspräche der Wert der Variablen Anzahl
der Anzahl der Elemente.
„first“ und „last“
Anstelle der Zahl können Sie auch die Schlüsselwörter first
und last
verwenden, um auf das erste oder letzte Element zuzugreifen. Mit set Eintrag to last item in Liste
entspräche der Wert der Variablen Eintrag
dem letzten Element der Liste, unabhängig von deren Länge.
Einträge einer Liste können Sie über den Befehl set
manipulieren oder ergänzen. Über die Schlüsselwörter end of
und beginning of
, jeweils gefolgt von der Bezeichnung einer bereits existierenden Liste, fügen Sie Einträge am Ende oder am Anfang hinzu. Die Zeilen
set Liste to {"Andreas Schenk", "John Appleseed"} set end of Liste to "Helmut Wozniak"
fügen der Liste am Ende den Eintrag "Helmut Wozniak"
hinzu. Einen vorhandenen Eintrag ändern Sie über das Schlüsselwort item
. So würden Sie mit set item 2 of Liste to "Jemand anderes"
den bereits existierenden zweiten Eintrag in "Jemand anderes"
ändern.
Hinweis
Beachten Sie, dass Sie die Einträge von Datensätzen nicht über die Position ansprechen können, sondern nur über die Bezeichnung der Einträge. Die Anweisung set Eintrag to item 2 in Buchprojekt
führt zu einer Fehlermeldung. Gleichwohl können Sie die Elemente mit set Anzahl to count items in Buchprojekt
zählen.
Datensätze
Datensätze, auch Records genannt, unterscheiden sich von Listen dadurch, dass ihre Elemente mit einer eindeutigen Bezeichnung versehen werden. Mit den Zeilen
set Buchprojekt to {Autor: "Andreas Schenk", Lektor: "Stephan Mattescheck"} set Person to Autor of Buchprojekt
würden Sie zunächst einen neuen Datensatz Buchprojekt
erzeugen, der zwei Einträge Autor
und Lektor
enthält. Die eindeutig zu benennenden Einträge trennen Sie mit Kommata, die Bezeichnung und den Wert unterscheiden Sie durch Doppelpunkte voneinander. Einen Eintrag an einen Datensatz anhängen können Sie ähnlich wie bei der Kombination von Zeichenketten mit dem Zeichen &
. Die Anweisung set Buchprojekt to Buchprojekt & {Setzer: "Helmut Wozniak"}
würde an den Datensatz noch einen Eintrag Setzer
anhängen.
Der Vorteil der eindeutigen Bezeichnung von Einträgen besteht darin, dass Sie unabhängig von der Position des Elements innerhalb des Datensatzes über die Bezeichnung auf seinen Wert zugreifen können. Verwendung finden die Datensätze deshalb vor allem bei den Eigenschaften von Objekten (siehe Abschnitt 26.4).
Dateien und Aliasse
In vielen Ihrer Skripten werden Sie Dateien ansprechen, kopieren oder löschen. Um auf eine Datei oder besser ein Objekt im Dateisystem zugreifen zu können, müssen Sie eine Variable vom Typ alias
erzeugen. Ähnlich den Aliassen im Finder haben diese Objekte in AppleScript die Aufgabe, auf ein Objekt im Dateisystem zu deuten.
Bei den Aliassen in einem Skript zeigt sich auch die Notwendigkeit der Angabe as alias
. Würden Sie eine Variable mit set Benutzerordner to ":Users:"
definieren, würde die Variable Benutzerordner
aufgrund der Anführungszeichen als Zeichenkette betrachtet. Mit dem Zusatz as alias
deklarieren Sie die Variable explizit als Verweis auf ein Objekt im Dateisystem, eben dem Ordner BENUTZER auf dem Startvolume.
Hinweis
Bei der Arbeit mit Objekten vom Typ alias
müssen Sie darauf achten, dass das Objekt im Dateisystem bereits existiert. Andernfalls erhalten Sie eine Fehlermeldung.

Startvolume
Soll Ihr Skript auf verschiedenen Rechnern funktionieren, müssen Sie mit einem unterschiedlich benannten Startvolume rechnen. Beginnen Sie eine Pfadangabe mit einem Doppelpunkt, dann wird zu Beginn automatisch das Startvolume ergänzt. Neben dem Typ alias
, der auf ein bereits existierendes Objekt im Dateisystem verweisen muss, gibt es auch das Objekt file
. Dieses muss nicht zwingend existieren und wird zum Beispiel bei der Erstellung neuer Dateien genutzt.
Objekte und Eigenschaften manipulieren
Die Arbeit mit Objekten ist das Kernelement von AppleScript. Während die eigentlichen Sprachelemente, mit denen Sie Berechnungen durchführen oder Zeichenketten bearbeiten, im direkten Vergleich mit fast allen anderen Programmiersprachen sehr spartanisch sind, entfaltet AppleScript sein Potenzial bei der Manipulation von Objekten, die von Programmen wie iPhoto zur Verfügung gestellt werden.
Graue Einträge
Wenn Sie in der Bibliothek Einträge mit grauer Schrift und ohne Icon finden, dann handelt es sich wahrscheinlich um ein deinstalliertes Programm, das irgendwann einmal der Bibliothek hinzugefügt wurde.
Die Bibliothek nutzen

Das zentrale Element ist die Bibliothek, die Sie über FENSTER • BIBLIOTHEK oder Apfel + Umschalt + L aufrufen. Sie enthält zunächst eine Liste von Standardprogrammen, die auf den meisten Systemen bereits vorhanden sind. Ein Programm zur Bibliothek hinzufügen können Sie über das Pluszeichen und ein bereits vorhandenes wieder entfernen über das Minuszeichen. Wenn Sie nur kurz in die AppleScript-Unterstützung eines Programms Einsicht nehmen möchten, ohne es gleich der Bibliothek hinzuzufügen, können Sie sich sein Wörterbuch über ABLAGE • FUNKTIONSVERZEICHNIS ÖFFNEN anzeigen lassen.
[OSAX]
Erweiterungen von Drittherstellern werden bisweilen auch als „OSAXen“ in Anspielung auf die Open Scripting Architecture bezeichnet.

Erweiterungen
In der Bibliothek finden Sie neben den Programmen einige Einträge, die keinen Applikationen entsprechen. Dabei handelt es sich um Erweiterungen für AppleScript, die in diesem Fall von Apple selbst bereitgestellt wurden. Dazu gehören die DATABASE EVENTS zur Bearbeitung von Datenbanken und die in diesem Kapitel behandelten IMAGE EVENTS für die Bildbearbeitung.
Die STANDARDADDITIONS enthalten viele alltägliche Erweiterungen wie die Dialoge (display dialog
), während mit den SYSTEM EVENTS eine ganze Reihe von Funktionen, die das System direkt betreffen, realisiert wird.
Funktionsverzeichnis
Welche Objekte Sie bei einem Programm mit AppleScript manipulieren können, variiert natürlich von Programm zu Programm. Wenn Sie in der Bibliothek eine Anwendung mit einem Doppelklick auswählen oder die Bücher in der Symbolleiste anklicken, erscheint in einem eigenen Fenster das Funktionsverzeichnis des Programms (siehe Abbildung 26.12). Sie erhalten in diesem Fenster Aufschluss über die durch das Programm zur Verfügung gestellten Befehle und Objekte. Von Relevanz sind zunächst die farbig hinterlegten Buchstaben vor den einzelnen Einträgen:

S in einem Quadrat: Es handelt sich um eine Suite, die mehrere Befehle und Objekte thematisch gruppiert. Die Suite FINDER ITEMS fasst Befehle und Objekte zusammen, die sich auf Objekte im Dateisystem beziehen.
C in einem blauen Kreis: ein Befehl wie zum Beispiel display dialog
, der Ihnen im Rahmen dieses Programms zur Verfügung steht
C in einem lila Quadrat: eine Klasse von Objekten wie zum Beispiel Fenster, Fotos oder Dateien, die über bestimmte Eigenschaften verfügen
P in einem lila Quadrat: Eigenschaften eines Objekts, die Sie gegebenenfalls manipulieren können
E in einem orangefarbenen Quadrat: ein Unterelement dieser Klasse
Auf den ersten Blick mag ein Funktionsverzeichnis wie das des Finders oder von iPhoto verwirren. Es ist folgendermaßen zu lesen: Zunächst finden Sie in der linken Spalte die einzelnen Suiten, die die verfügbaren Objekttypen und Befehle thematisch gruppieren.
In der IPHOTO SUITE sehen Sie dann mehrere Befehle wie zum Beispiel SELECT für die Auswahl eines Objekts, bei dem es sich um ein Bild oder ein Album handeln kann. Darüber hinaus finden Sie dort eine Objektklasse PHOTO, die weitere Eigenschaften (Properties) wie etwa NAME oder DATE enthält.
„boolean“
Die Angabe BOOLEAN verweist auf einen weiteren Typ von Variablen. Dabei sind nur zwei Werte möglich: wahr (true
) oder falsch (false
). Ob das Suffix des Objekts angezeigt wird oder nicht, wird durch den Wert der Eigenschaft extension hidden
definiert. Dieser Wert kann entweder true
(das Suffix wird versteckt) oder false
(es ist sichtbar) sein.

Wählen Sie in der Funktionsbibliothek ein Element wie in Abbildung 26.13 ITEM aus, dann erhalten Sie im unteren Bereich eine kurze Beschreibung. Darunter finden Sie unter ELEMENTS eine Auflistung der Objekte, die das ausgewählte Element enthalten können. So können Objekte (ITEMS) in Datenträgern (DISKS) und Ordnern (FOLDERS) enthalten sein. Dies wird durch die Angabe CONTAINED BY signalisiert.
Umgekehrt gibt es Objektklassen, die weitere Objekte enthalten können. Würden Sie zum Beispiel aus der Suite CONTAINERS AND FOLDERS die Klasse CONTAINER auswählen, fänden Sie dort auch eine Angabe CONTAINS, gefolgt von einigen Objekten. Damit wird signalisiert, dass dieser Objekttyp weitere Objekte, etwa Dateien, enthalten kann.
„r/o“
Das Kürzel R/O bei einer Eigenschaft besagt, dass diese nur lesbar (read only) ist. Solche Eigenschaften können Sie mit dem Befehl set
nicht verändern.
Eigenschaften und Typen
Bei einer Objektklasse wie ITEM oder FOLDER finden Sie eine ganze Reihe von Eigenschaften (PROPERTIES). Neben der eigentlichen Bezeichnung der Eigenschaft wie NAME erhalten Sie in Klammern Angaben über den Datentyp (TEXT, INTEGER) dieser Eigenschaft. Der Name eines Objekts wird natürlich durch eine Zeichenkette (TEXT) repräsentiert, während es sich beim Änderungsdatum (MODIFICATION DATE) um eine Zeitangabe (DATE) handelt. Einige Eigenschaften können nur vorgegebene Werte enthalten. Diese werden in Klammern durch Querstriche getrennt angegeben. Der kurze Satz nach dem Doppelpunkt beschreibt die Funktion der Eigenschaft.
Ergebnisse „abfangen“
Sie können das Ergebnis in einer neuen Variablen regelrecht „abfangen“. Mit der Anweisung set Fenster to make new Finder window
würden Sie eine neue Variable Fenster
erstellen, die auf das neu erstellte Fenster verweist. Dieses Vorgehen funktioniert nur in den nachfolgend beschriebenen tell
-Blöcken.
Objekte erstellen
Haben Sie sich über die verfügbaren Objekte in einem Programm in der Funktionsbibliothek informiert, dann können Sie das Programm über AppleScript anweisen, ein neues Objekt zu erstellen. Der zentrale Befehl zur Erstellung eines neuen Objekts, der von den meisten Programmen verstanden wird, ist make
. Dementsprechend erstellen Sie im Finder ein neues Objekt vom Typ Fenster mit der Anweisung
tell application "Finder" to make new Finder window
Der Finder öffnet daraufhin im Hintergrund ein neues Fenster.
Eigenschaften auslesen und manipulieren
Nicht nur bei den Variablen, auch bei den Eigenschaften dienen die Befehle set
und get
dazu, Werte auszulesen oder zu manipulieren. Wenn Sie mit der Funktionsweise und AppleScript-Unterstützung eines Programms noch nicht so ganz vertraut sind, kann die Arbeit mit dem Befehl get
ganz hilfreich sein. In Abbildung 26.14 finden Sie ein Skript, bei dem zunächst innerhalb eines tell
-Blocks ein neues Fenster im Finder erzeugt wurde. Dieses wurde in der Variablen Fenster
dann gespeichert.
Hinweis
Die Datensätze mit den Eigenschaften können unterschiedliche Datentypen enthalten. So werden die Koordinaten der Eigenschaft position
in Form einer Liste innerhalb des Datensatzes gespeichert.

„get properties“
Über welche Eigenschaften ein individuelles Objekt verfügt, können Sie in der Regel mit dem Befehl get properties of
in Erfahrung bringen. In Abbildung 26.14 wurden die Eigenschaften mit get properties of Fenster
ausgelesen, und im Bereich ERGEBNIS werden sie in Form eines Datensatzes angegeben. So trägt das Fenster den Namen MACBOOKAIR und befindet sich auf dem Bildschirm an der Position (POSITION) mit der X-Koordinate 581 und der Y-Koordinate 67.
Tipp
Es ist manchmal auch möglich, auf schon vorhandene Objekte zurückzugreifen, so etwa mit set Fenster to front window
auf das vorderste Fenster.
Eigenschaften manipulieren
Die Eigenschaften eines Objekts können Sie mit dem Befehl set
so manipulieren, wie Sie mit ihm die Werte einer Variablen definieren.
tell application "Finder" set Fenster to make new Finder window set position of Fenster to {50, 50} set Zielordner to ":Users:Andreas:" as alias set target of Fenster to Zielordner end tell
In diesem Skript wird zunächst ein neues Finder-Fenster erstellt und dieses neu erstellte Objekt in der Variablen Fenster
gespeichert. Dann wird die Liste der Eigenschaft position
in {50, 50}
geändert. Die früheren Werte werden somit überschrieben, das Fenster wird am linken oberen Rand positioniert. Dann wird im dritten Schritt eine neue Variable Zielordner
vom Typ alias
der Eigenschaft target
als Wert zugewiesen. Das neu erstellte Fenster befindet sich nun oben links auf dem Bildschirm und zeigt den Ordner des Benutzers mit dem Kurznamen Andreas
an.
Grundlegende Befehle
AppleScript verfügt über einige grundlegende Befehle, die Ihnen unabhängig von den skriptfähigen Programmen zur Verfügung stehen. Dazu gehören Befehle, mit denen Sie Bedingungen formulieren oder Befehle mehrfach hintereinander ausführen, um zum Beispiel die Elemente einer Liste nacheinander abzuarbeiten. Dieser Abschnitt stellt Ihnen diese grundlegenden Befehle zur Kontrolle des Ablaufs vor.
Mehrzeiliger Kommentar
(* ... *)
Einzeiliger Kommentar
--
Kommentare
Ihre Skripten sollten Sie in jedem Fall kommentieren. Kommentare erleichtern es Ihnen zu einem späteren Zeitpunkt, das Vorgehen Ihres Skripts zu verstehen. Bei den in diesem Kapitel verwendeten, eher kleineren Beispielen mag die Notwendigkeit noch nicht einsichtig sein. Aber wenn Ihre Skripten an Komplexität und an Umfang zunehmen, werden Sie Kommentare bei der Fehlersuche nicht mehr missen wollen.
Tipp
Arbeiten Sie an einem umfangreicheren Skript, das Sie nach und nach mit neuen Zeilen ergänzen, kann es zu Testzwecken manchmal nützlich sein, einige Zeilen nicht auszuführen. Wenn Sie solche Zeilen vorübergehend als Kommentar markieren, müssen Sie sie nicht aus dem Skript selbst löschen.

In AppleScript können Sie einzeilige und mehrzeilige Kommentare verwenden. Einen Kommentar über mehrere Zeilen leiten Sie mit (*
ein. Der folgende Text wird von AppleScript als Kommentar erkannt und bei der Ausführung des Skripts nicht beachtet. Einen solchen Kommentar beenden Sie mit den Zeichen *)
.
Bei einem kurzen Kommentar, der nur eine Zeile in Anspruch nimmt, können Sie die Zeile mit zwei Minuszeichen einleiten. Kommentare werden im Editor grau dargestellt und sind so leicht vom regulären Quellcode zu unterscheiden.

Protokoll mit „log“
Der Befehl log
kann Ihnen bei der Verfolgung des Ablaufs Ihres Skripts helfen. Sie können ihm in Anführungszeichen einen Text anfügen, der dann im Event-Protokoll erscheint. Auch hier mag sich der Nutzen bei kleinen Skripten nicht erschließen; ist Ihr Skript allerdings umfangreicher geworden und haben Sie es in Funktionen unterteilt, dann sind die über log
erzeugten Nachrichten ein nützliches Mittel zur Analyse von Fehlern.
Programme mit „tell“ ansprechen
Einem Programm über AppleScript Anweisungen erteilen können Sie mithilfe des bereits erwähnten tell
-Befehls. Diesem übergeben Sie in Anführungszeichen den Namen des Programms, das Sie steuern möchten. Beachten Sie bei der Angabe des Namens, dass seine Schreibweise exakt der im Finder angezeigten entsprechen muss. Andernfalls erscheint ein Dialog, in dem Sie das Programm vorgeben müssen. Mit der Anweisung tell application "Finder" to activate
würde der Finder in den Vordergrund wechseln.
Pfadangabe
Sie können anstelle des Namens auch einen vollständigen Pfad zu dem Programm-Bundle angeben. So sprächen Sie mit tell application "/Applications/iPhoto.app"
das im Ordner PROGRAMME gesicherte Programm direkt an. Die Pfadangabe kann nützlich sein, wenn Sie ein Programm in verschiedenen Versionen mehrfach installiert haben.
Einblendmenü
In den Einstellungen des AppleScript-Editors können Sie in der Ansicht BEARBEITUNG die Option EINBLENDMENÜ MIT TELL-BEFEHL FÜR PROGRAMME EINBLENDEN aktivieren. Anschließend finden Sie oberhalb des Eingabebereichs im Fenster ein Einblendmenü, aus dem Sie das Programm auswählen können, an das die eingegebenen Befehle gesendet werden.
Hinweis
In einigen Fällen ist es notwendig, die englische Bezeichnung eines Programms anzugeben. Die Anweisung tell application "Kontakte"
ist nicht erfolgreich, während die englische Bezeichnung tell application "contacts"
zum Ziel führt.

Die Auswahl tell current application
anstelle eines Programms wie dem Finder oder iPhoto hat das aktive Programm zum Ziel. Dies wird, wenn Sie Ihr Skript gerade eingeben, der AppleScript-Editor sein, den Sie seinerseits ebenfalls via AppleScript steuern können. Für das in Abbildung 26.17 dargestellte Skript wurde der Finder als Ziel vorgegeben, und auf diese Weise konnte auf die Verwendung des Befehls tell
verzichtet werden.
Blöcke
Die Arbeit mit einem Konstrukt in der Form tell application "Name" to activate
ist akzeptabel, wenn lediglich ein Befehl an das Programm geschickt werden soll. Möchten Sie dem Finder mehrere Anweisungen hintereinander übergeben, bietet sich die Verwendung eines tell
-Blocks an. Diesen leiten Sie mit der Anweisung tell application "Finder"
ein, wobei Sie to
hier nicht angeben. Die folgenden Zeilen werden von AppleScript alle an den Finder gerichtet. Um einen solchen Block – die Zeilen werden zur besseren Übersicht eingerückt – abzuschließen, geben Sie die Anweisung end tell
ein.

Das in Abbildung 26.18 dargestellte Skript weist zunächst den Finder an, ein neues Fenster zu öffnen und zu positionieren. Anschließend wird über einen zweiten tell
-Block das Programm TextEdit angewiesen, sich in den Vordergrund zu begeben und ein neues Dokument zu erstellen. Sofern TextEdit noch nicht aktiv ist, wird es über AppleScript automatisch gestartet.
Hinweis
Beachten Sie, dass Sie die Anweisung ignoring
innerhalb eines tell
-Blocks einfügen müssen.
Ignorieren und Zeitüberschreitung
Es gibt einige Sonderfälle, in denen es gewünscht sein kann, die Ergebnisse eines Befehls zu ignorieren oder aber ein Programm vorzeitig abzubrechen. Mit einem Block, der mit ignoring application responses
eingeleitet und mit end ignoring
beendet wird, werden die dazwischenstehenden Anweisungen ausgeführt. Das Skript wartet dabei nicht auf die Ergebnisse der Befehle. So können Sie im Hintergrund Aktionen, die Zeit, aber keine Aufmerksamkeit benötigen, effizient ausführen.
Tipp
Sie können sich ein paar Eingaben sparen, indem Sie im Skripteditor anstelle von application
einfach nur app
eingeben. Die Eingabe wird dann vom Editor beim Übersetzen vervollständigt.
In einem AppleScript können Sie auch einen Zeitrahmen vorgeben, innerhalb dessen die Befehle ausgeführt werden müssen. Dies kann zum Beispiel bei der Aktivierung eines Servers geboten sein. Sie würden so verhindern, dass eine zu langsame Netzwerkverbindung das gesamte Skript blockiert. Dies erreichen Sie, indem Sie einen Block mit with timeout of 60 seconds
beginnen und mit end timeout
abschließen. Mit dem Skript
with timeout of 60 seconds tell application "Finder" mount volume "afp://10.0.0.2/Serverdateien" end tell end timeout
hätte der Finder exakt eine Minute Zeit, die Freigabe auf dem angegebenen Rechner zu aktivieren, andernfalls würde das Skript abgebrochen. Umgekehrt können Sie durch die Angabe von with timeout of
auch die Laufzeit eines Skripts verlängern. Dies kann dann notwendig sein, wenn eine Aufgabe viel Zeit in Anspruch nimmt und das Skript vor Abschluss der Arbeiten vom System abgebrochen wird.
Finder beenden
Mit der Anweisung tell application "Finder" to quit
würden Sie auch den Finder beenden.
Programme starten und beenden
Ein Programm starten Sie mit dem Befehl launch
. In den Vordergrund bringen Sie es mit dem Befehl activate
. Dieser startet das Programm, falls es noch nicht aktiv sein sollte. Mit quit
beenden Sie ein Programm über AppleScript.
Warnton mit „beep“
Den Warnton des Systems können Sie mit dem Befehl beep
erklingen lassen.
Interaktion mit dem Anwender
Ihre Skripten werden flexibler und nützlicher, wenn Sie dem Anwender die Möglichkeiten zur Eingabe und zur Entscheidung geben. Zur Kommunikation mit dem Anwender bietet Ihnen AppleScript einige Funktionen, die über die Sprachausgabe mit say
hinausgehen.
Aufgeben
Mit der Angabe giving up after
, gefolgt von der Anzahl der Sekunden, wird die Warnmeldung nach der Wartezeit automatisch abgebrochen.
„display alert“
Die erste Möglichkeit, mit dem Anwender zu kommunizieren, besteht in der Ausgabe einer Warnung oder Fehlermeldung.
Der Befehl display alert
zeigt eine Meldung an, deren Erscheinungsbild Sie mit ein paar Optionen steuern können. Zunächst können Sie die Überschrift in Anführungszeichen direkt nach dem Befehl angeben. Über die Option message
, wiederum gefolgt von einer Zeichenkette, geben Sie den eigentlichen Text der Warnung vor.

Die Angabe buttons
, gefolgt von einer Liste, ermöglicht es Ihnen, mehrere Schaltflächen in dem Dialog zu definieren. So wurde dem Dialog in Abbildung 26.19 noch eine dritte Schaltfläche hinzugefügt. Da solche Dialoge in OS X auch mit einem Druck auf die Taste esc abgebrochen werden können, wurde die Schaltfläche ABBRECHEN mit der Anweisung cancel button "Abbrechen"
explizit als Schaltfläche für den Abbruch deklariert. Der Zusatz as critical
sorgt für die Verwendung des gelben Dreiecks im Dialog.

„button returned“
Der Befehl display alert
gibt einen Datensatz mit einem Eintrag button returned
zurück. Um nun an die Entscheidung des Anwenders zu gelangen, müssen Sie den Wert dieses Eintrags auslesen.
Sie könnten natürlich zunächst eine eigene Variable (zum Beispiel Rückgabe
) für diesen Datensatz erstellen und dann in einer zweiten Zeile den Wert des Eintrags button returned
des Datensatzes Rückgabe
auslesen und in einer zweiten Variablen sichern. Einfacher ist es jedoch, die gesamte display alert
-Anweisung in Klammern anzugeben. Mit der Zeile
set Entscheidung to button returned of (display alert "Vorsicht!" message "Irgendetwas Unvorhergesehenes ist passiert." buttons {"Abbrechen", "Wie jetzt?", "OK"})
wird in der Variablen Entscheidung
lediglich der Text der angeklickten Schaltfläche gespeichert.
Befehle einklammern
Wenn Sie Befehle in Klammern angeben, werden diese zuerst ausgeführt. In diesem Beispiel wird also erst der Dialog angezeigt und dann der Wert über button returned
ausgelesen. Mit dieser Schreibweise können Sie Ihr Skript kompakter fassen; Sie sollten aber immer auf die Lesbarkeit achten.

„display dialog“
Während display alert
lediglich Schaltflächen zur Auswahl stellt, nimmt der Befehl display dialog
auch Text entgegen. Zunächst können Sie display dialog
direkt im Anschluss einen Text vorgeben, der als Nachricht im Dialog angezeigt wird. Über das Schlüsselwort buttons
, gefolgt von einer Liste, legen Sie die Schaltflächen fest, die in dem Dialog erscheinen sollen. Der Dialog aus Abbildung 26.22 würde durch den Befehl display dialog "Dies ist ein Dialog" buttons {"Nummer
1", "Nummer 2", "Nummer 3"}
erzeugt.
Icon vorgeben
Durch die Angabe von with icon
, gefolgt von stop
, note
oder caution
, können Sie dem Dialog eines von drei Icons vorgeben.

Text eingeben
Dem Anwender ermöglichen Sie die Eingabe eines Textes, indem Sie die Anweisung default answer
verwenden. Dieser übergeben Sie in Anführungszeichen den Text, der im Eingabefeld zuerst erscheinen soll. Geben Sie zwei Anführungszeichen hintereinander ein, dann ist das Textfeld zunächst leer. Der Dialog in Abbildung 26.23 wurde mit der Anweisung display dialog "Bitte Text eingeben" buttons {"Abbrechen”, "OK"} default answer ""
erzeugt.
„hidden answer“
Die Anzeige des eingegebenen Textes können Sie durch die zusätzliche Angabe von hidden answer true
unterbinden. In diesem Fall erscheinen im Textfeld nur schwarze Punkte – wie auch bei der Eingabe eines Kennworts.

„text returned“
Die Entscheidungen des Anwenders umfassen bei diesem Dialog sowohl den eingegebenen Text, den Sie über den Eintrag text returned
ansprechen, als auch die angeklickte Schaltfläche, die Sie wie gehabt über button returned
ansprechen können. Eine Variable, die den vom Benutzer eingegebenen Text als Wert enthält, erreichen Sie mit einer Zeile set Eingabe to text returned of (display dialog "Bitte Text eingeben" buttons {"Abbrechen", "OK"} default answer "")
.

„display notification“
Mit OS X Mavericks können Ihre Skripten nun auch Mitteilungen anzeigen. Dazu verwenden Sie display notification with title "Titeltext" subtitle "Mitteilungstext".
Die Mitteilungen werden dann in der Mitteilungszentrale und auf dem Bildschirm angezeigt.


„choose“
Für die Auswahl von Dateien, Ordnern, Listenelementen und Dateinamen stellt Ihnen AppleScript passende Befehle zur Verfügung. Mit der Anweisung choose file
geben Sie dem Anwender die Möglichkeit, eine Datei auszuwählen. Die Zeile set Datei to choose file
ruft den bekannten Dialog zur Auswahl einer Datei auf. Die Variable Datei
enthält anschließend die ausgewählte Datei in Form eines Alias. Mit dem Zusatz with invisibles
stellen Sie auch die im Finder sonst unsichtbaren Dateien zur Auswahl.
Möchten Sie den Anwender mehrere Dateien gleichzeitig auswählen lassen, ergänzen Sie die Zeile um die Anweisung multiple selections allowed true
. Bei gedrückter Apfel-Taste kann er nun mehrere Dateien markieren. Als Resultat erhalten Sie eine Liste mit alias
-Objekten.
Text anzeigen
Allen Dialogen können Sie durch die Angabe von with prompt
, gefolgt von einem Text in Anführungszeichen, eine kurze Beschreibung hinzufügen.


Ordner auswählen
Einen Ordner können Sie den Anwender mit dem Befehl choose folder
auswählen lassen.
Aus Liste auswählen
Neben Ordnern und Dateien können Sie auch die Elemente einer bereits vorhandenen Liste zur Auswahl stellen. Diese Funktion ist dann sinnvoll, wenn Sie dem Anwender zum Beispiel beim Export eines Albums aus iPhoto die Möglichkeit geben möchten, aus den bereits vorhandenen Alben auszuwählen. Die Auswahl erfolgt mit dem Befehl choose from list
, gefolgt vom Namen einer bereits existierenden Liste.
Beachten Sie dabei, dass Ihnen der Befehl keinen Text, sondern eine Liste zurückgibt. Mit den Zeilen
set Gesamt to {"Erster Eintrag", "Zweiter Eintrag", "Dritter Eintrag"} set Auswahl to choose from list Gesamt OK button name "Auswählen" with title "Bitte auswählen" with prompt "Vorhandene Elemente"
könnte der Wert der Variablen Auswahl
zum Beispiel {"Erster Eintrag"}
lauten. Würden Sie das Skript um die Zeile set nurText to first item in Auswahl
ergänzen, dann stünde das erste und in diesem Fall einzige Element in der Liste Auswahl
über die Variable nurText
zur Verfügung. Diese enthält dann lediglich die Zeichenkette und keine Liste.
Bedingungen vorgeben
Die Möglichkeit, Werte von Variablen abzufragen und das Verhalten des Skripts davon abhängig zu steuern, ist der entscheidende Unterschied zwischen AppleScript und dem Automator.
Mit der Anweisung if
können Sie eine Bedingung vorgeben, die erfüllt werden muss, um die folgenden Anweisungen auszuführen. Eine Bedingung wäre zum Beispiel notwendig, wenn Sie prüfen, ob ein Ordner bereits existiert, und ihn, sofern dies nicht der Fall ist, kurzerhand erstellen.
Die einfachste Möglichkeit ist eine Abfrage mittels if
in einer Zeile. Die Zeile
if application "iPhoto" is running then tell application "iPhoto" to quit
würde zunächst prüfen, ob das Programm iPhoto aktiv ist. Wenn dies der Fall ist, wäre die Bedingung is running
wahr. Sie entspräche also dem Wert true
. In diesem Fall wird der mit then
eingeleitete Befehl ausgeführt und das Programm beendet. Wäre iPhoto nicht aktiv, dann geschähe nichts.
„prompt“ und „title“
Wie auch bei den anderen Dialogen können Sie mit den Angaben with prompt
und with title
eine Erläuterung und eine Überschrift hinzufügen.
„if … then … else“
Wie bei tell
können Sie auch bei einer Überprüfung mittels if
die auszuführenden Befehle in einem Block zusammenfassen. Einen solchen Block beginnen Sie mit dem Kriterium, das erfüllt sein muss. In dem Skript
set Person to button returned of (display dialog "Person auswählen" buttons {"Hans", "Martin"}) if Person is "Martin" then display dialog "Hallo Martin" end if
werden dem Anwender erst zwei Namen in einem Dialog zur Auswahl gestellt und diese in der Variablen Person
gespeichert. Der Wert dieser Variablen wird dann mit is "Martin"
überprüft. Wenn der Anwender MARTIN angeklickt hat, werden die Zeilen zwischen if
und end if
ausgeführt.
„else“
Die mit else
ohne weitere Bedingungen angegebenen Befehle werden in dem Fall ausgeführt, dass alle vorher durchgeführten Abfragen sich als falsch herausgestellt haben.
Das Schlüsselwort else
ermöglicht es Ihnen, in einem Durchgang mehrere Überprüfungen vorzunehmen. Es gibt eine Reihe von Szenarien, in denen diese Vorgehensweise angebracht ist, etwa wenn Sie mit Dateien verschiedener Typen unterschiedlich verfahren möchten. In dem Beispiel
set Person to button returned of (display dialog "Person auswählen" buttons {"Hans", "Martin", "Niemand", "Nemo"}) if Person is "Martin" then display dialog "Hallo Martin" else if Person is "Hans" then display dialog "Hallo Hans" else display dialog "Niemand da?" end if
wird zuerst geprüft, ob der Anwender auf MARTIN geklickt hat. Wenn dies nicht der Fall ist, wird überprüft, ob auf HANS geklickt wurde. In einem anderen Fall, egal, ob NIEMAND oder NEMO ausgewählt wurde, erscheint der dritte Dialog.
Während die Bedingung is
lediglich auf eine vollständige Übereinstimmung hin prüft, verfügt AppleScript über eine Reihe weiterer Operatoren, mit denen Sie Bedingungen sowohl für Zahlen als auch für Listen und Zeichenketten definieren können.
Operator | Bedeutung |
= |
Die Werte sind gleich. Alternativ: is |
≠ |
Die Werte sind nicht gleich. Alternativ: is not |
< | kleiner als der zweite Operand |
> | größer als der zweite Operand |
≤ | kleiner als oder gleich dem zweiten Operanden |
≥ | größer als oder gleich dem zweiten Operanden |
Tabelle 26.2: Operatoren für Vergleiche
Neben den Operatoren für Vergleiche, die bevorzugt bei Zahlen (if Zahl1 ≤ Zahl2 then
) verwendet werden, gibt es vier Operatoren, die Sie bei Listen und Zeichenketten verwenden können. Dies ermöglicht es Ihnen, die Inhalte einer Liste auf einen Bestandteil hin zu überprüfen.
Operator | Bedeutung |
contains /is in |
Prüft, ob die Zeichenkette in einer String- Variablen (contains ) oder das Element in einer Liste (is in ) enthalten ist. |
contains not/ is not |
in Ist wahr, wenn die Zeichenkette nicht in einer String-Variablen (contains not ) oder das Element nicht in einer Liste (is not in ) enthalten ist. |
begins with |
Prüft den Beginn einer Zeichenkette oder einer Liste. |
ends with |
Prüft das Ende einer Zeichenkette oder einer Liste. |
Tabelle 26.3: Operatoren für Inhalte
Die Prüfung des ersten und letzten Elements beziehungsweise des Inhalts ist in vielen Situationen sinnvoll. So ist es bei einem Dateinamen oft nicht erwünscht, wenn er mit einem Punkt beginnt. In dem Beispiel
set Dateiname to text returned of (display dialog "Name vergeben" default answer "") if Dateiname begins with "." then display dialog "Die Datei wird im Finder nicht sichtbar sein!" else if Dateiname contains ":" then display dialog "Doppelpunkte sind unzulässig!" else display dialog "Die Datei wird im Finder sichtbar sein!" end if
würde die if
-Bedingung zunächst den Beginn von Dateiname
auf einen Punkt hin überprüfen. Sofern dies nicht der Fall ist, prüft das Skript, ob der Anwender einen Doppelpunkt für diesen Dateinamen angegeben hat, und weist ihn dann darauf hin, dass dieser in einem Dateinamen unzulässig ist. Wenn der Dateiname weder mit einem Punkt beginnt noch einen Doppelpunkt enthält, wird der dritte Dialog angezeigt.
Schleifen formulieren
Schleifen haben in Programmiersprachen die Aufgabe, Befehle mehrfach hintereinander auszuführen. Dies kann notwendig sein, wenn Sie eine Befehlsfolge mehrfach wiederholen und so zum Beispiel mehrere durchnummerierte Ordner in einem Durchgang erzeugen. Oder Sie wollen die Elemente einer Liste, die mehrere Dateien enthält, nacheinander abarbeiten. Eine Schleife erzeugen Sie in AppleScript mit dem Befehl repeat
. Auch hier geben Sie die Befehle in Blöcken an.
Vorgegebene Anzahl
Eine etwas einfachere Verwendung von repeat
besteht in der Vorgabe der Durchläufe mittels times
. Würden Sie die Schleife mit repeat 5 times
einleiten, würde sie fünfmal ausgeführt. Sie hätten keine Möglichkeit, auf den aktuellen Durchgang mittels einer Variablen zuzugreifen.
Schleifen mehrfach durchlaufen
Leiten Sie mit repeat
eine Schleife ein, dann können Sie diese so konstruieren, dass Sie auf die aktuelle Wiederholung in Form einer Variablen Zugriff haben. Geben Sie dazu das Schlüsselwort with
an, gefolgt vom Namen der Variablen, die die aktuelle Wiederholung speichern soll. Darüber hinaus geben Sie mit from
und to
vor, von welcher Zahl ausgehend zur letzten gezählt werden soll. Das klingt zunächst sehr abstrakt. Das folgende Beispiel mag nutzlos sein, illustriert aber recht eindrucksvoll, welche Bewandtnis es mit einer Schleife hat.
tell application "Finder" activate set Fenster to make new Finder window repeat with Durchlauf from 1 to 500 set position of Fenster to {Durchlauf, 50} end repeat end tell
Wenn Sie dieses Skript ausführen, wechselt der Finder zunächst in den Vordergrund und öffnet ein neues Fenster, das über die gleichnamige Variable angesprochen wird. Dieses schwebt ohne Ihr Zutun von links nach rechts über den Bildschirm.
Rückwärtszählen
Es ist in AppleScript auch möglich, in einer Schleife rückwärtszuzählen. Mit repeat with Durchlauf from 500 to 1 by -1
würde sich das Fenster von rechts nach links bewegen.

Das liegt an der repeat
-Schleife. Die aktuelle Wiederholung wird in der Variablen Durchlauf
gespeichert. Ihr Wert beginnt bei 1 (from 1
) und wird dann bis 500 (to 500
) hochgezählt. Innerhalb der repeat
-Schleife wird diese Variable verwendet, um die X-Koordinate {Durchlauf, 50}
der position
des Fensters anzugeben. Die X-Koordinate beginnt also bei 1 und endet bei 500 analog zur aktuellen Wiederholung der Schleife.
Schrittgröße
Sie können die Angabe von by
auch nutzen, um die Zählung zu verändern. Mit repeat with Durchlauf from 1 to 500 by 2
würde der Wert von Durchlauf
bei jeder Wiederholung um 2 erhöht. Die Schleife würde so nur 250-mal abgearbeitet.
Schleifen und Listen
Sie können eine repeat
-Schleife auch nutzen, um die Elemente in einer Liste nacheinander abzuarbeiten. Bei Listen tritt das Problem auf, dass Sie bei der Entwicklung Ihres Skripts manchmal nicht wissen können, wie viele Elemente die Liste enthält. So kann sich die Anzahl der in einem Ordner enthaltenen Dateien ändern. Hier wäre die Angabe einer Zahl zunächst nicht sinnvoll.
Die einfachste Möglichkeit, die Elemente einer Liste abzuarbeiten, besteht in der Angabe repeat with Variable in Liste
. Der Wert von Variable
entspräche nacheinander dem jeweiligen Element in der Liste, wobei die Schleife so oft ausgeführt wird, wie die Liste über Elemente verfügt. Ein Beispiel:
set Personen to {"Hans", "Martin", "Theo"} repeat with Person in Personen display dialog "Hallo " & Person end repeat
„repeat while“
Mithilfe des Schlüsselwortes while
, gefolgt von einer Bedingung, veranlassen Sie, dass die Schleife so lange durchlaufen wird, wie der Wert der Variablen dem Kriterium entspricht. Mit repeat while Variable is "Wert"
wird die Schleife so lange wiederholt, bis der Wert geändert wird. Dies könnte zum Beispiel mit set Variable to "Neuer_Wert"
erfolgen.
Hier würde zuerst eine Liste mit drei Personen
erstellt. In der repeat
-Schleife wird das aktuelle Element in der Variablen Person
gespeichert und die Schleife dann so oft durchlaufen, wie die Liste über Einträge verfügt. Mit display dialog
würden nacheinander alle drei Personen angesprochen.
Um die Einträge einer Liste nacheinander abzuarbeiten – dieses Verfahren wird auch Iteration genannt –, mag diese Form ausreichen. In einigen Skripten werden Sie aber neben einzelnen Elementen auch die Zahl der Wiederholungen benötigen. In diesem Fall können Sie mit der Anweisung count items
die Elemente einer Liste zählen und die Elemente dann direkt ansprechen. Das Beispiel hätte nun folgenden Aufbau:
set Personen to {"Hans", "Martin", "Theo"} repeat with Durchlauf from 1 to (count items in Personen) display dialog "Hallo " & item Durchlauf in Personen end repeat
„repeat until“
Mit repeat until
würde die Schleife so oft ausgeführt, bis der Wert der Variablen der Vorgabe entspricht.
Dabei würde die Variable Durchlauf
wieder die Wiederholung als Zahl enthalten. Die in Klammern angegebene Anweisung count items in Personen
zählt die Elemente in der Liste. Da die Anweisung in Klammern steht, wird sie in dieser Zeile als Erstes ausgeführt. Die eigentliche repeat
-Schleife würde repeat with Durchlauf from 1 to 3
lauten. Die Variable Durchlauf
wird dann verwendet, um über item
das erste, das zweite und schließlich das dritte Element der Liste Personen
auszulesen.
Fehler abfangen und produzieren
Möglicherweise gibt es bestimmte Situationen, etwa bei einem nicht erreichbaren Server, in denen Sie Ihr Skript in jedem Fall abbrechen möchten. Einen Fehler erzeugen Sie mutwillig mit dem Befehl error
, dem Sie in Anführungszeichen eine Meldung übergeben können.

Fehler abfangen
Weitaus häufiger gibt es jedoch Situationen, in denen Sie einen Fehler abfangen und das Skript dennoch fortsetzen möchten. Dies erreichen Sie, indem Sie die kritischen Befehle mit try
und end try
in einem Block zusammenfassen. Die dazwischenstehenden Befehle würde AppleScript versuchen auszuführen, im Falle eines Fehlers jedoch mit dem Skript ohne Fehlermeldung fortfahren. Wenn bei einem Fehler andere Befehle ausgeführt werden sollen, können Sie den Block mit der Anweisung on error
erweitern. In diesem Fall würden die nach on error
folgenden Zeilen bei einem Fehler ausgeführt. In dem Skript
tell application "Finder" try empty trash on error display dialog "Papierkorb konnte nicht geleert werden!" end try end tell
würde der Finder zunächst versuchen, den Papierkorb zu leeren. Sollte dies nicht möglich sein, erhielten Sie eine Meldung, die jedoch durch das Skript veranlasst würde.
Mit Dateien arbeiten
Die bisherigen Beispiele waren eher praxisfern und hatten die Aufgabe, Ihnen die grundlegenden Konzepte von AppleScript und die Funktionsweise der einzelnen Befehle zu erläutern. Mit zwei umfangreicheren Beispielen werden die Fähigkeiten und Vorzüge von AppleScript deutlich.
Ordner mit Server abgleichen
Das erste Beispiel hat die Aufgabe, Dateien eines Ordners auf einen Server zu kopieren. Das Skript soll folgende Funktionen bieten:
- Der Anwender kann den Ordner auswählen, der auf den Server kopiert wird. Im Skript werden die Adresse des Servers sowie der Name der Freigabe fest eingebunden.
- Es wird geprüft, ob auf dem Server schon ein gleichnamiger Ordner existiert.
- Wenn der Ordner nicht existiert, dann wird er erstellt.
- Auf den Server werden die Dateien des lokalen Ordners kopiert, wobei bereits existierende Dateien auf dem Server überschrieben werden.
- Die Verbindung zum Server wird nach dem Kopiervorgang beendet.
Eine Schwierigkeit bei diesem Skript liegt darin, dass hier mehrfach zwischen verschiedenen Typen von Variablen gewechselt werden muss. Die eigentliche Hürde besteht in der Integration der Erweiterung SYSTEM EVENTS, die für das Auslesen des Ordnerinhalts zuständig ist.
„choose URL“
Eine Alternative zur festen Vorgabe des Servers könnte der Befehl choose URL
darstellen. Diesen können Sie über den Parameter showing {File servers}
anweisen, alle über Bonjour gefundenen Server anzuzeigen.
Ordner auswählen
Den zu kopierenden Ordner wählen Sie mit dem bereits bekannten Befehl choose folder
aus.
Freigabe aktivieren
Zur Aktivierung des freigegebenen Ordners auf dem Server wird der Befehl mount volume
verwendet. Dieser kann auf zwei Arten benutzt werden: Zunächst können Sie einen URL in der Form afp://Server/Freigabe
(siehe Abschnitt 18.2) angeben. Der Aufruf würde dann mount volume "afp://Server/Freigabe"
lauten. Alternativ geben Sie nur den Namen der Freigabe an. Anschließend übergeben Sie die Adresse des Servers mit dem Parameter on server
. Sollte die Freigabe eine Authentifizierung erfordern, können Sie mit as user name
einen Benutzernamen übergeben. Darüber hinaus wäre es auch möglich, mit der Angabe with password
das zu verwendende Kennwort im Skript selbst zu speichern. Hier wäre allerdings die Speicherung des Kennworts im Schlüsselbund (siehe Abschnitt 10.1) oft die bessere, weil sichere Lösung. Ein vollständiger Aufruf könnte also mount volume "Freigabe" on server "Adresse" as user name "Benutzer" with password "Geheim"
lauten.
In diesem Skript wird auf die Vorgabe des Kennworts verzichtet, stattdessen soll der Anwender das Kennwort selbst eingeben, und bei Bedarf kann er es im Schlüsselbund speichern. Sowohl der Name der Freigabe (Backups
) als auch des Servers (miniserver.local
) werden vorgegeben. Der somit eingebundene Server wird in einer Variablen gespeichert, die jedoch zunächst vom Typ file
ist. Sie wird in einer weiteren Zeile dann in ein Alias umgewandelt.
Der Beginn des Skripts hat folgenden Aufbau:
tell application "Finder" set Quellordner to choose folder set Zielserver to mount volume "Backups" on server "miniserver.local" as user name "andreas" set Zielserver to Zielserver as alias
Die Verbindung zum Server wurde hergestellt, und er kann im Skript über die Variable Zielserver
angesprochen werden.
Ordner erstellen
Der nächste Schritt besteht darin, den Ordner auf dem Server zu erstellen, sofern er noch nicht existiert. Dies geschieht mit folgenden Zeilen:
set Ordnername to name of Quellordner set Zielordner to (Zielserver as string) & Ordnername if exists Zielordner then set Zielordner to Zielordner as alias else set Zielordner to make new folder at Zielserver with properties {name: Ordnername} end if
Listing 26.2: Ordner mit Server abgleichen.scpt (Fortsetzung)
Es existiert nun auf dem Zielserver in jedem Fall ein Ordner mit dem gleichen Namen wie der vom Anwender ausgewählte lokale Ordner. Die Zusammensetzung der Variablen Zielordner
im zweiten Schritt erfolgt bewusst als Zeichenkette und nicht als Alias. Zu diesem Zeitpunkt ist nicht sichergestellt, dass der Ordner auch wirklich existiert. Die Existenz des referenzierten Objekts jedoch ist Bedingung für die Erstellung eines Objekts vom Typ Alias.
„with properties“
Bei vielen Objekten können Sie bei der Erstellung über die Angabe with properties
auch gleich die Eigenschaften in Form eines Datensatzes definieren. Der erstellte Ordner wurde gleich über die Eigenschaft name: Ordnername
umbenannt.
Inhalt des Ordners auslesen
Es existieren nun der Ausgangs- und der Zielordner. Jetzt sollen die Dateien aus dem vom Anwender ausgewählten Ordner ermittelt werden. Hier ergibt sich zunächst das Problem, dass der Finder nicht in der Lage ist, eine Liste aller in einem Ordner enthaltenen Dateien auszugeben. Dies wird von der Erweiterung SYSTEM EVENTS übernommen, die wie ein Programm angesprochen werden muss.
Die Anweisung an das Programm SYSTEM EVENTS erfolgt hier innerhalb eines eigenen tell
-Blocks. Die Anweisung lautet:
tell application "System Events" set Dateien to path of files of Quellordner end tell
Listing 26.3: Ordner mit Server abgleichen.scpt (Fortsetzung)
In der Liste Dateien
, die auch außerhalb dieses tell
-Blocks verfügbar ist, finden Sie nun die absoluten Pfade aller Dateien, die im Quellordner
enthalten sind. Verzeichnisse werden hier ausgeschlossen. Diese Liste können Sie nun mit einer repeat
-Schleife durchlaufen und dabei die Dateien kopieren.
System Events
Die Arbeit mit den in der DISK-FOLDER-FILE SUITE verfügbaren Informationen erleichtert den Umgang mit Dateien und Ordnern ungemein. Sie könnten mit set Elemente to path of items of Quellordner
die Pfadangaben aller Elemente unabhängig vom Typ ermitteln. Der Aufruf set Ordner to name of folders of Quellordner
liest die Namen aller Ordner aus.

Bei dem mit dem Befehl duplicate
durchzuführenden Kopiervorgang kann ein Problem auftreten, das schlichtweg nicht einsichtig ist: Es handelt sich um unsichtbare Dateien, deren Name mit einem Punkt beginnt. Diese können beim Kopiervorgang zu einer nichtssagenden Fehlermeldung führen. Dementsprechend sollen Dateien, deren Name mit einem Punkt beginnt, nicht kopiert werden. Dazu müssen Sie innerhalb der repeat
-Schleife den Namen einer Datei in Erfahrung bringen. Auch hier werden die Fähigkeiten des Programms SYSTEM EVENTS genutzt. Die Schleife hat folgenden Aufbau:

repeat with Durchlauf from 1 to (count items in Dateien) tell application "System Events" set Dateiname to name of file (item Durchlauf in Dateien) end tell if Dateiname begins with "." then -- Hier passiert nichts else duplicate item Durchlauf in Dateien to Zielordner with replacing end if end repeat
Listing 26.4: Ordner mit Server abgleichen.scpt (Fortsetzung)
Warnung
Die Angabe with replacing
überschreibt schon vorhandene Dateien im Zielordner ohne Rückfrage!
Zunächst wird eine Schleife begonnen, deren Wiederholungen durch die Anzahl der Einträge in der Liste Dateien
bestimmt werden. Im zweiten Schritt wird das Programm SYSTEM EVENTS angewiesen, den Dateinamen des aktuellen Eintrags auszulesen und in der Variablen Dateiname
zu speichern. Darauf folgt eine Abfrage, ob der Dateiname mit einem Punkt beginnt. Wenn dies der Fall ist, dann geschieht nichts. Andernfalls wird die Datei mit der Anweisung duplicate
an den Finder in den Zielordner
kopiert.
Server trennen
Ein Server wird im Finder wie ein Wechselmedium mittels eject
ausgeworfen. Indes reagiert eject
auf den Namen des auszuwerfenden Mediums, und der Name der Freigabe steht im Skript noch nicht als Variable zur Verfügung. Dies kann aber durch eine Angabe in Klammern geschehen, und mit eject (name of Zielserver)
würde in Klammern der Name der Freigabe ermittelt und an eject
zum Auswurf oder in diesem Fall zur Trennung übergeben. Die letzten beiden Zeilen des Skripts lauten dementsprechend:
eject (name of Zielserver) end tell
Listing 26.5: Ordner mit Server abgleichen.scpt (Schluss)
Die Anweisung end tell
ist notwendig, da ganz zu Beginn des Skripts ein tell
-Block, der sich an den Finder richtet, begonnen wurde.
Bilder aus iPhoto exportieren
Das zweite Beispiel hat die Aufgabe, die in iPhoto ausgewählten Bilder zu exportieren. Dabei prüft das Skript zunächst, ob überhaupt Bilder selektiert wurden. Wenn dies der Fall ist, werden die Bilddateien in einen vom Anwender auszuwählenden Ordner kopiert. Der Vorteil des Skripts gegenüber der Funktion ABLAGE • EXPORTIEREN besteht darin, dass gleich die ursprüngliche Bilddatei exportiert wird und ein Dialog umgangen werden kann.

Auswahl ermitteln
Bei der Erstellung des Skripts gilt es zuerst zu beachten, dass der Wert der Auswahl (selection
) im Skript auch einem Album entsprechen kann. Hat der Anwender in iPhoto keine Bilder ausgewählt, dann enthält selection
den Verweis auf ein Album. Es gilt also zunächst zu prüfen, von welchem Typ das erste Element der mittels selection
auszulesenden Liste ist. Der Grundaufbau des Skripts sieht dafür folgendermaßen aus:
tell application "iPhoto" set Auswahl to selection if class of item 1 in Auswahl is album then display alert "Bitte Bilder auswählen" buttons {"OK"} else if class of item 1 of Auswahl is photo then -- Hier folgen die eigentlichen Anweisungen end if end tell
Interne Datentypen
Diese Form der Überprüfung des Datentyps mithilfe von class of
ist in diesem Beispiel möglich, weil das Programm iPhoto angesprochen wird. Es stellt ja eigene Datentypen über seine AppleScript-Bibliothek zur Verfügung, die die in AppleScript vorhandenen ergänzen.
Zuerst wird die aktuelle Auswahl in dem Programm in die Variable Auswahl
geschrieben. Anschließend wird mithilfe von class of
geprüft, welchem Datentyp das erste Element in der Liste entspricht. Handelt es sich um ein Album, dann hat der Anwender keine Bilder ausgewählt, und das Skript weist auf die benötigte Auswahl hin. Wurden Bilder ausgewählt, sollen die Zeilen ausgeführt werden, an deren Stelle zunächst ein Kommentar als Platzhalter steht.
Eigenschaften eines Bildes
In Abbildung 26.34 sehen Sie die Eigenschaften eines photo
-Objekts in iPhoto, die mit dem Befehl get properties
ausgelesen wurden. Sie finden dort neben den Größenangaben (height
, width
und dimensions
), dem Namen und etwaigen Kommentaren in der Eigenschaft image path
auch die Pfadangabe zur eigentlichen Bilddatei in Ihrem Ordner BILDER. Diese Eigenschaft gilt es auszulesen.

Pfadangabe konvertieren
Hier ergibt sich jedoch das Problem, dass die Pfadangabe in einer für AppleScript nicht verständlichen Form angegeben wird. Eine Pfadangabe in der Form /Users/Andreas/Pictures/...
funktioniert zwar am Terminal, wird von AppleScript jedoch nicht verstanden. In AppleScript gilt weitgehend durchgängig für die Arbeit mit einer Datei die Notwendigkeit, mit der Notation mit Doppelpunkten in der Form :Users:Andreas:Pictures:...
zu arbeiten. Die Pfadangabe muss also in eine für AppleScript verständliche Weise umgewandelt werden.
„POSIX path of“
Die umgekehrte Methode, wie Sie eine Angabe vom Typ alias
in der Form :Users:Andreas:
umwandeln, wird in Abschnitt 26.9 mit dem Befehl Posix path of
besprochen.
Auch in diesem Zusammenhang leistet die Erweiterung SYSTEM EVENTS gute Dienste. Sie ist in der Lage, eine Pfadangabe von der POSIX-Form in eine AppleScript-konforme Angabe umzuwandeln. Diese Konvertierung wird an passender Stelle eingeschoben. Das endgültige Skript hat dann folgenden Aufbau:
tell application "iPhoto" set Auswahl to selection if class of item 1 in Auswahl is album then display alert "Bitte Bilder auswählen" buttons {"OK"} else if class of item 1 of Auswahl is photo then set Zielordner to choose folder repeat with Bild in Auswahl set Pfad to image path of Bild tell application "System Events" set Dateiobjekt to path of file Pfad end tell tell application "Finder" duplicate Dateiobjekt to Zielordner end tell end repeat end if end tell
Listing 26.6: iPhoto-Export.scpt
„path of file“
SYSTEM EVENTS ist in der Lage, bei der Angabe eines Dateiobjekts mittels file
recht flexibel zu agieren. Die Variable Pfad
ist zunächst lediglich eine Zeichenkette. SYSTEM EVENTS kann Objekte im Dateisystem auch über eine einfache Zeichenkette identifizieren.
In dem fertigen Skript wird wie in der Rohfassung geprüft, ob es sich bei dem ersten Element der Auswahl um ein Bild handelt. Wenn dies der Fall ist, wird der Anwender nach einem Ordner gefragt. Dann wird mittels repeat
eine Schleife begonnen, die die in Auswahl
enthaltenen Bilder nacheinander abarbeitet. In dieser Schleife wird zuerst die Eigenschaft image path
des aktuellen Bildes in der Variablen Pfad
gespeichert. Diese hat zunächst die Form /Users/Andreas/Pictures/...
Daraufhin wird die Erweiterung SYSTEM EVENTS angesprochen und mit der Anweisung path of file pfad
die für AppleScript verständliche Form der Pfadangabe in die Variable Dateiobjekt
geschrieben. Der Kopiervorgang über den Finder erfolgt in der schon bekannten Form.
Bilder bearbeiten mit Image Events
Die Erweiterung IMAGE EVENTS ermöglicht Ihnen die Bearbeitung und Konvertierung von Bilddateien direkt aus AppleScript heraus. Die IMAGE EVENTS ersetzen natürlich kein Programm zur Bildbearbeitung, aber wenn Sie eine große Anzahl von Bildern verkleinern oder in ein anderes Dateiformat konvertieren müssen, stellen sie eine schnelle und auch effiziente Lösung dar.
„open“
Um mit Bilddateien im Rahmen der IMAGE EVENTS zu arbeiten, müssen Sie diese explizit mit dem Befehl open
öffnen. Dies mag auf den ersten Blick nicht einsichtig sein, weil die IMAGE EVENTS über keine grafische Oberfläche verfügen. Allerdings ist es nur so möglich, ein Objekt zu erzeugen, dessen Eigenschaften Sie dann mit dem Befehl set
manipulieren können.
SIPS
Die technische Grundlage der IMAGE EVENTS stellt das Scriptable Image Processing System bereit. Am Terminal können Sie bis zu einem gewissen Grad auf die Funktionen der IMAGE EVENTS mit dem Befehl sips
zugreifen.
Bilder konvertieren
Um Bilder in einem anderen Format zu speichern, müssen Sie den Befehl save
verwenden und das Dateiformat mit dem Schlüsselwort as
vorgeben. Das folgende Skript öffnet eine Datei, fragt nach dem Namen der neuen Datei und nimmt anschließend die Konvertierung vor.
set Quelldatei to choose file set Zieldatei to choose file name default name ".tif" tell application "Image Events" set Bild to open Quelldatei save Bild as TIFF in (Zieldatei as string) end tell
„choose file name“
Mit dem Befehl choose file name
lassen Sie den Anwender einen Dateinamen eingeben. Sie erhalten dann eine Variable vom Typ file
, die auf ein noch nicht existierendes Objekt im Dateisystem weist.
In dem Skript wird mit der Zeile set Bild to open Quelldatei
ein neues Objekt erzeugt, das auf der vom Anwender ausgewählten Datei beruht. Mit save
wird dieses Objekt dann in der Zieldatei
gespeichert. Dabei muss, da die Datei ja noch nicht existiert, ihr Name als Zeichenkette (as string
) angegeben werden. Durch die Angabe as TIFF
wird das Format vorgegeben, in dem die neue Datei gespeichert wird.
Weitere Dateiformate
Die IMAGE EVENTS können Dateien in den Formaten speichern, die auch von OS X Mavericks unterstützt werden. In der Funktionsbibliothek der IMAGE EVENTS finden Sie in der IMAGE SUITE im Eintrag SAVE die passenden Kürzel wie JPEG oder PICT.

Die Befehle choose file
und choose file name
wurden in diesem Skript bewusst nicht innerhalb des tell
-Blocks platziert. Anders als der Finder oder die Erweiterung SYSTEM EVENTS sind die IMAGE EVENTS nicht in der Lage, mit dem Benutzer zu interagieren. Stünden die Befehle innerhalb des tell
-Blocks, erhielten Sie die Fehlermeldung aus Abbildung 26.35.
Bilder manipulieren
Mit der Bibliothek IMAGE EVENTS können Sie Bilder verkleinern, beschneiden, spiegeln und drehen. Bei allen vier Methoden müssen Sie zuvor ein Bildobjekt mit dem Befehl open
wie im vorangegangenen Beispiel erzeugen. Auf ein solches Objekt können Sie dann unter anderem folgende Befehle anwenden:
- crop: Das Bild wird auf die angegebene Dimension beschnitten.
- flip: Das Bild wird horizontal oder vertikal gespiegelt.
- pad: Das Bild wird auf die angegebenen Maße vergrößert, wobei ein Rahmen eingefügt wird.
- rotate: Das Bild wird um den anzugebenden Winkel gedreht.
- scale: Das Bild wird auf die angegebenen Maße vergrößert oder verkleinert.
Farbprofile
Über die Befehle embed
und unembed
, gefolgt von der Dateiangabe für ein Profil, können Sie Farbprofile in die Bilder einbetten und bereits eingebettete wieder herausnehmen.
Der gebräuchlichste Befehl ist vielleicht scale
, da bei der Vergrößerung oder Verkleinerung auch die Proportionen beachtet werden. Das vorangegangene Beispiel lässt sich zur Erstellung von kleinen Vorschaubildern, wie sie in vielen Galerien im Internet zu finden sind, leicht umschreiben.
set Quelldatei to choose file set Zieldatei to choose file name default name ".jpg" tell application "Image Events" set Bild to open Quelldatei scale Bild to size 150 save Bild as JPEG in (Zieldatei as string) end tell
Bilder spiegeln
Ein Bildobjekt spiegeln Sie mit der Anweisung flip Bild horizontal true vertical true
. Lassen Sie die Anweisung horizontal true
weg, wird es nur vertikal gespiegelt – und umgekehrt.
Mit diesem Script würde die Bilddatei als JPG gespeichert und auf eine maximale Höhe oder Breite von 150 Pixeln verkleinert. Sie können anstelle der Angabe to size
auch einen Faktor mit by factor
angeben. Die Anweisung scale Bild by factor 0.5
würde das Bild auf die Hälfte seiner Dimensionen verkleinern, während es mit by factor 2
doppelt so groß würde.
Bilder drehen
Mit der Anweisung rotate Bild to angle 90
drehen Sie das Bild um 90 Grad.
Skripten in Funktionen unterteilen
Die Unterteilung von Skripten in Funktionen kann bei umfangreichen Skripten eine enorme Arbeitserleichterung darstellen. Eine Funktion hat in AppleScript die Aufgabe, Befehle zu bündeln und gemeinsam auszuführen. Diese werden bisweilen auch als Handler bezeichnet, was insbesondere im Zusammenhang mit den Ordneraktionen (siehe Abschnitt 26.9) wichtig ist.
Hinweis
Achten Sie bei den Namen der Variablen darauf, dass Sie sie innerhalb der Funktion mit den Namen ansprechen, die Sie in Klammern bei der on
-Anweisung angegeben haben. In diesem Beispiel würde die Anweisung duplicate Eine_Datei to home
nicht funktionieren.
Funktion deklarieren
Eine Funktion deklarieren Sie mit dem Schlüsselwort on
, gefolgt vom Namen der Funktion. In Klammern können Sie Variablen, die der Funktion übergeben werden sollen, aufführen. Das mag komplizierter klingen, als es eigentlich ist. Mit den Zeilen
on Kopieren (Datei) tell application "Finder" duplicate Datei to home end tell end Kopieren
wird eine Funktion Kopieren
mit on
erstellt. Gäben Sie das Skript in dieser Fassung ein und führten Sie es aus, würde nichts geschehen, weil die Funktion nicht aufgerufen wird. Ergänzen Sie das Skript am Ende um die Zeilen
set Eine_Datei to choose file Kopieren(Eine_Datei)

dann würde das Skript zuerst nach einer Datei fragen. Danach wird die erstellte Funktion Kopieren
aufgerufen und dieser in Klammern Eine_Datei
als Parameter übergeben. Innerhalb der Funktion steht der Wert von Eine_Datei
in der Variablen Datei
zur Verfügung, die dann über den Finder in das persönliche Verzeichnis des Benutzers kopiert wird.
Mehrere Parameter
Es ist auch möglich, einer Funktion mehrere Variablen durch Kommata getrennt zu übergeben. In dem Skript
on Kopieren (Datei, Ordner) tell application "Finder" duplicate Datei to Ordner end tell end Kopieren set Eine_Datei to choose file set Ein_Ordner to choose folder Kopieren(Eine_Datei, Ein_Ordner)
werden der Funktion Kopieren
zwei Parameter übergeben. Achten Sie dabei auf die Reihenfolge. Der Aufruf Kopieren(Ein_Ordner, Eine_Datei)
führt zu einer Fehlermeldung, weil Sie einen Ordner in eine Datei zu kopieren versuchen. Der Wert der Variablen Datei
in der Funktion entspräche aufgrund der Reihenfolge dem Wert von Ein_Ordner
.
Integration ins System
Zu einer wirklichen Arbeitserleichterung werden Ihre Skripten dann, wenn Sie sie an den richtigen Stellen im System platzieren. OS X Mavericks bietet Ihnen einige Möglichkeiten, schnell und im richtigen Kontext auf Ihre Skripten zuzugreifen und diese zum Teil auch automatisch auszuführen.

Das Skriptmenü
In den Voreinstellungen des AppleScript-Editors finden Sie in der Ansicht ALLGEMEIN die Option SKRIPTMENÜ IN DER MENÜLEISTE ANZEIGEN. Wenn Sie diese Option aktiviert haben, dann erscheint oben rechts in der Menüleiste ein Eintrag mit einem AppleScript-Symbol. Klappen Sie diesen aus, stehen Ihnen einige Beispiel-Skripten von Apple zur Verfügung. Wenn Sie die Option COMPUTERSKRIPTS EINBLENDEN deaktivieren, dann werden diese Skripten nicht mehr angezeigt. Die im Skriptmenü enthaltenen Skripten setzen sich aus dem Inhalt der Ordner /LIBRARY/SCRIPTS und ~/LIBRARY/SCRIPTS zusammen. Über den Eintrag OPEN SCRIPTS FOLDER können Sie beide Ordner direkt im Finder aufrufen.

Programmskripts
Das Skriptmenü ist in der Lage, Skripten nur dann zur Verfügung zu stellen, wenn das betreffende Programm sich im Vordergrund befindet. Wenn Sie zum Beispiel iPhoto in den Vordergrund holen, dann finden Sie im Menü OPEN SCRIPTS FOLDER den Eintrag OPEN IPHOTO SCRIPTS FOLDER. Über diesen Eintrag wird das Verzeichnis ~/LIBRARY/SCRIPTS/APPLICATIONS/IPHOTO geöffnet. Wenn das Verzeichnis noch nicht existiert, wird es beim ersten Aufruf erstellt.

Die in diesem Ordner abgespeicherten Skripten werden im Bereich IPHOTO SKRIPTS angezeigt, wenn sich iPhoto im Vordergrund befindet.
Ordneraktionen
Ordneraktionen werden dann ausgeführt, wenn der Ordner sich ändert. Sie können so mit Ordneraktionen auf Änderungen in einem Verzeichnis, die zum Beispiel im Hinzufügen oder Entfernen einer Datei bestehen können, automatisch reagieren.

Wenn Sie im Finder das Kontextmenü eines Ordners aufrufen, dann enthält dieses auch den Eintrag ORDNERAKTIONEN KONFIGURIEREN. Mit diesem Eintrag wird das gleichnamige Programm aus dem Verzeichnis /SYSTEM/LIBRARY/CORE SERVICES gestartet. Sie können das Programm auch direkt aus dem Verzeichnis starten. Haben Sie das Programm über das Kontextmenü aufgerufen, dann erscheint eine Liste mit den im Verzeichnis /LIBRARY/SCRIPTS/FOLDER ACTION SCRIPTS verfügbaren Skripten. Sie können eines dieser Skripten auswählen und an den zuvor angeklickten Ordner ANHÄNGEN oder mit ABBRECHEN die Ordneraktionen verwalten.
Ordneraktionen konfigurieren
Der erste Schritt besteht darin, dass Sie die ORDNERAKTIONEN AKTIVIEREN. Möglicherweise wurde dies bereits durch den Automator vorgenommen. Mit dem Pluszeichen unterhalb der linken Spalte fügen Sie einen Ordner, an den eine Aktion angehängt wird, hinzu. Wählen Sie einen Ordner aus, dann erscheinen in der rechten Spalte die Skripten, die als Aktionen angehängt wurden. Über das Pluszeichen unterhalb der rechten Spalte hängen Sie ein Skript an den ausgewählten Ordner an. In der daraufhin erscheinenden Liste stehen Ihnen die in den Verzeichnissen /LIBRARY/SCRIPTS/FOLDER ACTION SCRIPTS und ~/LIBRARY/SCRIPTS/FOLDER ACTION SCRIPTS gespeicherten Skripten zur Auswahl. Das zweite Verzeichnis müssen Sie gegebenenfalls anlegen.

Haben Sie ein eigenes Skript erstellt, dann sollten Sie es im zweiten Ordner speichern, um es als Ordneraktion nutzen zu können. Mit den Minuszeichen können Sie entweder einen Ordner von allen Aktionen wieder ausnehmen oder aber das ausgewählte Skript vom Ordner abhängen.
Bei den Ordneraktionen spielen die in Abschnitt 26.8 erläuterten Funktionen, die hier als Handler von Ereignissen fungieren, eine entscheidende Rolle. Es gibt fünf vorgegebene Aktionen, die ausgeführt werden, wenn das entsprechende Ereignis eintritt:
opening folder Ordner
:
Wird ausgeführt, wenn der Ordner in einem Fenster im Finder geöffnet wird, wobeiOrdner
den Pfad des geöffneten Ordners enthält.closing folder window for Ordner
: Beim Schließen des geöffneten Fensters wird diese Aktion ausgeführt, wobeiOrdner
wieder den Pfad des Ordners enthält.moving folder window for Ordner:
Reagiert auf das Bewegen oder die Änderung der Größe des Fensters.adding folder items to Ordner after receiving Dateien
: Werden neue Dateien oder Verzeichnisse demOrdner
hinzugefügt, dann werden diese Befehle ausgeführt. Die neuen Dateien und Ordner sind in der ListeDateien
enthalten.removing folder items from Ordner after losing Dateien
: Wird ausgeführt, wenn Dateien oder Ordner entfernt werden. Auch hier stehen die Objekte in der VariablenDateien
als Liste zur Verfügung.
Hinweis
Wird ein Skript als Ordneraktion ausgeführt, dann werden Fehlermeldungen anders als im Skripteditor nicht ausgegeben. Lediglich der Bildschirm blitzt kurz auf. Auch müssen Sie für einen Dialog mit display dialog
diesen über tell application "Finder"
ausgeben.
Während sich die ersten drei Aktionen in erster Linie zur Manipulation von Fenstern im Finder eignen, stellen die letzten beiden Aktionen eine sehr leistungsfähige Möglichkeit dar, auf Änderungen im Dateisystem zu reagieren. In einem Beispiel sollen MP3-Dateien, die einem Ordner hinzugefügt werden, automatisch auch in iTunes geöffnet werden. Das Skript, das Sie im Verzeichnis ~/LIBRARY/SCRITPS/FOLDER ACTION SCRIPTS speichern können, hat folgenden Aufbau:
on adding folder items to Ordner after receiving Dateien repeat with Datei in Dateien tell application "System Events" set Suffix to name extension of Datei end tell if Suffix is "mp3" then tell application "iTunes" add Datei end tell end if end repeat end adding folder items to
Hinweis
Achten Sie bei den Funktionen für Ordneraktionen darauf, dass Sie sie korrekt mit ihrem Namen abschließen. Die Endung end adding folder items to
mag dem Sprachempfinden zwar intuitiv widersprechen, ist aber hier notwendig.
Der Aufbau des Skripts ist eigentlich recht einfach. Zunächst wird die Ordneraktion mit on adding ...
eingeleitet, wobei das in der Variablen Ordner
gespeicherte Verzeichnis in diesem Skript keine Verwendung findet. Dann wird die Liste der Dateien mittels repeat
abgearbeitet.
Um zu vermeiden, dass Dateien an iTunes übergeben werden, die dieses Programm nicht öffnen soll, wird zunächst über SYSTEM EVENTS die Dateiendung ermittelt und in der Variablen Suffix
gespeichert. Sofern das Suffix mp3 lautet, wird iTunes angewiesen, die Datei zu öffnen, andernfalls geschieht nichts. Das Skript können Sie zum Beispiel an Ihren Ordner DOWNLOADS anhängen und so aus dem Internet geladene MP3-Dateien automatisch in Ihre iTunes-Bibliothek importieren.
Vorschau?
Die Bearbeitung einer PDF-Datei im Programm Vorschau ist zwar naheliegend, aber auch unter OS X Mavericks bietet die Vorschau gar keine Unterstützung für AppleScript.
Skripten im Druckmenü
Um eine PDF-Datei aus dem Druckdialog direkt mit einem AppleScript weiterzuverarbeiten, können Sie sie im Ordner PDF SERVICES in der Library speichern. Das AppleScript muss dazu über eine Funktion on open
, gefolgt von einer Variablen, verfügen. Das folgende Skript gibt im Finder lediglich den Pfad der vom Drucksystem erzeugten PDF-Datei in einem Dialog aus.
on open Datei tell application "Finder" display dialog (Datei as string) end tell end open
Hinweis
Unter OS X Mavericks startet bei der Ausführung eines solchen Skripts ein eigenes Programm, das im Dock mit dem Icon eines Ordners erscheint. In einigen Fällen beendet sich dieses Programm nicht selbstständig und muss zwangsweise geschlossen werden.


Mit der PDF-Datei, die über die Variable Datei
zugänglich ist, können Sie dann im Skript beliebig weiterverfahren. Beachten Sie, dass die Datei zunächst in einem Ordner unter /VAR/FOLDERS gespeichert wird und Sie sie gegebenenfalls noch an eine andere Stelle verschieben müssen.
AppleScript im Automator
Der Automator ist in der Lage, AppleScript in seine Arbeitsabläufe zu integrieren. Sie können so Lücken in der Funktionalität des Automators mit AppleScript füllen. Um ein AppleScript innerhalb eines Arbeitsablaufs auszuführen, steht Ihnen die Aktion APPLESCRIPT AUSFÜHREN aus der Sammlung AUTOMATOR zur Verfügung.

Ergebnisse und Funktionen
Fügen Sie die Aktion einem Arbeitsablauf hinzu, dann finden Sie dort automatisch eine Funktion on run
, der vom Automator zwei Variablen, input
und parameters
, übergeben werden. Die Funktion wird ausgeführt, und über die Variable input
stehen Ihnen die Ergebnisse der vorangegangenen Aktion zur Verfügung.
In diesem Zusammenhang ist auch die dritte Ansicht der ERGEBNISSE einer Aktion von Relevanz (siehe Abbildung 26.45). Sie können hier sehen, in welcher für AppleScript relevanten Form die Ergebnisse übergeben werden. In Abbildung 26.44 wurden drei Dateien im Finder ausgewählt, an das AppleScript wird also eine Liste mit drei alias
-Variablen übergeben.
Werte zurückgeben
Der abschließende Befehl return input
führt dazu, dass das integrierte Skript einen Wert zurückgibt, der von der folgenden Aktion übernommen werden kann. Sie können anstelle der Variablen input
auch eine andere Variable mit return
an die nächste Aktion übergeben.

An der Stelle des Kommentars (* Your script goes here *)
können Sie Ihre eigenen Befehle einfügen. In dem Skript
on run {input, paramters} set Ergebnis to "" repeat with Datei in input tell application "System Events" set Dateiname to name of Datei set Erstellung to creation date of Datei set Ergebnis to Ergebnis & Dateiname & " " & Erstellung & " " end tell end repeat return Ergebnis end run
wird zuerst eine leere Variable Ergebnis
erzeugt. Dann wird in der repeat
-Schleife die in input
enthaltene Liste der ausgewählten Objekte im Finder abgearbeitet. Über die SYSTEM EVENTS werden Name und Erstellungsdatum der Datei ermittelt und diese dann an die zuvor leere Variable Ergebnis
angehängt. Nachdem die Schleife durchlaufen wurde, wird über den Befehl return Ergebnis
der zusammengesetzte Text an die folgende Aktion übergeben. Hier könnten Sie zum Beispiel die Aktion NEUES TEXTEDIT-DOKUMENT einfügen und so die Ergebnisse in einer Textdatei speichern.
Zeilenumbruch
Sie können bei einer Zeichenkette auch innerhalb der Anführungszeichen einen Zeilenumbruch einfügen. Dieser wird von AppleScript dann beachtet. Aus diesem Grund sind die Einträge in Abbildung 26.46 untereinander angeordnet.

Zugriff auf die Shell
AppleScript ist auch in der Lage, auf die Shell zuzugreifen und die Programme, die Sie sonst über das Terminal starten, auszuführen und Ihnen die Ergebnisse in einem Skript zur Verfügung zu stellen. Dazu dient der Befehl do shell script
. Diesem müssen Sie einen Text übergeben, der der Eingabe vom Terminal entspricht.
Eine mögliche Anwendung dafür ist die Arbeit mit dem Befehl chflags
(siehe Anhang A.2). Die Aufgabe des Skripts besteht darin, dass der Anwender zunächst einen Ordner auswählen kann und dann der Befehl chflags
auf den Ordner angewandt wird. Auf diese Weise können Sie Ordner schnell verstecken, ohne dass Sie extra das Terminal starten müssen. Das AppleScript besteht nur aus vier Zeilen:
„POSIX path“
Bei der Arbeit mit do shell script
ist die Eigenschaft POSIX path
wichtig. AppleScript verwendet bei Dateien und Ordnern mehrheitlich Pfadangaben in der Form :Users:Andreas
, während Sie bei der Arbeit mit der Shell zwingend auf die POSIX-Variante in der Form /Users/Andreas
angewiesen sind.

set Ordner to choose folder set Ordner to POSIX path of Ordner set Befehl to "chflags hidden " & Ordner do shell script Befehl
Der hier am Ende an die Shell übergebene Befehl lautet, abhängig vom ausgewählten Ordner, dann chflags hidden /Pfad/zum/Ordner
. Die Ausführung des Skripts würde der direkten Eingabe dieses Befehls am Terminal entsprechen.
Leerzeichen
Bei der Erstellung des mit do shell script
auszuführenden Befehls müssen Sie auf die Leerzeichen achten. Würde in der dritten Zeile nach hidden
kein Leerzeichen innerhalb der Anführungszeichen folgen, dann würde eine Zeichenkette in der Form chflags hidden/Users/Andreas/Desktop/Ein_Ordner
an die Shell übergeben, was zu einer Fehlermeldung führen würde.
AppleScript und Kalender
Der Kalender bietet über die Erinnerungsfunktion auch die Möglichkeit, als Programm gespeicherte Skripten zu einem vorgegebenen Zeitpunkt auszuführen. Die in früheren Versionen von OS X vorhandene Option SKRIPT AUSFÜHREN ist unter OS X Mavericks nicht mehr vorhanden. Die von Apple bevorzugte Lösung besteht scheinbar darin, dass Sie im Automator einen Arbeitsablauf unter Verwendung der Vorlage KALENDERERINNERUNG erstellen und darin die zuvor beschriebene Aktion APPLESCRIPT AUSFÜHREN nutzen.

Alternativ können Sie Ihr Skript auch als ausführbares Programm speichern. Wenn Sie als HINWEIS die Option DATEI ÖFFNEN vorgeben, können Sie hier das Programm auswählen. Das Skript zum Kopieren von Ordnern auf einen Server (siehe Abschnitt 26.6) ließe sich auf diese Weise recht bequem regelmäßig zu einem vorgegebenen Zeitpunkt ausführen.

Mail regeln mit AppleScript
Auch Mail bietet die Möglichkeit, ein AppleScript automatisch auszuführen. In den Einstellungen von Mail können Sie für eine Regel auch die Aktion APPLESCRIPT AUSFÜHREN vorgeben. Das AppleScript wird dann ausgeführt, wenn eine E-Mail eingeht, auf die die Bedingung der Regel zutrifft. Mail stellt Ihnen in diesem Menü nur die Skripten zur Auswahl, die Sie im Ordner ~/LIBRARY/APPLICATION SCRIPTS/COM.APPLE.MAIL gespeichert haben. Sofern dieser Ordner leer ist oder noch gar nicht existiert, können Sie ihn über die gleichnamige Option IM FINDER ÖFFNEN.
Tipp
Im Verzeichnis /LIBRARY/SCRIPTS/MAIL SCRIPTS finden Sie einige von Apple zur Verfügung gestellte Beispiele, die die AppleScript-Unterstützung von Mail recht umfangreich demonstrieren.
„using terms from application“
Wenn Sie ein AppleScript erstellen, das auf eingehende E-Mails reagieren soll, dann können Sie innerhalb des AppleScripts auch auf die eingegangenen E-Mails zugreifen. Dabei müssen Sie sich bei der Erstellung des AppleScripts eines Kunstgriffs bedienen. Das AppleScript wird automatisch in Mail ausgeführt, aber bei der Erstellung des Skripts im Editor wird Mail nicht durch tell
angesprochen. Aufgrund der fehlenden tell
-Anweisung ist der Editor bei den nachfolgend beschriebenen Handlern und Befehlen nicht in der Lage zu prüfen, ob die Befehle korrekt eingegeben wurden. Mit der Anweisung using terms from application "Mail"
zu Beginn des Skripts weisen Sie den Editor an, dass für die so umschlossenen Anweisungen die von Mail zur Verfügung gestellten Objekte und Befehle gelten sollen.
Handler
Mail ermöglicht Ihnen den Zugriff auf die eingegangenen E-Mails, die die Regel erfüllen, über einen sogenannten Handler. Ähnlich wie bei den Ordneraktionen übergeben Sie der Funktion on perform mail action with messages Nachrichten
in der Liste Nachrichten
die E-Mails, die eingegangen sind und auf die die Regel zutrifft. Innerhalb des eigentlichen Skripts können Sie dann die Liste abarbeiten.

Das folgende Beispiel geht davon aus, dass Sie bei einer eingehenden E-Mail, die von Manfred Meier stammt, mit einem Dialog benachrichtigt werden möchten. Das Skript wurde einer Regel, die den Absender überprüft, als Aktion zugewiesen.
using terms from application "Mail" on perform mail action with messages Nachrichten set Anzahl to (count items in Nachrichten) repeat with Durchlauf from 1 to Anzahl set Nachricht to item Durchlauf in Nachrichten set Betreff to subject of Nachricht display dialog Betreff with title "Neue E-Mail von Manfred Meier" end repeat end perform mail action with messages end using terms from
Skripten als Programme
Skripten können Sie auch als Programme speichern, dann im Dock ablegen oder mit einem Doppelklick im Finder starten. Dabei verfügt AppleScript auch über die Fähigkeit, ein Bundle zu erzeugen. In ein solches können Sie weitere Dateien, von Icons bis hin zu Shell-Skripten, integrieren.
run-Handler
Als run-Handler wird in diesem Zusammenhang eine sonst versteckte Funktion (siehe Abschnitt 26.8) bezeichnet. Wenn Sie in Ihr Skript eine Funktion in der Form on run ... end run
einbauen, dann werden die in dieser Funktion enthaltenen Befehle nach dem Start des Skripts ausgeführt. In den eher einfach gehaltenen Beispielen in diesem Kapitel wird run-Handler auf die Befehle implizit angewandt, die sich nicht innerhalb irgendeiner Funktion befinden.

Als Programm sichern
Soll das Skript einfach nur als Programm auf einen Doppelklick hin ausgeführt werden, geben Sie als DATEIFORMAT PROGRAMM vor.

Wenn Sie den STARTDIALOG EINBLENDEN, dann werden Sie vor der Ausführung des Programms gefragt, ob es auch wirklich ausgeführt werden soll. Zusätzlich wird der Text, den Sie im Fenster des Editors unterhalb des Quelltextes als BESCHREIBUNG eingeben, angezeigt. Aktivieren Sie die Option NACH RUN-HANDLER ANZEIGEN, dann wird das Skript nach der Ausführung nicht automatisch beendet.

Bundles nutzen
Wenn Sie Ihr Skript als Programm gesichert haben, dann steht Ihnen im AppleScript-Editor die Schaltfläche BUNDLE-INHALT zur Verfügung. Diese blendet den Inhalt des Bundles ein, in dem Ihr Skript gesichert wurde.
In das Bundle können Sie weitere Elemente wie Icons oder Shell-Skripten aus dem Finder hineinziehen. Auf diese Weise können Sie weitere Dateien in Ihr Skript integrieren und darauf von Ihrem Skript aus zugreifen. In Abbildung 26.54 wurde dem Bundle eine Icon-Datei Cover.icns hinzugefügt.
ICNS-Dateien
Sie können eigene Icon-Dateien mit dem Programm Icon Composer erzeugen, sofern Sie die Graphic Tools for Xcode von http://developer.apple.com/downloads heruntergeladen haben. Im Icon Composer müssen Sie nur eine schon vorhandene Bilddatei mit dem Dateiformat PNG importieren oder über die Zwischenablage einfügen.

Inhalt des Bundles ansprechen
Um auf den Inhalt des Bundles zuzugreifen, müssen Sie den Pfad zu den integrierten Dateien, die analog zu einem regulären Programm-Bundle als Ressourcen betrachtet werden, ermitteln. Dies geschieht über die Anweisung path to resource
. So können Sie mit den Zeilen
set Bild to path to resource "ML.icns" display dialog "Hallo" with icon Bild
zuerst den Pfad zu dem Icon im Bundle herausfinden und dann im Dialog verwenden. Auf diese Weise können Sie das Programm-Bundle auch nachträglich noch verschieben oder weitergeben. Dabei bleiben die integrierten Dateien erhalten.
Bundle-ID
Wenn Sie den Bundle-Inhalt ausgeklappt haben, können Sie auch eine Kennung für Ihr Programm vergeben. Für normale Skripten können Sie es bei der Vorgabe des AppleScript-Editors belassen.

Unterordner
Sie können innerhalb des Bundles auch Unterordner erstellen und auf diese Weise mehrere Ressourcen gruppieren. Über das Menü mit dem Zahnrad steht Ihnen die Option NEUER ORDNER zur Verfügung. Haben Sie einen Ordner innerhalb des Bundles erstellt und eine Ressource wie die Datei Cover.icns hineinkopiert, dann können Sie über den Parameter in directory
, gefolgt vom Namen des Verzeichnisses, auf die Datei zugreifen. Der Aufruf würde in diesem Fall resource "Cover.icns" in directory "Verzeichnis”
lauten.

Skripten als Droplets sichern
Ein Programm wird zwar auf einen Doppelklick hin ausgeführt, aber anders als bei anderen Applikationen können Sie noch keine Dateien vom Finder aus auf das Programm ziehen und verwenden. Solche Skripten werden auch Droplets genannt, und Sie müssen einem Programm die Funktion on open
hinzufügen, um ein Droplet zu erstellen. Ein sehr einfaches Droplet bestünde aus dem folgenden Skript:
on open Dateien display dialog (Dateien as string) end open
Speichern Sie dieses Skript als Programm, wird es automatisch mit einem entsprechenden Icon versehen. Wenn Sie Dateien auf das Icon ziehen, gibt Ihnen das Skript die auf das Icon gezogenen Dateien in einem Dialog aus. Für ein wirklich nützliches Skript müssen Sie einfach nur die in der Liste Dateien
enthaltenen Objekte auswerten und weiterverarbeiten.
AppleScript im Netzwerk
AppleScript kann auch über das Netzwerk zur Fernsteuerung von Rechnern dienen. Dazu werden die Apple-Events über das Netzwerk verschickt. Sie müssen dafür in den Systemeinstellungen unter FREIGABEN den Dienst ENTFERNTE APPLE-EVENTS starten. Sie können diese auf ausgewählte Benutzer Ihres Systems begrenzen.
Hinweis
Bei der Arbeit mit entfernten Apple-Events gilt die Einschränkung, dass Sie keine Programme starten können. Sie können nur auf die Programme Einfluss nehmen, die bereits aktiv sind. Andernfalls erhalten Sie eine Fehlermeldung.

Um einem Programm auf einem anderen Rechner in Ihrem Netzwerk Anweisungen via AppleScript zu erteilen, müssen Sie es mit dem Zusatz of machine
, gefolgt vom Namen des Rechners, aufrufen. ENTFERNTE APPLE-EVENTS werden auch über Bonjour kommuniziert. Sie können also ein Skript mit der Zeile tell application "Finder" of machine "miniserver"
einleiten. Nach der Identifizierung als Benutzer auf dem entfernten Rechner würden alle Befehle innerhalb dieses tell
-Blocks an den Finder über das Netzwerk geschickt. Die Angabe miniserver
würde vom Editor anschließend in den vollständigen URL eppc://miniserver.local
geändert.
Leerzeichen
Wenn der Name eines Rechners Leerzeichen enthält, dann müssen Sie diese mit dem Code %20
angeben. Der Name würde dann Andreas%20Mac%20mini
lauten.

Wenn Sie an Ihrem Rechner ein Skript erstellen, das auf die Fähigkeiten eines Programms auf einem anderen Rechner im Netzwerk zugreift, dann verfügen Sie an Ihrem Rechner nicht über die Informationen, die Sie sonst über die Bibliothek in Erfahrung bringen können. Die AppleScript-Fähigkeiten der Programme auf dem entfernten Rechner werden also nicht über das Netzwerk kommuniziert. So würde der einfache Aufruf von
tell application "Finder" of machine "miniserver" to make new Finder window
scheitern. Eine Lösung besteht darin, unter Verwendung der Anweisung using terms from
Ihre lokale AppleScript-Bibliothek zu nutzen. In dem Skript
set entfernterFinder to application "Finder" of machine "eppc://miniserver.local" using terms from application "Finder" tell entfernterFinder set Fenster to make new window end tell end using terms from
kann der Finder auf dem anderen Rechner über die Variable entfernterFinder
angesprochen werden. Mithilfe von using terms from
wird die Bibliothek des lokalen Finders genutzt, um die verfügbaren Befehle und Objekte im Skript verwenden zu können.
Weitere Möglichkeiten
Dieses Kapitel hat Sie mit den Grundlagen von AppleScript vertraut gemacht und einige Beispiel-Skripten entwickelt. AppleScript bietet Ihnen noch viel mehr Möglichkeiten. In der Funktionsbibliothek der SYSTEM EVENTS finden Sie rund zwanzig Suiten, die Ihnen den Zugriff auf die Voreinstellungen des Docks und von Exposé bieten, es Ihnen ermöglichen, Login-Items zu erstellen oder XML-Dateien und Property-Listen auszuwerten. Auch die STANDARDADDITIONS bieten noch einige weitere Funktionen zur Zusammenarbeit mit der Zwischenablage und zur Bearbeitung von Zeichenketten. AppleScript ist auch in der Lage, über XML-RPC und SOAP über sogenannte Web Services mit Servern im Internet zu kommunizieren.
AppleScriptObjC
Die mächtigen Funktionen des Cocoa-Frameworks stehen Ihnen auch über AppleScript teilweise zur Verfügung. So können Sie nun im AppleScript-Editor über ABLAGE • NEU AUS DER VORLAGE ein neues COCOA-APPLESCRIPT APPLET erstellen. Dabei handelt es sich um ein Programm-Bundle, dessen Aufbau in wesentlichen Teilen dem einer normalen Cocoa-Applikation entspricht. Eine Einführung in diese Thematik würde den Rahmen dieses Kapitels sprengen, da Sie dazu wenigstens grundlegende Kenntnisse in Cocoa und objektorientierter Programmierung benötigen.
OSAXen
Es gibt einige AppleScript-Erweiterungen, auch als OSAXen bezeichnet, die die Fähigkeiten von AppleScript enorm erweitern und zum Beispiel die Nutzung regulärer Ausdrücke bei der Suche nach Zeichenketten ermöglichen.
http://macosxautomation.com
Die Webseite von Sal Soghoian bietet eine Übersicht über die Funktionen von AppleScript und den Automator sowie eine Reihe von Beispielen.
Neu im Blog
Aktuelle Artikel
Scareware und anderes in All2MP3