Domanda

Per la scrittura di hack e le estensioni non ufficiali per le applicazioni Mac OS X, sembra che ci siano due scelte oggi: SIMBL e mach_star . Sto iniziando un progetto che richiederà l'iniezione in un altro processo, e ho bisogno di decidere tra queste librerie.

Quali sono le differenze di approccio e la funzionalità tra SIMBL e mach_star? Perché utilizzare uno sopra l'altro?

È stato utile?

Soluzione

SIMBL è stato costruito da mach_star ... essa contiene mach_star in esso è codice ...

SIMBL è la semplice BundleLoader ... notare i tappi .... è stato progettato per consentire plug moduli deve essere conservato in ~ / Library / Application Support / SIMBL / Plugin e essere iniettato nel Finder automaticamente ..

C'è uno script di avvio in / Library / Scripting Additions / SIMBL.osax ... questo script è responsabile per l'installazione del mach_inject_bundle.framework in / Library / Frameworks (credo) e iniettare il codice nei programmi di destinazione specificati da il plist.

mach_star ha diversi esempi di esecuzione di comandi mach_inject_bundle_pid e altre magico metodo nefasto mach scambio.

Per usare SIMBL e hanno plugin si sviluppano è una cosa ... si può fare il plugin e non è necessario preoccuparsi di iniettare il finder ogni volta finder si sveglia o si installa il mach_inject_bundle.framework.

Potete utilizzare questi plugin IN TE APP AUTOMATICAMENTE: devi solo di averli installati e iniettate nel codice ogni volta che si riavvia cercatore / avvia e / o quando la vostra applicazione si avvia

(l'unico modo per eliminare le iniezioni è quello di utilizzare un AppleScript come il seguente:

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

o avremmo bisogno di completare il codice mach_star e implementare la roba mach uninject ...: (

Per essere professionale e fa un app che automaticamente installa il plugin, dobbiamo fare la seguente: c'è un codice che possono utilizzare SMJobBless per benedire un programma per fare l'installazione del file mach_inject_bundle.framework se non è già installato, come così come iniettare il Finder ogni volta che i carichi applicativi e / o al riavvio del Finder.

zerodivisi0n: Alexey Zhuchkov ha fatto un ottimo lavoro così come Erwan barriera per illustrare come incorporare qualche codice nel tuo app che fa il seguente:

(pseudo codice)

AppDelegate ApplicaitonDidFinishLaunching:

SMJobBlessGetPermission () // ci tiene con il permesso di iniettare il cercatore di ogni lancio, una volta che l'utente ha approvato una volta

{

// con le autorizzazioni esecutive

if (quadro non è installato)

installare il mach_inject_bundle.framework in / Library / Frameworks

Iniettare il mirino con il codice pacco

}

https://github.com/twotreeszf/FinderMenu

https://github.com/erwanb/MachInjectSample

Citato da 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];
  }
}

Altri suggerimenti

SIMBL: funzionano solo su applicazioni di cacao. (Non è possibile gestire applicazioni come Dock, Finder, così via). Facile da usare.

mach_star: funziona con tutti i tipi di applicazione e può agganciare API piane. Un po 'difficile.

Il che da usare? Dipende da cosa si vuole fare? Se solo flirtare in giro con un po 'di cacao farà per l'utilizzo da lavoro SIMBL altro mach_star.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top