Growl einbinden, Teil 1
Bei Growl handelt es sich um ein Benachrichtigungssystem, mit dem unterschiedliche Programme dem Anwender Informationen über aktuelle Vorgänge mitteilen können. Diese Benachrichtigungen geschehen in der Regel über kleine Fenster, die vorübergehend auf dem Bildschirm eingeblendet werden. Aber auch eine Mitteilungen als Sprachausgabe oder als eMail ist möglich. Obwohl es nicht mit OS X ausgeliefert wird, ist Growl auf unzähligen Apple Computern zu finden und wird inzwischen von zahlreichen Programmen unterstützt.
Weitere Infos finden Sie unter http://www.growl.info
Die Beliebtheit und weite Verbreitung von Growl mag auch daran liegen, dass es sich sehr leicht in bestehende Cocoa Anwendung einbinden lässt. Wie es genau funktioniert, werden Sie in dieser Lektion erfahren. Natürlich muss Growl zuvor auf Ihrem System installiert sein. Ist dies geschehen, finden Sie es als weiteren Punkt in den Systemeinstellungen. Dort können Sie Growl auch konfigurieren, und zum Beispiel das Erscheinungsbild der Benachrichtigungsfenster festlegen.
Das erste Ziel soll es sein, einen in ein NSTextField eingegebenen Text in einem Growl Fenster als Nachricht darzustellen.
Erstellen Sie dafür ein neues Cocoa-Application Projekt, das Sie »GrowlTest« nennen und entwerfen Sie im Interface Builder ein Fenster mit den nötigen Steuerelementen. Ein NSTextField für die Eingabe und ein NSButton, um eine Action auszuführen, sind nötig. Ein weiteres Textfeld vom Typ Label dient zur Bezeichnung des Eingabefeldes, es ist für die Funktion der Anwendung aber nicht umbedingt notwendig.
Bei Growl handelt es sich um ein Benachrichtigungssystem, mit dem unterschiedliche Programme dem Anwender Informationen über aktuelle Vorgänge mitteilen können. Diese Benachrichtigungen geschehen in der Regel über kleine Fenster, die vorübergehend auf dem Bildschirm eingeblendet werden. Aber auch eine Mitteilungen als Sprachausgabe oder als eMail ist möglich. Obwohl es nicht mit OS X ausgeliefert wird, ist Growl auf unzähligen Apple Computern zu finden und wird inzwischen von zahlreichen Programmen unterstützt.
Weitere Infos finden Sie unter http://www.growl.info
Die Beliebtheit und weite Verbreitung von Growl mag auch daran liegen, dass es sich sehr leicht in bestehende Cocoa Anwendung einbinden lässt. Wie es genau funktioniert, werden Sie in dieser Lektion erfahren. Natürlich muss Growl zuvor auf Ihrem System installiert sein. Ist dies geschehen, finden Sie es als weiteren Punkt in den Systemeinstellungen. Dort können Sie Growl auch konfigurieren, und zum Beispiel das Erscheinungsbild der Benachrichtigungsfenster festlegen.
Das erste Ziel soll es sein, einen in ein NSTextField eingegebenen Text in einem Growl Fenster als Nachricht darzustellen.
Erstellen Sie dafür ein neues Cocoa-Application Projekt, das Sie »GrowlTest« nennen und entwerfen Sie im Interface Builder ein Fenster mit den nötigen Steuerelementen. Ein NSTextField für die Eingabe und ein NSButton, um eine Action auszuführen, sind nötig. Ein weiteres Textfeld vom Typ Label dient zur Bezeichnung des Eingabefeldes, es ist für die Funktion der Anwendung aber nicht umbedingt notwendig.

