Каковы преимущества и недостатки SIMBL и mach_star?

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

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

2 ответа

Решение

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

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

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

У mach_star есть несколько примеров выполнения команд mach_inject_bundle_pid и других вредоносных мач-методов, меняющих магию.

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

ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТИ ПЛАГИНЫ В ВАШЕМ ПРИЛОЖЕНИИ АВТОМАТИЧЕСКИ: вам просто нужно, чтобы они были установлены и введены в ваш код каждый раз, когда finder перезапускается / запускается и / или когда ваше приложение запускается

(Единственный способ устранить ваши уколы - это использовать appleScript, как показано ниже:

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

или нам нужно было бы завершить код mach_star и реализовать неинъекционный материал для маха...:(

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

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

(псевдокод)

AppDelegate ApplicaitonDidFinishLaunching:

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

{

// с исполнительными разрешениями

if (фреймворк не установлен)

установите 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];
  }
}

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

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

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

Другие вопросы по тегам