Beitrag von Detlef Schulz, 21.04.2008, 08:02
Wie man mit “path to resource” auf ein AppleScript in einem Bundle zugreift
Wenn Sie mit einem Skript-Bundle arbeiten (siehe hier und hier) und darin zum Beispiel ein weiteres Skript mit verschiedenen Routinen abgespeichert haben, so werden Sie natürlich von Ihrem Hauptskript aus darauf zugreifen wollen. Wie funktioniert das nun genau?
Alles, was Sie dafür benötigen, sind die zwei Befehle path to resource und load script. Beide Befehle verstecken sich in den Standard-Erweiterungen von AppleScript und dort unter den File-Commands beziehungsweise den Scripting-Commands. Die Beschreibung dieser Befehle finden Sie im Funktionsverzeichnis “Standard Additions”.
Im Skripteditor müssen Sie im Menü “Ablage > Funktionsverzeichnis öffnen” auswählen und dann in der Liste der Programme “Standard Additions” durch Doppelklick auswählen. Das Funktionsverzeichnis der Standarderweiterungen öffnet sich dann. Klicken Sie dort in der hierarchischen Übersicht auf “File-Commands” und dann auf path to resource für eine Beschreibung dieses Befehls. Den Befehl load script finden Sie ebenfalls in den “Standard Additions” aber unter “Scripting-Commands”.
Schauen wir uns ein Beispiel an:
- Erstellen sie im Menü mit “Ablage > Neu” ein neues Skript im Skripteditor.
- Geben Sie die folgenden drei Zeilen Code ein:
- Speichern Sie es im Format Skript mit dem Namen “myLibrary.scpt” und schließen Sie das Skript.
- Erstellen Sie ein weiteres Skript im Skripteditor.
- Schreiben Sie folgende drei Zeilen Code hinein:
- Speichern Sie das Skript im Format Skript-Bundle mit dem Namen “RunMe.scptd”.
- Öffnen Sie durch einen Klick auf die Schaltfläche “Bundle-Inhalt” die Bundle-Schublade.
- Ziehen Sie nun die Datei “myLibrary.scpt” in die Schublade hinein. Das Skript wird in den Resource-Ordner kopiert. Achten Sie darauf, dass Sie das Skript nicht aus Versehen in den Ordner Scripts hineinziehen!
- Sichern Sie das Skript und starten sie es mit einem Klick auf “Ausführen”.
on beepMe(xTimes)
beep xTimes
end beepMe
set myRes to path to resource “myLibrary.scpt”
set myLib to load script myRes
tell myLib to beepMe(3)
Wenn Sie alles richtig gemacht haben, wird Ihr Mac dreimal seinen Warnton abspielen.