Erstellen Sie als nächstes wieder eine Objective-C Klasse, die als Controller für die Anwendung dient.
Die Headerdatei MyController.h erhält die für die Verbindung zum Interface Builder nötige Action und Outlet.
Die Headerdatei MyController.h erhält die für die Verbindung zum Interface Builder nötige Action und Outlet.
#import
<Cocoa/Cocoa.h> @interfaceMyController : NSObject { IBOutletNSTextField *inputTextField; } - (IBAction)clickSendGrowlMessage:(id)sender; @end |
In der Codedatei findet sich die Implementation diese Methode, die aber zunächst leer bleibt.
#import
"MyController.h" @implementationMyController - (IBAction)clickSendGrowlMessage:(id)sender { } @end |
Erstellen Sie nun eine Instanz dieser Klasse im Interface Builder und verbinden Sie die Action und Outlet mit den richtigen Steuerelementen.
Um Growl in eines Ihrer Programme einzubinden, benötigen Sie als erstes eine Version des Growl Framework, welches Sie im Growl SDK finden und frei herunter laden können.
http://www.growl.info/documentation/developer/
Sie sollten den Framework-Ordner des Growl SDK als Unterordner in das Verzeichnis des aktuellen Projekts kopieren, in den gleichen Ordner, in dem sich auch die Projektdatei befindet. Dort ist das Framework am besten aufgehoben und man findet es schnell wieder. Um das Growl Framework anschliessend dem Projekt in Xcode hinzuzufügen sind mehrere Schritt nötig. Klicken Sie zunächst mit der sekundären Maustaste auf Ihr Projekt im Groups & Files Baum. Wählen Sie anschließend aus dem Menü Add und Existing Frameworks.
Um Growl in eines Ihrer Programme einzubinden, benötigen Sie als erstes eine Version des Growl Framework, welches Sie im Growl SDK finden und frei herunter laden können.
http://www.growl.info/documentation/developer/
Sie sollten den Framework-Ordner des Growl SDK als Unterordner in das Verzeichnis des aktuellen Projekts kopieren, in den gleichen Ordner, in dem sich auch die Projektdatei befindet. Dort ist das Framework am besten aufgehoben und man findet es schnell wieder. Um das Growl Framework anschliessend dem Projekt in Xcode hinzuzufügen sind mehrere Schritt nötig. Klicken Sie zunächst mit der sekundären Maustaste auf Ihr Projekt im Groups & Files Baum. Wählen Sie anschließend aus dem Menü Add und Existing Frameworks.

In der Dateiauswahl selektieren Sie das Growl Framework.

Jetzt ist das Growl-Framework zwar als Referenz in Ihrem Projekt, aber noch nicht in der zu erstellenden Anwendung. Um das zu erreichen sind ein paar weitere Schritte nötig.
Das aus dem Projekt zu erstellende Ergebnis, in den meisten Fällen ein Programm, wird in Xcode als Target dargestellt und das Framework muss in diesem Target eingebunden werden. Ein Projekt kann auch mehr als ein Target haben, zum Beispiel dann, wenn sie Variationen eines Programms erstellen möchten.
Klicken Sie mit der rechten Maustaste auf das Target in der Groups & Files Übersicht und wählen Sie Add -> New Build Phase -> New Copy Build Phase.
Das aus dem Projekt zu erstellende Ergebnis, in den meisten Fällen ein Programm, wird in Xcode als Target dargestellt und das Framework muss in diesem Target eingebunden werden. Ein Projekt kann auch mehr als ein Target haben, zum Beispiel dann, wenn sie Variationen eines Programms erstellen möchten.
Klicken Sie mit der rechten Maustaste auf das Target in der Groups & Files Übersicht und wählen Sie Add -> New Build Phase -> New Copy Build Phase.

In Eigenschaften wählen Sie Framework, aber keinen Pfad.

Jetzt finden Sie unter dem Target einen neuen Ordner für Dateien, die während des Erstellen dem Target hinzugefügt werden. Genau das soll auch mit dem Growl-Framework geschehen. Ziehen Sie deshalb die Referenz in diesen Ordner. Von jetzt an wird das Framework Teil der Anwendung.

