2011-01-03 4 views
4

Для написания хаков и неофициальных расширений для приложений Mac OS X сегодня, по-видимому, есть два варианта: SIMBL и mach_star. Я начинаю проект, который потребует ввода в другой процесс, и мне нужно решить между этими библиотеками.Каковы преимущества и недостатки SIMBL и mach_star?

Каковы различия в подходах и функциональности между SIMBL и mach_star? Почему я должен использовать один над другим?

ответ

1

SIMBL был построен из mach_star ... она содержит mach_star в его код ...

SIMBL является SIMPLE BundleLoader ... обратите внимание на заглавные буквы .... он был разработан, чтобы вставные модули для хранения в ~/Library/Application Support/SIMBL/Plugins и автоматически вводиться в поисковик.

Существует сценарий запуска в/Library/Scripting Дополнения/SIMBL.osax ... этот скрипт отвечает за установку mach_inject_bundle .framework в/Library/Frameworks (я думаю) и вставляю код в целевые программы, заданные plist.

У mach_star есть несколько примеров выполнения команд mach_inject_bundle_pid и других методов развратной магии.

Для использования SIMBL и создания плагинов у вас есть одна вещь ... вы можете сделать плагин, и вам не нужно беспокоиться о том, чтобы вводить поиск каждый раз, когда искатель просыпается или устанавливает файл mach_inject_bundle.framework.

Вы можете использовать эти плагинами ВАС APP АВТОМАТИЧЕСКИ: вы просто должны быть установлены и введены в коде их каждый раз искатель перезагружается/запускается и/или когда приложение запускается

(единственный путь к устранить ваши инъекции, чтобы использовать AppleScript, как следующее:

tell application "Finder" to quit 
delay 2.5 
tell application "Finder" activate 

или мы должны были бы выполнить код mach_star и реализовать uninject утратившего материал ... :(

чтобы быть профессионалом и сделать приложение что автоматическая установка лет ur, мы должны сделать следующее: есть код, который может использовать SMJobBless, чтобы благословить программу, чтобы выполнить установку файла mach_inject_bundle.framework, если он еще не установлен, а также вводить поиск каждый раз, когда ваше приложение загружается и/или когда искатель перезапустится.

zerodivisi0n: Алексей Жучков проделал замечательную работу, а также Эрвана Барьер, чтобы проиллюстрировать, как вставлять код в приложение, которое делает следующее:

(псевдо-код)

AppDelegate ApplicaitonDidFinishLaunching:

SMJobBlessGetPermission() // держит нас с разрешением впрыснуть нашедший каждый запуск, как только пользователь одобрил один раз

{

// с исполнительными правами

если (основа не установлена)

установить mach_inject_bundle.framework в/Library/Frameworks

впрыскивать искатель с кодом расслоения

}

https://github.com/twotreeszf/FinderMenu

https://github.com/erwanb/MachInjectSample

Цитируется из MachInjectSample:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSError *error; 

    // Install helper tools 
    if ([DKInstaller isInstalled] == NO && [DKInstaller install:&error] == NO) { 
    assert(error != nil); 

    NSLog(@"Couldn't install MachInjectSample (domain: %@ code: %@)", error.domain, [NSNumber numberWithInteger:error.code]); 
    NSAlert *alert = [NSAlert alertWithError:error]; 
    [alert runModal]; 
    [NSApp terminate:self]; 
    } 

    // Inject Finder process 
    if ([DKInjectorProxy inject:&error] == FALSE) { 
    assert(error != nil); 

    NSLog(@"Couldn't inject Finder (domain: %@ code: %@)", error.domain, [NSNumber numberWithInteger:error.code]); 
    NSAlert *alert = [NSAlert alertWithError:error]; 
    [alert runModal]; 
    [NSApp terminate:self]; 
    } 
} 
3

SIMBL: работает только на какао-приложениях. (Вы не можете управлять такими приложениями, как Dock, Finder и т. Д.). Легко использовать.

mach_star: работает со всеми видами приложений и может использовать плоские API-интерфейсы. Немного сложно.

Какой способ использовать? Зависит от того, что вы хотите сделать? Если только флиртовать с какао будет делать вашу работу, используйте SIMBL else mach_star.

Смежные вопросы