mac.delta-c OS X für Power-User Buch Artikel Blog Forum

  

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


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 ABLAGENEU 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"
 
Abbildung 26.1: Über den Befehl „display dialog“ rufen Sie einen Dialog auf.

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.

Abbildung 26.2: Der AppleScript-Editor hebt Befehle farblich hervor.

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.

Abbildung 26.3: Der Skriptassistent des Editors schlägt mögliche Vervollständigungen einer Eingabe vor.

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 FENSTERVERLAUF 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.

 
Abbildung 26.4: Der „Verlauf des Event-Protokolls“ enthält die Protokolle der zehn zuletzt ausgeführten Skripten.
Abbildung 26.5: Das Kontextmenü bietet eine Reihe von Skripten, die Code-Schnipsel einfügen.

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.

Abbildung 26.6: Mit dem Befehl „get“ geben Sie den Wert einer Variablen als Ergebnis aus.

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.

Abbildung 26.7: Zwei Zeichenketten wurden in einer dritten zusammengefügt.

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.

Abbildung 26.8: Die Datumsangabe in der ersten Zeile wurde automatisch vervollständigt.

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.

Abbildung 26.9: Aufgrund des führenden Doppelpunkts wurde die Pfadangabe vervollständigt.

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

Abbildung 26.1: Die Bibliothek ermöglicht den Zugriff auf die Dokumentation der AppleScript-Unterstützung.

Das zentrale Element ist die Bibliothek, die Sie über FENSTERBIBLIOTHEK 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 ABLAGEFUNKTIONSVERZEICHNIS ÖFFNEN anzeigen lassen.

[OSAX]

Erweiterungen von Drittherstellern werden bisweilen auch als „OSAXen“ in Anspielung auf die Open Scripting Architecture bezeichnet.

Abbildung 26.10: Wenn ein Programm keine Unterstützung für AppleScript bietet, kann es der Bibliothek nicht hinzugefügt werden.

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:

Abbildung 26.12: Die Bibliothek eines Programms enthält die Klassen der Objekte, deren Eigenschaften und verfügbare Befehle.

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.

Abbildung 26.13: Wählen Sie eine Objektklasse aus, erscheinen ihre Eigenschaften inklusive einer kurzen Beschreibung.

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.

Abbildung 26.14: Mit dem Befehl „get“ fragen Sie die aktuellen Eigenschaften eines Objekts ab.

„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.

Abbildung 26.15: Kommentare helfen beim Verständnis der Funktionsweise.

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.

 
Abbildung 26.16: Der Befehl „log“ schreibt einen Kommentar in das Event-Protokoll.

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.

Abbildung 26.17: Über das Einblendmenü können Sie das anzusprechende Programm direkt auswählen.

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.

 
Abbildung 26.18: Mittels „tell“ werden nacheinander der Finder und TextEdit angesprochen.

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.

Abbildung 26.19: Die Warnmeldung wurde mit drei Schaltflächen und einem Icon versehen.

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.

Abbildung 26.20: Einer Warnmeldung können Sie verschiedene Parameter übergeben.

„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.

Abbildung 26.21: Die Verwendung von Klammern ermöglicht den direkten Zugriff auf den zurückgegebenen Wert.

„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.

Abbildung 26.22: Mit „display dialog“ werden drei Schaltflächen zur Auswahl gestellt.

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.

Abbildung 26.23: Mit der Option „default answer“ kann ein Text eingegeben werden.

„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 "").

Abbildung 26.24: Der Dialog liefert in einem Datensatz zwei Werte zurück.

„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.

Abbildung 26.25: Auch Mitteilungen können erzeugt werden.
Abbildung 26.26: Die Mitteilung wird eingeblendet.

„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.

Abbildung 26.27: Mit der Anweisung „choose file“ können eine oder mehrere Dateien ausgewählt werden.
Abbildung 26.28: Die Elemente der Liste stehen zur Auswahl..

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 inIst 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.

Abbildung 26.29: Die Schleife befindet sich innerhalb des „tell“-Blocks und wird entsprechend eingerückt.

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 " &amp; 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.

Abbildung 26.30: Eine Fehlermeldung erzeugen Sie mit „error“.

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) &amp; 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.

