Mac-OS-Kompendium/ Programmieren/ AppleScript

Aus Wikibooks

Mit Xcode können unter anderem AppleScript-basierte Applikationen erstellt werden. Wenn AppleScript unter Xcode verwendet wird spricht man vom AppleScript Studio (im Gegensatz zum Scripteditor).

Einleitung[Bearbeiten]

Da AppleScript relativ einfach zu erlernen ist (im Vergleich zu C oder C++), können so auch „normale“ Menschen ein nettes OS-X-Programm erstellen. Zunächst müssen Sie sich jedoch die Developer Tools von Apple installieren. Diese werden auf der System-DVD mitgeliefert oder können kostenlos von der Apple-Website zu Xcode bezogen werden. Allerdings muss man sich zuvor einen kostenlosen Account erstellen. Während du die Developer Tools herunterlädst, kannst du zum Beispiel deine AppleScript-Kenntnisse etwas auffrischen …

Die Vorgehensweise zur Erstellung einer OS-X-Applikation mittels AppleScript und Xcode wird hier an einem Beispiel erklärt. Wir programmieren einen kleinen Fragebogen, der die Zufriedenheit mit Wikibooks erfragt und die Daten in eine kleine sqlite3-Datenbank speichert. Sicherlich, dieses Programm hat keinen großen Nutzen, da die potentiellen Probanden den Bogen an ihrem Mac ausfüllen müssten. Trotzdem stellt ein solcher Fragebogen gewisse Herausforderungen an die Programmierung in AppleScript Studio, so dass es sich bestimmt eignet, ein Verständnis für die prinzipiellen Vorgehensweisen zu schaffen.

Wenn du die Developer Tools installiert hast, öffne das Programm Xcode. Dieses liegt im Hauptverzeichnis unter Developer/Applications.

Ein neues Projekt anlegen[Bearbeiten]

Starte Xcode und wähle aus dem Menü File => New Project.

Es öffnet sich ein neues Fenster. Wähle unter „Application“ den Eintrag „AppleScript Application“ aus und klicke auf „next“. Hierdurch bestimmst du, dass das neue Projekt hauptsächlich in AppleScript geschrieben wird. Die Projekteinträge werden dann entsprechend automatisch generiert.

Du wirst jetzt noch nach dem Dateinamen deines neuen Projektes und dem Speicherort gefragt. Wir nennen unser Projekt „Wikibooks_Demo“ und erstellen dafür im „Dokumente“-Ordner einen eigenen Unterordner, der zum Beispiel auch „Wikibooks-Demo“ heißt.

„AppleScript Application“ auswählen
Es öffnet sich nun das Xcode-Projektfenster. Auf der linken Seite sehen Sie eine Übersicht von verschiedenen Ordnern und Dateien. Zunächst sind hier nur 2 Ordner von Interesse: "Scripts" und "Resources". Klicken Sie zunächst auf den Ordner "Scripts". Sie sehen, dass Xcode bereits eine Datei angelegt hat. Diese trägt den Namen Ihres Projektes mit der Dateiendung "applescript". In Wikibooks_Demo.applescript werden wir einen Großteil unserer AppleScript-Befehle schreiben. Durch Doppelklick auf diese Datei öffnet sich der Editor. Noch ist es allerdings nicht an der Zeit um Code einzufügen - das kommt später.
Xcode-Projektfenster
Scripts-Ordner mit Datei „Wikibooks_Demo.applescript“

Wechsle nun in den „Resources“-Ordner. Auch hier sind bereits ein paar Dateien enthalten:

  • „AppleScriptKit.sdef“: Diese Datei ist als Nachschlagewerk für AppleScript-Befehle und -Klassen gedacht. Dies kann hilfreich sein, wenn Sie „mal kurz“ nachschlagen wollen, wie eine bestimmte Aktion geskriptet werden muss.
  • „MainMenu.xib“: Diese Datei ist wichtig für die graphische Erstellung unserer Programm-Fenster, so wie sie später angezeigt werden sollen. In älteren Xcode-Versionen trägt die Datei den Namen „MainMenu.nib“.
„Resources“-Ordner mit Datei „MainMenu.nib“
  • „InfoPlist.string“: Diese Datei enthält Angaben über die Programm-Version sowie die Autoren. Diese Angaben erscheinen später, wenn in deinem Programm die Menüauswahl „Über Wikibooks_Demo“ gewählt wird. Klicke doppelt auf diese Datei und ändere direkt den Bereich __MyCompanyName__ in deinen Namen um. Wenn du möchtest, kannst du auch die Copyright-Angaben umändern oder weitere Informationen eintragen. Wichtig ist, dass all deine Angaben zwischen den Anführungszeichen stehen.
