アプリケーションでの Growl サポートについて。いつものように、とりあえず動作するには、って感じです。
まず Growl のサイトから SDK (Growl-1.1.2-SDK.dmg) をダウンロードします。dmg をマウントして、色々入ってますが必要なのは Framework なので適当な所へコピーします。後でサポートするアプリケーションにコピーするのでプロジェクトの中とか分かりやすい所が良いと思います。
Xcode でサポートするアプリケーションを開いて Growl の Framework を追加します。Growl の Framework には2種類有るのですがアプリケーションでサポートするだけなら Growl.framework だけで OK です。追加したら今度はターゲットを展開して「新規ビルドフェーズ」「新規ファイルのコピー」と選択して追加します。その時に表示されるダイアログには何も入力しなくても構いません。ダイアログを閉じて、先ほど追加した Growl.framework を追加した「ファイルをコピー」にドラッグします。
準備の最後は Growl にどんな通知を渡すのか、また既定の通知はどれなのかを記述した plist を作成します。作成は Property List Editor で大丈夫です。ファイル名は「Growl Registration Ticket.growlRegDict」です。私は最初 plist と書かれていたので拡張子も plist かと思っていたのですが不要でした。
で、記述する内容は3つのキーとその中身です。
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>AllNotifications</key>
<array>
<string>NewMailMailUnreadStatusBarNotification</string>
</array>
<key>DefaultNotifications</key>
<array>
<string>NewMailMailUnreadStatusBarNotification</string>
</array>
<key>TicketVersion</key>
<integer>1</integer>
</dict>
</plist>
こんな感じです。
AllNotifications には Growl に通知する全ての Notification を記述します。DefaultNotifications には多分既定で通知するのを記述すると思われます。私のは未読通知1個なので1個づつです。
これで準備が整ったので、次はプログラムの方です。
プログラムでは起動した時に framework を探してロードする事、と実際に通知を行う事です。
framework のロードは
NSString *frameworkPath=[
[[NSBundle bundleForClass:[self class]] privateFrameworksPath]
stringByAppendingPathComponent:@”Growl.framework”
];
NSBundle *growlFramework = [NSBundle bundleWithPath:frameworkPath];
if (growlFramework && [growlFramework load]) {
// Register ourselves as a Growl delegate
[GrowlApplicationBridge setGrowlDelegate:self];
} else {
NSLog(@”Could not load Growl.framework”);
}
こんな感じです。
私の場合メインのコントローラクラスで通知するので self となっています。
次は Growl への通知です
icon = [[NSImage imageNamed:@”NetworkLarge”] TIFFRepresentation];
[GrowlApplicationBridge notifyWithTitle:[mes mailboxname]
description:[NSString stringWithFormat:@”From:%@\nSubject:%@”,[mes sender],[mes subject]]
notificationName:@”NewMailMailUnreadStatusBarNotification”
iconData:icon
priority:0
isSticky:NO
clickContext:nil
];
notifyWithTitle と description は NSString で notificationName には準備の所で記述した通知を指定します。iconData は nil でも構わないです、指定する場合は NSData なので NSImage から TIFFRepresentation メソッドを使っています。Growl の通知ウインドウにアイコンが表示されます。後のパラメータは聞かないで下さい。まだ、使ってないので良く分かりません。clickContext は多分 Growl のウインドウをクリックした時に自分のアプリケーションに Notification が通知される様な気もしますが。
以上です。アプリケーションを起動すると「システム環境設定」の Growl に自分のアプリケーションが登録されます。
アプリケーションの場合は Growl.framework をロードするのは簡単なんですが、プラグインの場合はちょっと大変な様です。