1.Xcodeで"Standard Apple Plug-ins"/"Address Book Action Plug-in for Objective-C"を選んでみる(他でも良いのかもしれない).
2.とりあえずMyMailPluginとする.
3.いらないFramework(AddressBook.framework)を外す.
4.MyMailPlugin.hはクラス名以外削除
@interface MyMailPlugin : NSObject
{
}
@end
5.MyMailPlugin.mも空っぽにする.
#import "MyMailPlugin.h"
@implementation MyMailPlugin
@end
6.class-dump等を使ってMail.appのheaderを調査しMVMailBundleのheaderを用意する.
@interface MVMailBundle : NSObject
{
}
+ (id)allBundles;
+ (id)composeAccessoryViewOwners;
+ (void)registerBundle;
+ (id)sharedInstance;
+ (BOOL)hasPreferencesPanel;
+ (id)preferencesOwnerClassName;
+ (id)preferencesPanelName;
+ (BOOL)hasComposeAccessoryViewOwner;
+ (id)composeAccessoryViewOwnerClassName;
- (void)dealloc;
- (void)_registerBundleForNotifications;
@end
7.こいつをMyMailPlugin.hの前半に挿入し,MyMailPluginをMVMailBundleの派生とする.
@interface MVMailBundle : NSObject
{
}
+ (id)allBundles;
+ (id)composeAccessoryViewOwners;
+ (void)registerBundle;
+ (id)sharedInstance;
+ (BOOL)hasPreferencesPanel;
+ (id)preferencesOwnerClassName;
+ (id)preferencesPanelName;
+ (BOOL)hasComposeAccessoryViewOwner;
+ (id)composeAccessoryViewOwnerClassName;
- (void)dealloc;
- (void)_registerBundleForNotifications;
@end
@interface MyMailPlugin : MVMailBundle
{
}
@end
8.MyMailPlugin.mに+ (void)initializeを追加する.
+ (void) initialize
{
[super initialize];
[self registerBundle];
NSLog(@"MyMailPlugin has registered.");
}
9.このままだとリンク時に「は?MVMailBundleってなに?」ってことになるのでターゲットのMyMailPluginの情報を表示していじる.あと出来上がるPluginの拡張子も変更.
9.1 ビルドタブ/リンク/他のリンカフラグの値を設定する 値 "-undefined dynamic_lookup"
9.2 ビルドタブ/パッケージング/ラッパーの拡張子の値を変更する 値 "mailbundle"
10.でビルド.build/Debug(or Release)/MyMailPlugin.mailbundleとして出来上がる(ハズ).
11.運良く出来たらこいつを~/Liburary/Mail/Bundles/の下に入れる.
12.コンソール.appを起動しておく(NSLogの結果を見るため).
13.Mail.appを起動.コンソールに"MyMailPlugin has registered."がでればおめでとう.
注意:Mail.appはデフォルトではPlugin(Bundle)を読み込まないのでターミナルからdefaultsコマンドで設定する必要がある.方法はググってください(おいらはGrowl Mailが勝手にやってくれてあったみたい).
とりあえずここまで.
0 件のコメント:
コメントを投稿