„InfoPlist.string“
„InfoPlist.string“-Einträge

Das Interface aufbauen[Bearbeiten]

Fast jedes Programm besteht aus einem Graphischen User Interface (GUI), welches die Benutzung über eine grafische Oberfläche in Form von Programmfenstern ermöglicht. AppleScript Studio – also die Verwendung von AppleScript in Kombination mit den „Developer-Tools“ – wurde genau für diesen Zweck entwickelt: Es ermöglicht dir in sehr einfacher Weise, Programmfenster zu erstellen, deren Funktionen du in AppleScript programmieren kannst. Hierzu steht der so genannte Interface Builder (IB) zur Verfügung. Mit ihm kannst du deine Programmfenster zusammenstellen, ohne sich um lästigen Standardcode zur Erzeugung der Grafiken (Fenster, Buttons, Schieberegler usw.) kümmern zu müssen. Also, frisch ans Werk. Der Interface Builder startet automatisch, wenn du im Xcode-Fenster auf die Datei MainMenu.xib doppelklickst. MainMenu.xib findest du, wenn du in der linken Spalte in den Ordner „Resources“ schaust.

Es öffnet sich nun das Hauptfenster des IBs, das 5 Objekte enthält. Für uns sind zunächst die letzten beiden Objekte interessant: „Window“ und „MainMenu“. Führe einen Doppelklick auf das Objekt „Window“ aus. Et voilà, das erste Programmfenster öffnet sich. Noch ist es leer, und es trägt auch noch den nichtssagenden Titel „Window“, aber das wird sich bald ändern. Hierzu benötigen wir die Hilfe eines der elementarsten Werkzeuge des IBs: des so genannten „Inspectors“.

das Hauptfenster des Interface Builders

Der Inspector ist ein Werkzeugfenster, in welchem die grundlegenden Einstellungen für die Programmfenster und deren Inhalte festgelegt werden. Du öffnest den Inspector durch die Tastenkombination Shift Apfel i. Der Inspector hat mehrere Ansichten, die über die Reiter in der Kopfzeile angewählt werden können. Für unser Projekt sind der erste Reiter („Attribute“) und der letzte Reiter („AppleScript“) von Bedeutung. Wenn der Inspector öffnet, ist der erste Reiter („Attribute“) geöffnet. Du erreichst diesen Reiter auch per Tastenkombination Apfel 1. Bleiben wir zunächst auf diesem Reiter. Du siehst zuoberst ein Eingabefeld mit dem Namen „Title“. Im Eingabefeld selbst steht noch „Window“. Falls du diese Felder nicht sehen kannst, liegt das daran, dass du dein gerade erschaffenes Programmfenster „Window“ noch nicht richtig ausgewählt hast. Klicke hierzu auf die Kopfleiste deines Fensters (das ist die Leiste mit den rot-gelb-grünen Knöpfen auf der linken Seite). Wichtig ist, dass du wirklich auf die Kopfleiste, nicht aber in das Fenster klickst. Jetzt solltest du im Inspector das eben erwähnte Feld „Title“ und nebenstehenden Eintrag „Window“ sehen. Ändere in dem Eingabefeld das Wort „Window“ in „Wikibooks Befragung“ um. Du wirst sehen, dass sich nun der Titel auch in deinem Programmfenster entsprechend geändert hat. Die nächste Zeile „Frame name“ lassen wir leer stehen. Viel interessanter sind die darunter stehenden Häkchen.

  • Controls: „Close“, „Resize“ und „Minimize“. Mit ihnen kannst du die drei Knöpfe auf der linken Seite der Kopfzeile (rot-gelb-grün) deines Programmfensters de- und aktivieren. Wenn du die Häkchen entfernst (und das wollen wir mal direkt tun), verhinderst du, dass im späteren Programmbetrieb der Benutzer die Größe des Fensters verändern oder es mit dem roten Button schließen kann.
  • Appearance: Setze ein Häkchen bei „Textured“ und schau, was mit deinem Programmfenster geschieht …
  • Behaviour: „Visible at launch“. Dieses Häkchen sollte für das Hauptfenster deines Programms (und das erstellen wir ja gerade) unbedingt gesetzt werden. Für weitere Programmfenster, die nur bei bestimmten Aktionen/Funktionen erscheinen sollen, muss dieser Haken entfernt werden.