Achtung: Auch in der Target-Gruppe »Link Binary with Libraries« muss das Framework vorhanden sein. In den meisten Fällen wird es automatisch dort hinzugefügt. Sollte das nicht passieren, müssen Sie es auch in diesen Ordner hinein ziehen.
Die gesamte Kommunikation mit Growl findet über die GrowlApplicationBridge statt, die durch das Framework jetzt zur Verfügung steht. Allerdings muss der Controller diese Klasse kennen, was aber durch eine #include-Anweisung leicht zu bewerkstelligen ist. Dort wird der komplette Pfad zur Headerdatei mit angegeben. Ebenso muss die Klasse das GrowlApplicationBridgeDelegate Protokoll implementieren. Kleine Erweiterung am Code der MyController.h sind nötig.
Die gesamte Kommunikation mit Growl findet über die GrowlApplicationBridge statt, die durch das Framework jetzt zur Verfügung steht. Allerdings muss der Controller diese Klasse kennen, was aber durch eine #include-Anweisung leicht zu bewerkstelligen ist. Dort wird der komplette Pfad zur Headerdatei mit angegeben. Ebenso muss die Klasse das GrowlApplicationBridgeDelegate Protokoll implementieren. Kleine Erweiterung am Code der MyController.h sind nötig.
#import
<Cocoa/Cocoa.h> #import "Growl/GrowlApplicationBridge.h" @interfaceMyController : NSObject <GrowlApplicationBridgeDelegate>{ IBOutletNSTextField *inputTextField; } - (IBAction)clickSendGrowlMessage:(id)sender; @end |
Als nächstes muss die Anwendung einen delegate bei Growl registrieren, denn Growl erlaubt Kommunikation in zwei Richtungen. Es ist nicht nur möglich über Growl Informationen darzustellen, ein Anklicken einer Meldung wird auch per Delegate an die Anwendung zurückgeführt. Diese Registrierung geschieht am besten in der awakeFromNib-Methode. Da Growl direkt mit der MyController-Klasse kommunizieren soll ist der delegate self.
{ [GrowlApplicationBridge setGrowlDelegate:self]; } |
Eine Methode, die Sie im delegate, also im Controller, implementieren müssen, ist registrationDictionaryForGrowl. Diese gibt ein NSDictionary zurück. Dieses Dictionary enthält zwei Listen, eine mit allen für diese Anwendung möglichen Nachrichten und eine Liste mit alle Nachrichten, die per default aktiviert sind. Für die meisten Programme sind diese Listen identisch.
-
(NSDictionary*) registrationDictionaryForGrowl { NSArray* defaults = [NSArray arrayWithObjects:@"Test",@"Hallo",@"LogOn",@"LogOff", nil]; NSArray* all = [NSArray arrayWithObjects:@"Test",@"Hallo",@"LogOn",@"LogOff", nil]; NSDictionary* growlRegDict = [NSDictionary dictionaryWithObjectsAndKeys: defaults, GROWL_NOTIFICATIONS_DEFAULT,all, GROWL_NOTIFICATIONS_ALL, nil]; return growlRegDict; } |
Wenn Sie das Programm jetzt starten, wird es sich bei Growl mit allen seinen möglichen Nachrichten registrieren. Das können Sie in den Systemeinstellungen für Growl überprüfen.


Um eine Nachricht an Growl abzusenden ist nur ein einziger Befehl nötig. Die clickSendGrowlMessage-Methode war bisher leer, kann aber jetzt durch die Anweisung notifyWithTitle erweitert werden. Ein aus dem NSTextField eingelesene Zeichenkette wird als Nachricht an Growl gesendet. Die übrigen Parameter erlauben eine sehr umfangreiche Konfiguration.
-
(IBAction)clickSendGrowlMessage:(id)sender { [GrowlApplicationBridge notifyWithTitle:@"Eine Nachricht" description:[inputTextField stringValue] notificationName:@"Hallo" iconData:nil priority:1 isSticky:NO clickContext:nil]; } |
Die Parameter setzten sich wie folgt zusammen:
* Titel: Die Überschrift der Nachricht
* Description: Der Text der Nachricht, hier aus einem NSTextField
* NotificationName: Der Name einer zuvor registrieren Nachricht
* IconData: Ein Icon
* Priority: Die Priorität der Nachricht
* isSticky: Bestimmt, ob sich die Nachricht automatisch ausblendet oder nicht
* ClickContext: Der Context wird beim Anklicken der Nachrichtenfensters an die Anwendung zurück gegeben.
* Titel: Die Überschrift der Nachricht
* Description: Der Text der Nachricht, hier aus einem NSTextField
* NotificationName: Der Name einer zuvor registrieren Nachricht
* IconData: Ein Icon
* Priority: Die Priorität der Nachricht
* isSticky: Bestimmt, ob sich die Nachricht automatisch ausblendet oder nicht
* ClickContext: Der Context wird beim Anklicken der Nachrichtenfensters an die Anwendung zurück gegeben.
