Сгенерируйте "Finder.h" для плагина SIMBL - PullRequest
1 голос
/ 18 марта 2012

Я пытаюсь создать плагин SIMBL для Finder, чтобы добавить наложение значка на некоторые файлы.

У меня есть этот код:

@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». Просматривая эту ссылку <<a href="https://stackoverflow.com/questions/1294335/how-to-write-os-x-finder-plugin/8782596#8782596"> Как написать плагин для OS X Finder > Я вижу, что необходимо сгенерировать файл Finder.h ...

Мой вопрос: как сгенерировать этот файл ?? Я попытался запустить "class-dump -H Finder.app", но я получаю слишком много ошибок компиляции

Большое спасибо!

Ответы [ 3 ]

4 голосов
/ 26 мая 2012

Чтобы создать « Finder.h »:

sudo class-dump -H -o /output_directory/Path  /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder
1 голос
/ 26 мая 2012

Вместо переопределения drawIconWithFrame: метод TIconAndTextCell, вы должны переопределить drawIconWithFrame: метод TNodeIconAndNameCell.

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]);
0 голосов
/ 05 июля 2012

Решение не включает все заголовки, сгенерированные class-dump (чтобы узнать, как сгенерировать эти заголовки, проверьте ответ @ jackjr300).Необходимо только включить использованные заголовки и исправить проблемы компиляции.

...