Bevor wir weitermachen und zum Beispiel Buttons und Textfelder unserem Programmfenster hinzufügen, wechseln wir kurz in die AppleScript-Ansicht des Inspectors.

Der Inspector: „Attribute“-Ansicht
Da wir unser Programm in AppleScript schreiben möchten, ist die AppleScript-Ansicht des Inspectors sehr wichtig. Man erreicht diese Ansicht entweder, indem man auf das Symbol ganz rechts in der Kopfleiste des Inspectors klickt, oder durch die Tastenkombination Apfel 7. Wenn du in der AppleScript-Ansicht bist, stelle zunächst wieder sicher, dass du dein Programmfenster richtig ausgewählt hast. Klicke also in die Kopfleiste deines Programmfensters und schau, ob sich im Inspector irgendwas ändert. Ist dies nicht der Fall, hattest du dein Programmfenster bereits richtig ausgewählt. Du siehst im Inspector nun die Eingabebereiche „Name, Index, Scope, Script“. Gehe zuerst in den Bereich „Script“ und wähle aus dem Dropdown-Menü „Wikibooks_Demo.applescript“ aus. Hiermit sagst du dem Inspector, dass die Funktionen für das Objekt „Programmfenster“ in der Datei Wikibooks_Demo.applescript programmiert werden. Erst wenn du diesen Eintrag gesetzt hast, kannst du die anderen Felder ausfüllen (denn die Felder werden bei der Auswahl der Skriptdatei gelöscht!). Ganz wichtig ist das oberste Feld "Name". Hier trägst du ein, unter welchem Namen das Objekt (in diesem Fall dein Programmfenster) im AppleScript-Code angesprochen wird. Da es sich bei dem Programmfenster um das Hauptfenster unseres Programms handelt, nennen wir es auch so: hauptfenster.

Jetzt kann das Fenster in AppleScript eindeutig angesprochen werden.

An dieser Stelle sei nun auf eine wichtige Verständnissache von AppleScript Studio hingewiesen:

Im Gegensatz zum Skripteditor, in welchem du evtl. erste Erfahrungen mit AppleScript gesammelt hast, läuft ein Programm in AppleScript Studio objektbezogen ab. Das bedeutet, dass dein Code nicht einfach zu Beginn des Programms ausgeführt wird. Vielmehr laufen deine Funktionen erst dann ab, wenn „gewisse Dinge geschehen“. Diese Ereignisse nennt man „Events“.

Passend hierzu findest du in der AppleScript-Ansicht des Inspectors den Bereich Event Handlers. Hier kannst du angeben, welche Ereignisse in deinem Programm geschehen sollen. Wenn du möchtest, dass direkt zum Programmstart ein Code ausgeführt wird, musst du dies auch so angeben. Klicke hierzu auf das kleine Dreieck vor „Window“ und setze aus der aufklappenden Liste einen Haken bei „opened“. Hiermit teilst du dem IB mit, dass beim Öffnen des Programmfensters (also beim Start des Programms) ein gewisser Code ausgeführt werden soll. In vielen Fällen ist dies gar nicht notwendig, da Funktionen normalerweise erst dann ausgeführt werden sollen, wenn der Benutzer zum Beispiel auf einen Button drückt. Wir möchten aber in unserem Beispiel hier trotzdem schon nach dem Öffnen des Programms einen Codeschnipsel ausführen lassen.

der Inspector: AppleScript-Ansicht
der Inspector: AppleScript-Aktionen wählen

Doppelklicke nun auf „opened“ oder geh zurück in Xcode und klicke dort im Skript-Ordner doppelt auf die Datei „Wikibooks_Demo.applescript“. Es öffnet sich nun ein Editor, und du siehst die folgenden Zeilen:

on opened theObject
	(*Add your script here.*)
end opened

Dieser Eintrag wurde durch die Wahl des Event Handlers „opened“ automatisch in deiner Skriptdatei erzeugt. Die Variable theObject wird von AppleScript Studio automatisch erzeugt und enthält die Events. Die erste Zeile besagt (auf Deutsch übersetzt): „Wenn das Objekt (in diesem Fall unser Programmfenster) geöffnet wird, dann tue Folgendes:“. Du kannst nun der Aufforderung aus der zweiten Zeile „(*Add your script here.*)“ nachkommen und ihren Code hier eingeben. Die dritte Zeile besagt, dass der Code zu Ende ist. Zusammengefasst bedeutet das, dass der Code zwischen „on opened“ und „end opened“ beim Programmstart ausgeführt wird.