Abbildung 26.31: Die „Disk-Folder-File Suite“ der „System Events“ ermöglicht die Arbeit mit Objekten im Dateisystem.

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:

 
Abbildung 26.32: Es wurden nur die Pfade der Dateien ausgelesen, Ordner wurden nicht berücksichtigt.
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 ABLAGEEXPORTIEREN besteht darin, dass gleich die ursprüngliche Bilddatei exportiert wird und ein Dialog umgangen werden kann.

Abbildung 26.33: Wenn keine Bilder ausgewählt wurden, wird ein „album“ zurückgegeben.

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.

Abbildung 26.34: Die Eigenschaften eines Elements vom Typ „photo“ enthalten auch die Pfadangaben.

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.

Abbildung 26.35: „Image Events“ erlaubt keine Interaktion.

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)
Abbildung 26.36: Die Funktionen stehen im Einblendmenü zur Auswahl.

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.

Abbildung 26.37: Das Skriptmenü enthält eine Reihe von Beispielen.

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.

Abbildung 26.38: In den Einstellungen des AppleScript-Editors können Sie die Anzeige des Skriptmenüs aktivieren.

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.

Abbildung 26.39: Die in den Unterordnern von „Applications“ gespeicherten Skripten werden in den gleichnamigen Programmen angezeigt.

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.

Abbildung 26.40: Über das Kontextmenü im Finder konfigurieren Sie die Ordneraktionen.

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.

Abbildung 26.41: Die Liste der verfügbaren Skripten setzt sich aus dem Inhalt zweier Ordner zusammen.

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, wobei Ordner 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, wobei Ordner 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 dem Ordner hinzugefügt, dann werden diese Befehle ausgeführt. Die neuen Dateien und Ordner sind in der Liste Dateien 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 Variablen Dateien 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.

Abbildung 26.42: PDF-Dateien werden in einem Ordner unter „/var/folders“ zwischengespeichert.
Abbildung 26.43: Das Skriptmenü enthält eine Reihe von Beispielen.

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.

Abbildung 26.44: In der Aktion „AppleScript ausführen“ lassen sich Skripte innerhalb eines Arbeitsablaufs ausführen.

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.

Abbildung 26.45: Über die „System Events“ werden Eigenschaften der ausgewählten Dateien ermittelt.

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 &amp; Dateiname &amp; " " &amp; 
Erstellung &amp; "
"
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.

Abbildung 26.46: Die Dateinamen und das Erstellungsdatum der Dateien werden an ein TextEdit-Dokument übergeben.

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.

Abbildung 26.47: Die Pfadangabe des Ordners wurde umgewandelt.
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.

Abbildung 26.48: Ein als Programm gespeichertes AppleScript lässt sich auch als Hinweis vorgeben.

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.

Abbildung 26.49: Als Aktion kann auch ein AppleScript ausgeführt werden.

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.

Abbildung 26.50: Das AppleScript gibt den Betreff in einem Dialog aus.

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.

Abbildung 26.51: Ein mit AppleScript erstelltes Programm wird mit einem entsprechenden Icon versehen.

Als Programm sichern

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

Abbildung 26.52: Es stehen zwei Optionen zur Auswahl.

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.

Abbildung 26.53: Der Startdialog kann den Anwender über den Zweck des Programms informieren und den vorzeitigen Abbruch ermöglichen.

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.

Abbildung 26.54: Den Inhalt des Bundles können Sie über den Editor verwalten.

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.

Abbildung 26.55: Das Bild „ML.icns“ erscheint im Dialogfenster.

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.

Abbildung 26.56: Ein Droplet wird mit einem speziellen Icon versehen.

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.

Abbildung 26.57: Der Dienst „Entfernte Apple-Events“ ermöglicht die Arbeit mit AppleScript über das Netzwerk.

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.

Abbildung 26.58: Das angesprochene Programm muss bereits aktiv sein.

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 ABLAGENEU 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

Lesenswert/12.11.2016: Rezensionen, Hard-/Software, Podcasts

Lesenswert/22.10.2016: GUI, WebKit, Swift, IBM

Lesenswert/19.10.2016: FTP, Jobs, Kagi

Aktuelle Artikel

Eine umfassende Einführung in AppleScript

Shortcuts und Skripten mit Spark

Videos mit Handbrake konvertieren

MySQL mit Sequel Pro verwalten

Buch bestellen

Buch beim Verlag bestellen


ImpressumKontaktDatenschutzCredits & Nachweise