SIMBL был создан из mach_star ... он содержит mach_star в своем коде ...
SIMBL - это SIMple BundleLoader ... обратите внимание на заглавные буквы .... он был разработан для того, чтобы модули плагинов могли храниться в ~ / Library / Application Support / SIMBL / Plugins и автоматически вводиться в искатель ..
Есть скрипт запуска в / Library / Scripting Additions / SIMBL.osax ... этот скрипт отвечает за установку mach_inject_bundle.framework в / Library / Frameworks (я думаю) и внедрение кода в целевые программы, указанные в Плист.
У mach_star есть несколько примеров выполнения команд mach_inject_bundle_pid и других нечестивых мач-методов, меняющих магию.
Чтобы использовать SIMBL и иметь плагины, которые вы разрабатываете, это одно ... вы можете создать плагин, и вам не нужно беспокоиться о внедрении искателя каждый раз, когда он пробуждается, или установке mach_inject_bundle.framework.
ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТИ ПЛАГИНЫ В ВАШЕМ ПРИЛОЖЕНИИ АВТОМАТИЧЕСКИ: вам просто нужно, чтобы они были установлены и введены в ваш код каждый раз, когда поиск запускается / запускается и / или когда ваше приложение запускается
(единственный способ отменить ваши инъекции - это использовать яблочный скрипт, подобный следующему:
tell application "Finder" to quit
delay 2.5
tell application "Finder" activate
или нам нужно было бы завершить код mach_star и реализовать неинъекционный материал mach ...: (
Чтобы быть профессионалом и создать приложение, которое автоматически устанавливает ваш плагин, мы должны сделать следующее: есть код, который может использовать 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];
}
}