Merk dir, dass …
… du in der Attribut-Ansicht des Inspectors das Aussehen deines Programms regelst. Diese Einstellungen bekommen 
   die Benutzer deines Programms zu sehen.
… du in der AppleScript-Ansicht des Inspectors unbedingt auf eine Skriptdatei verweisen musst, über welche du das 
   Objekt ansprechen wirst und dass du hierzu unbedingt einen eindeutigen Namen für das Objekt vergeben musst.
… du Objekte ausschließlich über den Namen, den du in der AppleScript-Ansicht des Inspectors vergeben hast, 
   im Code ansprechen kannst, nicht aber über den Namen (Title) aus der Attribut-Ansicht.
… du in der Skriptdatei keine „on (...) theObject“-Bereiche löschst, da dies zu Fehlermeldungen und Abbrüchen führt. 
   Entferne, falls du die Events nicht (mehr) benötigst, die Häkchen im Event-Handlers-Bereich der AppleScript-
   Ansicht im Inspector.

Diese vier Regeln solltest du dir unbedingt merken, denn sie gelten für alle Objekte (wie z. B. Buttons, Schieberegler, Fenster, Textfelder usw.), die du für dein Programm erstellen wirst. Ein häufiger Anfängerfehler besteht darin, dass entweder kein Name oder keine Skriptdatei für ein Objekt angegeben wird oder aber dass Objekte über die Namen aus der Attribut-Ansicht im Code referenziert werden. Des Weiteren führt das Löschen von automatisch generierten „on (...) theObject“-Bereichen in der Skriptdatei zu Fehlermeldungen während des Programmablaufs, über deren Ursache man sich im Falle eines Falles nur nach langem Suchen und Herumprobieren klar wird.

Code für den Programmstart[Bearbeiten]

Da wir das Event „opened“ für unser Programmfenster ausgewählt haben, wollen wir nun auch den Codeschnipsel programmieren, der beim Programmstart ausgeführt werden soll. Wir erstellen ja hier einen Fragebogen, dessen Daten wir in einer sqlite3-Datenbank ablegen möchten (sqlite3 ist standardmäßig auf OS-X-Systemen installiert). Daher werden wir beim Programmstart überprüfen, ob unsere Datenbank-Datei bereits existiert oder nicht. Sollte sie nicht existieren, werden wir sie anlegen lassen. Öffne daher die Datei Wikibooks_Demo.applescript und füge folgenden Code zwischen den „on opened theObject“-Bereich:

set dbPath to "~/Wikibooks.db" – Unsere sqlite3-Datenbank soll im Benutzerordner unter dem Namen „Wikibooks.db“ gespeichert werden.
– Jetzt muss der Pfad noch im AppleScript-Format angegeben werden, damit der Finder dies verstehen kann.
set pathPart1 to path to home folder as text – Pfad zum Benutzerordner
set dbPathAS to pathPart1 & "Wikibooks.db" – Der Dateiname wird dem Pfad angehängt.
	
tell application "Finder"
   if (exists file dbPathAS) then – Der Finder benötigt das AS-Format.
      – Die sqlite3-Datenbank-Datei existiert bereits …
      – Deshalb machen wir nichts …
   else
      – Die Datenbank-Datei existiert nicht.
      – Deshalb erzeugen wir sie nun mit Hilfe der Shell.
      set head to "sqlite3 " & dbPath & space & quote – So soll unser Shell-Befehl beginnen.
      set tail to quote – Und so endet er.
      set tableName to "create table wikibooks" – Wir erzeugen eine neue Tabelle „wikibooks“ für unsere Daten.
      set tableColumns to " (id, datum, dasAlter, geschlecht, f1,f2,f3,f4); " – Diese Spalten soll die Tabelle haben.
      do shell script head & tableName & tableColumns & tail – So wird die Datenbank-Datei erzeugt.
      – Jetzt benötigen wir noch eine Tabelle, um den „working-status“ abfragen zu können.
      set tableName to "create table working" – Dies ist unsere „working“-Tabelle.
      set tableColumns to " (id, status, nextquestion); " – Diese Spalten sollen „working“ haben.
      do shell script head & tableName & tableColumns & tail – So wird die Tabelle erzeugt und gespeichert.
      – In „working“ legen wir auch schon einen Datensatz herein.
      set data1 to "insert into working values('1','1','1'); " – Diese Daten wollen wir speichern.
      do shell script head & data1 & tail – Und das tun wir hier auch.
   end if
