一人前のPGになる為に

まずは半人前から...

Growlに通知してみるテスト

Growlとは

「Growl」を画像検索すると、少しドキッとする写真が出てきたりしますが、GrowlというのはMac OSでアプリケーションのイベントをデスクトップ上に通知してくれるアプリケーションです。

f:id:pg_ok:20120310224050p:plain

このように画面の前面に表示されます。ツイッターやメールのクライアントに組み込まれていたりします。

GrowlはMac OS X 10.6までは無料だったんですが、10.7(Lion)からは有料($ 1.99)になってしまいました。(それでも便利なのでダウンロードする価値はあるかと思います。 

ダウンロード

GrowlはMac OSのアプリケーションということで、APIがCocoa(Objective-C)向けに提供されています。

早速、公式サイトからSDK(1.3.1)をダウンロードしてみましょう。ダウンロードページの下の方にリンクがあります。

開発者向けドキュメントはこのリンク から見れます。

フレームワークの追加

次は、フレームワークの追加です。先程、ダウンロードしたSDKの中のFramework->Growl.frameworkをプロジェクト内のFrameworksフォルダ内に持ってきます。コピーするか?というところにはチェックを入れておきます。

次に、プロジェクトファイル→ターゲット→Build Phasesと選択し、追加したGrowl.frameworkをCopy Filesのところに追加します。Copy Filesが表示されてなければ、右下のAdd Build Phaseから追加できます。

f:id:pg_ok:20120310232625p:plain

アプリケーションの登録

通知するまえにアプリケーションをGrowlに登録する必要がります。登録は手動で行う必要はなく、決められたプロパティリストを用意しておくとアプリケーションが起動した時に登録されます。

まず、プロジェクトに「Growl Registration Ticket.growlRegDict」というプロパティリストを追加します。.plist形式、.growlRegDict形式どちらにするか聞かれますが一応.growlRegDict形式にしておきます。作成されると、Xcode上では編集できないので、適当なテキストエディタで開きます。

f:id:pg_ok:20120310233835p:plain

このように辞書のキーとなるのは、TicketViresion, AllNotifications, DefaultNotificationsの3つです。TicketVersionは辞書のフォーマットを表していて、デフォルトで1です。AllNotificationsとDefaultNotificationsは、アプリケーションから通知される時のキーとなるようなものです。通知するときには、ここで設定した値が必要です。

実際に通知してみる

f:id:pg_ok:20120310234756p:plain

まず、AppDelegate.hでGrowlをインポートします。また今回の場合は必ずしも必要ではありませんが、プロトコルにGrowlApplicationBridgeDelegateを設定しておきます。このデリゲートでは、通知をクリックしたときなどにコールバックを受けとれます。

次は通知するコードです。とりあえず通知することだけが目標なので、コードはアプリケーションが立ち上がった時に呼び出される - (void)applicationDidFinishLaunching:(NSNotification *)aNotification の中に全て書いてしまいます。

f:id:pg_ok:20120311000424p:plain

まず、デリゲートを設定します。コールバックを必要としない場合は設定する必要もありません。

通知は、[GrowlApplicationBridge notifyWithTitle: description notification: iconData: priority: isSticky: clickContext:]メソッドで行います。

サンプルを実際に動かすと

f:id:pg_ok:20120311000846p:plain

こんな感じになります。notifyWithTitleとdescriptionは見ての通りですね。notificationNameは、プロパティリストに書いたAllNotificationsで設定した値でなければなりません。iconDataははおそらく画像の表示です。priorityは-2~2の範囲で設定し、おそらく通知が多すぎて表示できない時の優先度だと思います。isStickyはYESにすると、クリックされるまで表示されつづけます。clickCotextはクリックされてコールバックするときに返される値です。

 

さて、通知も上手く行ったんでなんか作ってみるかな