Domanda

Ho alcuni grandi problemi imperativi alcune funzioni in un app esterna che uso SIMBL da agganciare a.

In questa applicazione, v'è una classe - chiamiamolo "AppClass". In questa classe c'è una funzione,

-(void)doSomething;

Ho ottenuto questo dalla classe-dump del binario. l'intera interfaccia è definito come:

@interface AppClass : NSObject
{
}

sto cercando di ignorare questa funzione con jr_swizzleMethod: withMethod: errore:

Con la mancanza di documentazione, questo è quello che ho venire con:

    #import "JRSwizzle.h"
    #import "AppClass.h"

@interface AppClass (MyPlugin)
- (void)myPlugin_doSomething;
@end

@implementation AppClass (MyPlugin)

- (void)myPlugin_doSomething {
 NSLog(@"lol?");
}

@end

@implementation MyPlugin

+ (void) load {
 Mylugin* plugin = [MyPlugin sharedInstance];

 NSError *err = nil;
 BOOL result = [NSClassFromString(@"AppClass") jr_swizzleMethod:@selector(doSomething) withMethod:@selector(myPlugin_doSomething) error:&err];

 if(!result)
  NSLog(@"<Plugin> Could not install events filter (error: %@)", err);

 NSLog(@"Plugin installed");
}



+ (MyPlugin *)sharedInstance {
 static MyPlugin* plugin = nil;

 if(plugin == nil)
  plugin = [[MyPlugin alloc] init];

 return plugin;
}

@end

Questo dovrebbe essere sufficiente a destra? Ma ottengo questo errore di compilazione:

Undefined symbols:
  "_OBJC_CLASS_$_AppClass", referenced from:
      l_OBJC_$_CATEGORY_AppClass_$_MyPlugin in MyPlugin.o
      objc-class-ref-to-AppClass in MyPlugin.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Come posso risolvere questo?

È stato utile?

Soluzione

si sta creando un plugin, che fa riferimento a simboli in un binario (l'applicazione che si sta cercando di estendere). Pertanto, è necessario dire al linker dove cercare quei simboli (Nel tuo caso, che di _OBJC_CLASS_$_AppClass, vale a dire AppClass che è definito nel binario. ).

Questo è fatto passando l'opzione -bundle_loader executable_name al linker. Vedere la pagina man per ld .

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