end tell

In der Kopfzeile des Editors siehst du ein Symbol, dass einen Hammer zeigt und den Untertitel „Build and Go“ trägt. Wenn du auf dieses Symbol klickst, wird dein Programm kompiliert und ausgeführt. Vorher fragt Xcode noch nach, ob die geöffneten Dateien gespeichert werden sollen. Klicke hier immer auf „Save all“. Dein Programm startet nun. Scheinbar passiert nicht viel, denn es wird „nur“ das (noch leere) Programmfenster angezeigt. Wenn du aber mit dem Finder in deinen Benutzerordner (das ist der mit dem Häuschen) gehst, wirst du dort die Datei Wikibooks.db vorfinden.

Referenzieren von Objekten[Bearbeiten]

Nachdem wir mit dem „on opened theObject“-Codeschnipsel sichergestellt haben, dass unsere Datenbankdatei existiert, können wir nun (endlich) beginnen, unser Programmfenster mit Inhalt zu füllen. Klicke dazu wieder auf die „MainMenu.xib“-Datei aus dem „Resources“-Ordner, um so den Interface Builder zu starten (falls er nicht schon geöffnet ist). Neben dem Inspector gibt es noch das „Library“-Werkzeug. Dieses kannst du durch die Tastenkombination Apfel Shift L öffnen. Das Werkzeug hat die zwei Reiter „Objects“ und „Media“. Wir benötigen nun den Reiter „Objects“. Hier findest du nun eine Liste aller Objekte, die du für dein Programmfenster verwenden kannst. Suche nach dem Objekt „Label“ und zieh es in das Programmfenster. Bewege das Objekt an den oberen Rand des Programmfensters, denn das „Label“ soll unsere Überschrift werden. Hast du dies getan, kannst du durch einen Doppelklick auf das „Label“ den Text darin umändern. Schreib hier mal „Wikibooks-Befragung“ hin und drücke RETURN.

Durch einen einfachen Klick wird das Objekt markiert. Du erkennst das an den zwei blauen Punkten links und rechts neben dem Objekt. Wenn du jetzt auf einen dieser Punkte klickst und die Maustaste gedrückt hältst, kannst du die Größe des „Labels“ verändern. Das machen wir aber erst, nachdem wir den Text fett formatiert und vergrößert haben. Durch die Tastenkombination Apfel b wird der Text fett. Durch die Tastenkombination Apfel + wird der Text vergrößert, (Apfel - verkleinert ihn). Drücke so oft Apfel +, bis die Überschrift „Wikibooks-Befragung“ für dich groß genug dargestellt wird. Jetzt kannst du mit den blauen Punkten an den Seiten den dargestellten Bereich anpassen.

Lass das Objekt markiert (erkennbar an den beiden blauen Punkten) und öffne den Inspector (Apfel Shift i). In der Attribut-Ansicht siehst du, dass der Titel schon in „Wikibooks-Befragung“ geändert wurde. Wechsle nun in die AppleScript-Ansicht (im Inspector-Kopf das Symbol ganz rechts). Wähle hier zunächst unter „Scripts“ die Datei „Wikibooks_Demo.applescript“. Jetzt kannst du dem Objekt einen Namen geben. Setz den Namen auf „ueberschrift“. Beachte bitte, dass du keine Sonderzeichen wie zum Beispiel Umlaute für den Namen verwendest! Einen Event-Handler wählen wir nicht aus.

Geh jetzt wieder zur „Library“ und wähle unter „Objects“ einen Button aus, der dir gefällt (z. B. den „Textured Button“). Zieh den Button in dein Programmfenster und platziere ihn mit etwas Abstand unter die Überschrift „Wikibooks-Befragung“. Du siehst, dass der Button dort mit blauen Punkten umrandet ist. Wenn du auf einen der Punkte klickst und die Maustaste gedrückt hältst, kannst du so die Größe des Buttons verändern. Außerdem erkennst du an den Punkten, dass das Objekt markiert ist. Wechsle nun zum Inspector. In der Attribut-Ansicht tragen wir im „Titel“-Feld „Befragung starten“ ein. Wechsle nun in die AppleScript-Ansicht. Hier muss wieder zuerst unter „Script“ die Datei Wikibooks_Demo.applescript angegeben werden. Jetzt trägst du in das „Name“-Feld den Namen „start“ ein. Setz im Event-Handlers-Bereich unter „Action“ ein Häkchen bei „clicked“. Hiermit legst du fest, dass etwas passieren soll (Code ausführen), wenn jemand auf den Button klickt.

