Simple iPhone con el jailbreak tweak no funciona
Pregunta
#import <UIKit/UIAlertView.h>
@class NSObject;
@interface SBIconController : NSObject
+ (SBIconController *)sharedInstance;
- (BOOL)isEditing;
@end
%hook SBIconController
-(void)iconTapped:(id)tapped {
SBIconController *sbic = [objc_getClass("SBIconController") sharedInstance];
if ([sbic isEditing]) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message" message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
%orig;
}
%end
Encima es un simple tweak que he creado con el Logos.Por alguna razón, después de la instalación, no hay nada de trabajo, no puedo averiguar cuál es el problema y Cómo puedo solucionar este problema?
Otras preguntas que tengo son:
- ¿Por qué hemos de declarar la clase como
SBIconController
cuando ya hay unSBIconController
la clase? - ¿Por qué nos declarar como una subclase de
NSObject
? - ¿Por qué no podemos simplemente escribir en SBIconController cuando estamos llamando al
[SBIconController sharedInstance]
en lugar de[objc_getClass("SBIconController") sharedInstance]
?
Muchas gracias por tu ayuda!
Solución
El código está bien.He probado (yo no uso logos), y iconTapped:
el método se llama de hecho cuando toque el icono de una aplicación.Pero, ¿qué estás tratando de lograr con isEditing
?Esta propiedad indica si se está editando SpringBoard (toque y mantenga pulsado un icono de la aplicación) y cuando es igual a YES
método iconTapped:
NO se llama cuando el icono está girada.Se llama sólo cuando isEditing
es igual NO
.Así que le sugiero que insertar alerta sin if ([sbic isEditing])
para probar si el tweak está trabajando.
En cuanto a tu otra pregunta:
- Cuando se trata privado con Api no tenemos encabezados y recibirá advertencias/errores si tratamos de usarlos.En tu caso es
SBIconController
.Para resolver este problema podemos descargar los encabezados de que los demás objeto de dumping utilizando diversas herramientas como la clase de volcado o declarar estos privado Api de sí mismo.En tu caso es este último. - Porque
SBIconController
hereda deNSObject
. Usted puede hacerlo de cualquier manera.Por supuesto, cuando usted tiene la declaración de la clase no es necesario el uso de
objc_getClass
.Y en el caso de que usted incluso no necesita cualquiera de estas cosas.Usted puede utilizarself
como lo haría en cualquier otro obj-C método.El código se verá así:%hook SBIconController -(void)iconTapped:(id)tapped { if ([self isEditing]) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message" message:[NSString stringWithFormat:@"%@", tapped] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; [alertView release]; } %orig; } %end