Abb.: Das Beispielskript - unten das Library-Skript, das im Bundle des obigen Skripts liegt.
Was macht das Skript nun genau?
Mit
set myRes to path to resource “myLibrary.scpt”
wird der Variablen mit dem Namen “myRes” der Pfad zu der Ressource (path to resource) “myLibrary.scpt” mitgeteilt. In den Anführungszeichen muss der Name der Datei stehen, auf die Sie zugreifen wollen.
myRes enthält danach einen Alias auf die Datei, zum Beispiel “Macintosh HD:Users:Detlef:Desktop:RunMe.scptd:Contents:Resources:myLibrary.scpt”.
Da der genaue Pfad zum Skript nun bekannt ist, muss es mit der Zeile
set myLib to load script myRes
in das Hauptscript “geladen” (load script) werden. Das geht natürlich nur mit Skripts, nicht mit anderen Dateitypen. (Für andere Dateien, wie zum Beispiel Text, gibt es die “File Read/Write Commands” in den “StandardAdditions”.)
Hier wird in die Variable myLib das Skript unter dem Pfad myRes geladen.
myLib ist danach in AppleScript ein Skriptobjekt, dem man Befehle geben kann. Der Handlername beepMe ist dabei der einzige Befehl in diesem Skriptobjekt. Kennt man den Namen der Handler in dem Skript, kann man diese mit einem einfachen tell aufrufen:
tell myLib to beepMe(3)
Dem Skriptobjekt myLib wird hier gesagt, es soll die Funktion beepMe ausführen. Die Zahl 3 wird als Wert an xTimes übergeben und entsprechend oft wird der Warnton mithilfe des Befehls beep abgespielt. Ändern Sie die Zahl in der Klammer um die Anzahl der beeps abzuändern.
Das war’s schon. Natürlich können Sie in dem Bibliotheks-Skript auch mehrere Handler unterbringen und natürlich auch Sinnvolleres machen, als in diesem extrem kurzen Beispiel.
Übrigens: Wenn Sie das Skript in den Ordner “Scripts” innerhalb des Resource-Ordners legen, müssen Sie die erste Zeile folgendermaßen schreiben:
set myRes to path to resource “myLibrary.scpt” in directory “Scripts”
So können Sie dann auch beliebige Unterordner bequem ansteuern. Wenn Sie Ressourcen während des Testens im Bundle verschieben, müssen sie das Skript erst sichern, schließen und erneut öffnen, bevor die Datei an der neuen Stelle gefunden wird.
Lösung für Tiger-Anwender!
Unter Mac OS X 10.4 funktioniert das alles im Skripteditor leider nicht. Bei der Ausführung bekommen Sie den Hinweis, dass die Ressource nicht gefunden wurde, obwohl sie eindeutig im Bundle liegt.
Der Skripteditor in Versionen vor 2.2 versteht die Anweisung path to resource so, dass er in seinen eigenen Ressourcen, also im Bundle des Skripteditors nach der Datei sucht. Das ist natürlich verkehrt. Erst mit dem Skripteditor 2.2 unter Leopard funktioniert dies endlich richtig. (Gleiches gilt übrigens auch für den Befehl “path to me”.)
Unter Tiger empfehle ich daher folgende Vorgehensweise:
- Während des Tests sollte man den absoluten Pfad angeben. Ersetzen Sie die erste Zeile im Skript gegen:
- Nach dem Test als Programm-Bundle sichern. Wenn alles zur Zufriedenheit funktioniert, ändern Sie die erste Zeile im Skript wieder auf die Version ohne absolute Pfadangabe und sichern Sie das Skript dann im Format Programm-Bundle. Öffnen Sie anschließend das Programm-Bundle und legen Sie das Bibliotheks-Skript in den Resource-Ordner. Starten Sie nun das Skript per Doppelklick. Da das Skript nun ein Programm ist und nicht mehr aus dem Skripteditor heraus läuft, bezieht sich
set myRes to path to resource “myLibrary.scpt” in bundle alias “Macintosh HD:Users:Detlef:Desktop:Skripts:RunMe.scptd”
Statt des Beispielpfades müssen Sie natürlich Ihren Pfad zum Skript eingeben. Hier muss also explizit der genaue Pfad zum Skript angegeben werden. Das Skript ist dadurch nicht mehr ohne Anpassung des Pfades transportfähig. Diese Lösung eignet sich daher nur zum Testen, bis man das Skript als Programm-Bundle sichert.path to resource jetzt auf den Resource-Ordner des Skripts und nicht mehr auf den des Skripteditors.Alternativ empfiehlt sich natürlich auch der Umstieg auf Mac OS 10.5 Leopard oder auch die Verwendung des Skript Debuggers von Late Night Software. Dort gibt es in den Voreinstellungen die Einstellung “path to me, path to resources … refer to document” in der Tafel “Debugger”, die das gewünschte Verhalten ein- oder ausschaltet.
Themen: E-Mail Abo | Apple
|
AppleScript
|
Mac OS
|
Tags:
AppleScript, Mac OS X, Leopard, Tiger, Skripteditor
TxtBear: Artikel als TxtBear Doc
Apple
RSS 2.0