Öffne nun per Doppelklick die Datei Wikibooks_Demo.applescript. Du wirst sehen, dass hier automatisch am Dateiende ein neuer Bereich erstellt wurde: on clicked theObject.

Um den Buttonklick abfangen zu können, ersetze „(*Add your script here.*)“ durch folgenden Code:

if name of theObject = "start" then– Wenn auf das Objekt „start“ geklickt wurde, dann …
    set content of text field "ueberschrift" of window "hauptfenster" to "Kuckuck"– Ersetze den Inhalt des Textfelds „ueberschrift“.
end if

Klicke auf „Build and Go“, um dein Programm zu kompilieren und zu starten. Klicke auf den Button „Befragung starten“ und sieh, was geschieht.

Der Codeschnipsel besagt (auf Deutsch) Folgendes:

  • Wenn das angeklickte Objekt „start“ heißt (und so haben wir ja den Button benannt), dann
  • setze den Textinhalt des Textfelds „ueberschrift“ im Fenster „hauptfenster“ auf „Kuckuck“

Dieser Codeschnipsel ist natürlich völlig sinnlos, zeigt aber, wie die Referenzierung in AppelScript Studio funktioniert:

  • Code wird nur zwischen „on (...)“-Bereichen ausgeführt.
  • Durch gezielte if-Abfragen wird unterschieden, was der Benutzer getan hat (z. B. welchen Button er geklickt hat)
  • Das Abfragen und Setzen von Objektinhalten geschieht über den Objektnamen, der über den Inspector in der AppleScript-Ansicht vergeben wurde.
  • In manchen Fällen muss zusätzlich der Name des Programmfensters angegeben werden, in welchem das Objekt platziert ist.

Das Beispielprogramm „Wikibooks-Demo“[Bearbeiten]

So, da wir jetzt die Grundprinzipien kennen, können wir das eigentliche Beispielprogramm „Wikibooks-Demo“ erstellen.

Das Hauptfenster[Bearbeiten]

das Hauptfenster

Zunächst erweitern wir das Hauptfenster ein wenig. Geh dazu in den Interface Builder. Einen Button „Befragung starten“ (mit dem AppleScript-Namen „start“) hast du ja bereits erzeugt. Nun sollen zwei weitere Buttons folgen. Den ersten nennst du „Daten exportieren“ und gibst ihm den AppleScript-Namen „export“, den zweiten nennst du „beenden“ und gibst ihm auch den AppleScript-Namen „beenden“. Für beide Buttons wird unter „Script“ die Datei Wikibooks_Demo.applescript gewählt und bei den Event Handlers ein Haken bei „clicked“ gesetzt.

Die Buttons ordnen wir so im Fenster an, dass sie untereinander unter der Überschrift dargestellt werden. Die Fenstergröße kannst du noch so anpassen, dass das Ganze „schön“ und symmetrisch aussieht.

Ist dies geschehen, können wir ein paar Zeilen Code schreiben. Öffne die Datei Wikibooks_Demo.applescript. Im Bereich on clicked theObject steht noch unser Sinnlos-Codeschnipsel „Kuckuck“. Dieser wird nun wie folgt geändert:

on clicked theObject
   if name of theObject = "beenden" then – Wenn auf das Objekt „beenden“ geklickt wurde, dann …
       quit … beende das Programm.
   end if
   if name of theObject = "start" then – Wenn auf das Objekt „start“ geklickt wurde, dann …
       show window "Eingabe" … öffne das Programmfenster „Eingabe“.
   end if
   if name of theObject = "export" then – Wenn auf das Objekt „export“ geklickt wurde, dann …
       show window "Export" … öffne das Programmfenster „Export“.
   end if
end clicked

Die beiden Programmfenster „Eingabe“ und „Export“ existieren noch nicht, und darum werden wir sie jetzt erstellen.

Das „Eingabe“-Fenster[Bearbeiten]

Für die Dateneingabe erstellen wir ein neues Programmfenster und eine dazugehörige AppleScript-Datei. Natürlich könnten wir auch den gesamten Code in der Datei Wikibooks_Demo.applescript eingeben, dies ist aber nicht sehr übersichtlich. Erstelle also zunächst eine neue .applescript-Datei. Gehe hierzu nach Xcode und markiere den Ordner „Scripts“.

