1

Finder 用の SIMBL プラグインを作成して、一部のファイルにアイコン オーバーレイを追加しようとしています。

私はこのコードを持っています:

@implementation NSObject (FAIconOverlay)

- (void)FAIconOverlay_TIconAndTextCell_drawIconWithFrame:(struct CGRect)arg1
{
    [self FAIconOverlay_TIconAndTextCell_drawIconWithFrame:arg1];

    if (![self respondsToSelector:@selector(node)]) {
        return;
    }

    NSLog(@"%@", [[[NSClassFromString(@"FINode") nodeWithFENode:[(TNodeIconAndNameCell *)self node]] fullPath] lastPathComponent]);

    // Draw the icon overlay
}

- (void)FAIconOverlay_TDesktopIcon_drawIconInContext:(struct CGContext *)arg1
{    
    [self FAIconOverlay_TDesktopIcon_drawIconInContext:arg1];
}

@end

アイコン オーバーレイを描画できますが、ファイルのパスを取得しようとすると、「宣言されていない識別子 TNodeIconAndNameCell の使用」が表示されます。このリンクを見る < OS X Finderプラグインの書き方> Finder.hファイルを生成する必要があることがわかりました...

私の質問は: このファイルを生成する方法?? 「class-dump -H Finder.app」を実行してみましたが、コンパイル エラーが多すぎます

どうもありがとうございました!

4

3 に答える 3

4

「 Finder.h 」を作成するには:

sudo class-dump -H -o /output_directory/Path  /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
于 2012-05-26T02:22:28.457 に答える
1

TIconAndTextCell の drawIconWithFrame: メソッドをオーバーライドする代わりに、TNodeIconAndNameCell の drawIconWithFrame: メソッドをオーバーライドする必要があります。

Class finder_class = [objc_getClass("TNodeIconAndNameCell") class];

class_addMethod(finder_class, @selector(FT_drawIconWithFrame:),
                class_getMethodImplementation(self_class, @selector(FT_drawIconWithFrame:)),"v@:{CGRect={CGPoint=dd}{CGSize=dd}}");

old = class_getInstanceMethod(finder_class, @selector(drawIconWithFrame:));
new = class_getInstanceMethod(finder_class, @selector(FT_drawIconWithFrame:));
method_exchangeImplementations(old, new);

そして、これを行うことができます:

NSLog(@"%@", [[[NSClassFromString(@"FINode") nodeWithFENode:[self node]] fullPath] lastPathComponent]);
于 2012-05-25T23:01:58.980 に答える
0

解決策には、class-dump によって生成されたすべてのヘッダーが含まれているわけではありません (このヘッダーを生成する方法については、@jackjr300 の回答を確認してください)。必要なのは、使用されているヘッダーを含めて、コンパイルの問題を修正することだけです。

于 2012-07-05T18:45:08.333 に答える