Каковы преимущества и недостатки 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.