Klicke jetzt in der Menüleiste unter „File“ auf „New File…“. Es öffnet sich ein Dialogfenster, in welchem du die Option „AppleScript Text File“ auswählst und auf „Next“ klickst (nicht „AppleScript Script File“, weil dies für bereits kompilierte Skripte gilt!). Gib als Dateinamen Dateneingabe1.applescript an und klicke auf „Finish“. Jetzt ist die neue Skriptdatei im Ordner „Scripts“ einsehbar.

Erstelle anschließend das neue Programmfenster. Hierfür gehst du in den Interface Builder und wählst aus der Library (Apfel Shift L) den Eintrag „Window“ aus. Diesen ziehst du einfach aus der Library heraus, und schon ist ein neues Programmfenster erstellt. Klicke jetzt auf die Kopfleiste des neuen Programmfensters und wechsle in die Attribut-Ansicht des Inspectors.

  • Unter „Title“ trägst du „Basisdaten eingeben“ ein.
  • Entferne die Häkchen bei „Close“, „Rezise“ und „Minimize“.
  • Entferne das Häkchen bei „Visible at Launch“. Hierdurch gehst du sicher, dass das Fenster nur angezeigt wird, wenn du es im Code aufrufst.

Wechsle nun in die AppleScript-Ansicht des Inspectors und wähle zuerst unter „Script“ die neue Datei Dateneingabe1.applescript aus. Setze jetzt im „Namen“-Feld den AppleScript-Namen des neuen Programmfensters auf „Eingabe“, denn unter diesem Namen wird es ja durch Klick auf den „Befragung starten“-Button des Hauptfensters angesprochen (in unserem Fall geöffnet). Setze im Event-Handler-Bereich unter „Window“ ein Häkchen bei „opened“.

Programmfenster „Basisdaten eingeben“

Jetzt füllen wir das Fenster mit Inhalt (siehe Bild):

  • ein Label mit dem Inhalt „Bitte geben Sie die Basisdaten des Probanden ein.“
  • ein Label mit dem Inhalt „Datum:“
  • ein Label mit dem Inhalt „Alter:“
  • ein Label mit dem Inhalt „Geschlecht:“
  • ein TextField mit dem AppleScript-Namen „datum“ und dem Skript Dateneingabe1.applescript ohne EventHandler
  • ein TextField mit dem AppleScript-Namen „jahre“ und dem Skript Dateneingabe1.applescript ohne EventHandler
  • ein RadioGroup-Feld mit dem AppleScript-Namen „geschlecht“ und dem Skript Dateneingabe1.applescript ohne EventHandler. Gib dem RadioButton-Feld die Einträge „männlich“ und „weiblich“.
  • einen Button mit dem Inhalt „weiter“ und dem AppleScript-Namen „weiter“ und dem Skript Dateneingabe1.applescript und dem Event Handler „clicked“
  • einen Button mit dem Inhalt „zurück“ und dem AppleScript-Namen „back“ und dem Skript Dateneingabe1.applescript und dem Event Handler „clicked“

Ordne die Felder so an, wie auf dem Bild rechts angezeigt.

Wenn du mit dem Aussehen des Fensters zufrieden bist, können wir den Code eingeben. Öffne also die Datei Dateneingabe1.applescript. Du siehst, dass die Datei bereits folgenden Inhalt besitzt:

on opened theObject
	(*Add your script here.*)
end opened
on clicked theObject
	(*Add your script here.*)
end clicked

