Growlを呼ぶだけのアプリを作ってみる。 [プログラミング]
スクラッチ的に始めからGrowlを使うアプリケーションを作ってみました。
基本的な情報はこれに沿ってやりました。
http://quiteuseful.co.uk/post/99434588/how-to-make-a-growl-app
相違点が少しあるので、そこいらへんを気にしてみる。
1. Xcodeを新規プロジェクトで、「Application>Cocoa Application」で作る。
2. 右クリックメニューの 「追加>既存のファイル」でGrowl.frameworkを指定。「ディスティネーショングループのフォルダに項目をコピーする(必要な場合)」をチェックする。
※実行するとまだ、Growlがアプリケーションバンドルに入れられないので、GDBが動作を止めてしまう。
3. ターゲットに「ファイルコピー」を作る。ターゲット上の右クリックで、「追加>新規ビルドフェーズ>新規コピーファイル」を選択すると出来た。
4. ターゲットの「ファイルをコピー」にGrowl.Frameworkをドロップして登録
5. ターゲットの「ファイルをコピー」を右クリックで情報をダイアログで見る。
6. 一般タブのディスティネーションをフレームワークに指定。
※アプリケーションバンドル内の「Contents/Framework/Growl.framework」がコピーされて動くようになる
7. Growl.frameworkの中からヘッダを取り入れ、プロジェクトに追加する。
8. プロジェクトのヘッダに #import "Growl.h"を入れる。
9. @interface UntitledAppDelegate : NSObject <GrowlApplicationDelegate>と設定してデリゲートなクラスとする。
10. - (void)awakeFromNib、はアプリケーション発動時に読み込まれるので、インプリしてみる
これで登録できるようになった。
11. 適当にボタンを作って、メソッドが発動するように指定する
12. そのメソッドにGrowlのウィンドウを出してもらう。
サンプルソースと違う所は、10番のところで、登録時にXMLファイルを使ってない。それと12番の所で、フレームワークバンドルをNSBundleを使って呼んでない。ただフレームワークが存在するかどうかってのは、動作時に分かってしまうから、特にチェックをしなくても、大丈夫な気がします。そもそも.app内のバンドルをいじるって事自体は、Windowsのバイナリを改変するのとさして変らない事だと思うので、動作対象外として扱うべきかなとも思うんだけど。
あと、気になるメッセージが出てた。
11/06/12 20:52:33 Untitled[2125] GrowlApplicationBridge: The Growl delegate did not supply a registration dictionary, and the app bundle at /Users/hoge/Desktop/Untitled/build/Debug/Untitled.app does not have one. Please tell this application's developer.
新しく作ってみたプロジェクトでは、こういうログを吐き出すのを、コンソール.appで見えました。登録の時に、plistのXMLな形式でファイルを作って、それを中に入れて登録に使うと出てこなくなるんでしょうね。と思ってたら、自分が使っているのだと、登録するデータをXMLファイルに入れていないのに、同様なメッセージは出ていないようでした。あまりにデリゲートのクラスとかが複雑だと報告する機能が働かないのかな。
とにかく、登録した文字列を使って呼び出すと、titleとdescriptionの項目は表示されるという事が分かっていれば、それでいいのかもしれない。
基本的な情報はこれに沿ってやりました。
http://quiteuseful.co.uk/post/99434588/how-to-make-a-growl-app
相違点が少しあるので、そこいらへんを気にしてみる。
1. Xcodeを新規プロジェクトで、「Application>Cocoa Application」で作る。
2. 右クリックメニューの 「追加>既存のファイル」でGrowl.frameworkを指定。「ディスティネーショングループのフォルダに項目をコピーする(必要な場合)」をチェックする。
※実行するとまだ、Growlがアプリケーションバンドルに入れられないので、GDBが動作を止めてしまう。
3. ターゲットに「ファイルコピー」を作る。ターゲット上の右クリックで、「追加>新規ビルドフェーズ>新規コピーファイル」を選択すると出来た。
4. ターゲットの「ファイルをコピー」にGrowl.Frameworkをドロップして登録
5. ターゲットの「ファイルをコピー」を右クリックで情報をダイアログで見る。
6. 一般タブのディスティネーションをフレームワークに指定。
※アプリケーションバンドル内の「Contents/Framework/Growl.framework」がコピーされて動くようになる
7. Growl.frameworkの中からヘッダを取り入れ、プロジェクトに追加する。
8. プロジェクトのヘッダに #import "Growl.h"を入れる。
9. @interface UntitledAppDelegate : NSObject <GrowlApplicationDelegate>と設定してデリゲートなクラスとする。
10. - (void)awakeFromNib、はアプリケーション発動時に読み込まれるので、インプリしてみる
#define NOTIFY_NAME @"hogehoge" - (void)awakeFromNib { NSMutableArray *defNotesArray = [NSMutableArray array]; NSMutableArray *allNotesArray = [NSMutableArray array]; [allNotesArray addObject:NOTIFY_NAME]; [defNotesArray addObject:NOTIFY_NAME]; //Set these notifications both for ALL (all possibilites) and DEFAULT (the ones enabled by default) NSDictionary *regDict = [NSDictionary dictionaryWithObjectsAndKeys: @"Untitled", GROWL_APP_NAME, allNotesArray, GROWL_NOTIFICATIONS_ALL, defNotesArray, GROWL_NOTIFICATIONS_DEFAULT, nil]; NSLog(@"Registering with %@",regDict); // 二回やらないと見た目で登録されてないよう見える // xmlでの登録がいいのでしょう、本家サイトでもそうしろって書いてあるし [GrowlApplicationBridge registerWithDictionary:regDict]; [GrowlApplicationBridge registerWithDictionary:regDict]; }
これで登録できるようになった。
11. 適当にボタンを作って、メソッドが発動するように指定する
12. そのメソッドにGrowlのウィンドウを出してもらう。
- (IBAction)callGrowlWidget:(id)sender { NSLog(@"きたきた!callGrowlWidget"); [GrowlApplicationBridge setGrowlDelegate:self]; //notificationNameと設定時のGROWL_NOTIFICATIONS_ALLとGROWL_NOTIFICATIONS_DEFAULTは一緒 [GrowlApplicationBridge notifyWithTitle:@"Alert" description:@"Hello!" notificationName:NOTIFY_NAME // ここと登録時の設定は一緒 iconData:nil priority:0 isSticky:NO clickContext:[NSDate date] ]; }
サンプルソースと違う所は、10番のところで、登録時にXMLファイルを使ってない。それと12番の所で、フレームワークバンドルをNSBundleを使って呼んでない。ただフレームワークが存在するかどうかってのは、動作時に分かってしまうから、特にチェックをしなくても、大丈夫な気がします。そもそも.app内のバンドルをいじるって事自体は、Windowsのバイナリを改変するのとさして変らない事だと思うので、動作対象外として扱うべきかなとも思うんだけど。
あと、気になるメッセージが出てた。
11/06/12 20:52:33 Untitled[2125] GrowlApplicationBridge: The Growl delegate did not supply a registration dictionary, and the app bundle at /Users/hoge/Desktop/Untitled/build/Debug/Untitled.app does not have one. Please tell this application's developer.
新しく作ってみたプロジェクトでは、こういうログを吐き出すのを、コンソール.appで見えました。登録の時に、plistのXMLな形式でファイルを作って、それを中に入れて登録に使うと出てこなくなるんでしょうね。と思ってたら、自分が使っているのだと、登録するデータをXMLファイルに入れていないのに、同様なメッセージは出ていないようでした。あまりにデリゲートのクラスとかが複雑だと報告する機能が働かないのかな。
とにかく、登録した文字列を使って呼び出すと、titleとdescriptionの項目は表示されるという事が分かっていれば、それでいいのかもしれない。
タグ:freesoft
コメント 0