Widmen wir uns zunächst dem „on opened“-Bereich. Wir möchten, dass im Datum-Feld das aktuelle Datum angezeigt wird, so dass man es nicht immer extra eingeben muss (Das „Datum“-Feld dient dazu abzuspeichern, an welchem Tag die Befragung durchgeführt wurde. Wir gehen davon aus, dass die meisten Daten direkt eingegeben und nicht von zum Beispiel einem Fragebogen übertragen werden. Daher ist das automatische Einfügen des aktuellen Datums sehr benutzerfreundlich. Das Umschreiben des Datums in das Format „2008-12-24“ ist in AppleScript etwas umständlich. Im folgenden Codeblock siehst du, wie umständlich es ist. Bis auf die vorletzte Zeile ist der gesamte Code nur dafür da, das richtige Format zu erstellen. In der vorletzten Zeile wird das aktuelle Datum dann (endlich) in das Textfeld „datum“ des Programmfensters geschrieben. Wir fügen folgenden Code innerhalb des „on opened“-Bereichs ein:

on opened theObject
   –  aktuelles Datum
   set dummy to (current date)
   set MonatsListe to {January, February, March, April, May, June, July, August, September, October, November, December}
   –  Monat als Zahl schreiben
   repeat with i from 1 to 12
		
      if dummy's month = item i of MonatsListe then
         set Monat to text -2 thru -1 of ("0" & i)
         exit repeat
         –  Wenn „true“, wird die Schleife verlassen.
      end if
   end repeat
   set derTag to text -2 thru -1 of ("0" & dummy's day) –  Tag schreiben
   set Jahr to (year of dummy) as text –  Jahr schreiben
   –  Datum zusammenbauen
   set aktuelllesDatum to Jahr & "-" & Monat & "-" & derTag –  Jetzt haben wir das Datum im Format „2008-12-24“.
	
   set content of text field "datum" of window "Eingabe" to aktuelllesDatum–  Hier wird der Inhalt des „Datum“-Felds auf das aktuelle Datum gesetzt.
end opened

Das „Export“-Fenster[Bearbeiten]

Dem Programm ein Icon hinzufügen[Bearbeiten]

In diesem Abschnitt wird erklärt, wie du deinem Xcode-Projekt ein individuelles Programm-Icon hinzufügen kannst.

Jedes Apple-Programm hat ein schickes Icon, welches im Dock angezeigt wird, sobald das Programm aktiv ist. Für Xcode-Projekte wird ein Standard-Icon verwendet. Wenn du ein individuelles Icon verwenden möchtest, benötigst du dieses im .icns-Format. Mit den Entwicklerwerkzeugen (Developer Tools) wurde auch die passende Software zum Erstellen von Icons auf deine Festplatte installiert: der Icon Composer. Du findest das Programm im Hauptverzeichnis der Festplatte unter „Developer/Applications/Utilities/“.

  • Starte nun den Icon Composer. Du siehst das Programmfenster, welches 3 Bereiche hat: ein großes Feld und 4 kleinere Felder. Für unser Projekt nehmen wir eine „fertige“ Grafikdatei, welche wir als Icon für unser Programm verwenden möchten. Wie wäre es mit dem GNU-Kopf aus den Commons …? Lade die PNG-Datei zunächst herunter. Du kannst natürlich auch eine andere Bilddatei wählen. Das Format (jpg, png, gif) ist egal.
  • Ziehe nun die Bilddatei in das große Feld vom IconComposer und wähle „Copy to all smaller sizes“ aus.
Importieren von Bildern in den IconComposer
  • Der GNU-Kopf wurde so in alle Felder des IconComposers importiert.
GNU-Bild im Composer
  • Wähle jetzt aus dem Menü „File => Export…“ und speichere so das nun fertige Icon-Paket als .icns-Datei auf deine Festplatte.
Exportieren als .icns-Datei
  • Jetzt muss diese .icns-Datei dem Projekt hinzugefügt werden. Gehe daher zurück ins Hauptfenster von Xcode.
  • Markiere dort in der linken Spalte den „Resources“-Ordner.
  • Klicke nun in der Menüleiste auf „Project => Add to Project…“.
„Add to Project“-Option
  • Es öffnet sich nun ein neues Fenster, in dem du die soeben erstellte icns-Datei angeben kannst. Setze ein Häkchen bei „Copy items into destination group’s folder“ und klicke dann auf den „Add“-Button. Jetzt ist die Icon-Datei deinem Projekt hinzugefügt worden.
Icon deinem Projekt hinzufügen
  • Damit diese auch als Programm-Icon verwendet wird, musst du noch 3 weitere Klicks tätigen.
  • Klicke in der linken Leiste auf das kleine Dreieck des Ordner „Targets“. Dadurch erscheint direkt unter „Targets“ dein Programm „Wikibooks_Demo“. Markiere dieses per Mausklick.
  • Ist die Markierung gesetzt, klicke in der oberen Menüleiste auf das Info-Symbol (blauer Kreis mit einem „i“ in der Mitte). Dadurch wird ein kleines Fenster geöffnet.
im „Targets“-Ordner auf das Info-Icon klicken
  • Wähle hier den Reiter „Properties“ und trage im Feld „Icon File“ den Dateinamen des Icons ein. In unserem Beispiel ist das GNUhead.icns (du hast evtl. einen anderen Dateinamen für deine icns-Datei gewählt).
  • Das Fenster kannst du nun schließen, die Eingabe wird automatisch übernommen. Das Icon wird nun für dein Programm verwendet.
unter „Properties“ den Dateinamen des Icons eingeben

Wenn du das Programm nun startest, wird das Icon im Dock angezeigt.

Literatur[Bearbeiten]

Weblinks[Bearbeiten]