Jailbreak Tweak для iOS 7 нужна помощь, чтобы вытащить методы из одного заголовка в%hook другого
Итак, я совсем недавно (в течение последних нескольких месяцев) начал играть с JB tweak dev и постепенно собираю кусочки из opensource, которые я нахожу на git. Тем не менее, я попал в стену кодеров. То, что я пытаюсь сделать, это создать твик, который при запуске приложения из SB, перед тем, как он запускает приложения, альфа-плавающее значение анимируется в 0.0 с продолжительностью 1 секунда. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу ради своей жизни (и я искал интернет, и я уверен, что это прямо передо мной, я просто не вижу его по какой-то причине) найти какую-либо документацию о том, как получить методы или свойства из другого заголовка SB, имплантированные в%hook другого заголовка.
Мне нужно получить -(id)_iconImageView из SBIconView.h и использовать его в%hook в -(void)launchFromLocation:(int) расположение из SBApplicationIcon.h
Первоначально я получил это, чтобы частично работать только внутри SBIconView.h с помощью touchesEnded, но к тому времени, когда анимация закончила свою работу, она переключала бы иконки в режим джиттера, и поэтому я мог получить 0,0 из всех альфа-значений моих приложений, но не запускать ни один из них... Поэтому я должен найти способ использовать -(id)_iconImageView в SBApplicationIcon.h, чтобы получить желаемый результат.
Любая помощь или вклад очень ценится!!! Спасибо за ваше время.
Это мой текущий код
enter code here
#import <AudioToolBox/AudioToolBox.h>
#define kBundlePath @"/Library/MobileSubstrate/DynmaicLibraries/com.cramage.LaunchNotifier"
@interface SBApplicationIcon
- (void)launchFromLocation:(int)arg;
@end
@interface SBIconView : UIView
-(id)_iconImageView;
-(float)iconImageAlpha;
+ (id)_jitterTransformAnimation;
+ (id)_jitterPositionAnimation;
+ (int)_defaultIconFormat;
@end
%hook SBApplicationIcon
-(void)launchFromLocation:(int)location
{
SBIconView *sbic=[objc_getClass("SBIconView") _iconImageView];
//NSString *message = [NSString stringWithFormat:@"%1.1f", [sbic iconImageAlpha]];
//UIAlertView *alert2 = [[UIAlertView alloc]initWithTitle:@"Touch" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
//[alert2 show];
//[alert2 release];
//[NSThread sleepForTimeInterval:4.0];
//%orig(location);
NSURL *fileURL = [NSURL URLWithString:@"/System/Library/Audio/UISounds/play.caf"]; // see list below
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL,&soundID);
AudioServicesPlaySystemSound(soundID);
//_iconImageView2.alpha = 1.0;
UIView* iconImageView1 = [sbic _iconImageView];
[UIView animateWithDuration:1.0 animations:^{
iconImageView1.alpha = 0.0;
}
completion:^(BOOL finished){
%orig(location);
}];
}
%end
1 ответ
Хорошо, так что я понял это...
В итоге мне пришлось определить iconImageView1 как UIView вне блоков%hook, подключиться к touchEnded и присвоить iconImageView1 _iconImageView. Чем я мог бы вызвать это в ловушку для launchFromLocation
кодирование выглядит примерно так, просто намного более очищенным. Я работал с перехватом, пытаясь узнать что-то еще, поэтому многое из этого закомментировано, но на самом деле это не так сложно понять.
#import <AudioToolBox/AudioToolBox.h>
#import <CoreGraphics/CoreGraphics.h>
#define kBundlePath @"/Library/MobileSubstrate/DynmaicLibraries/com.cramage.LaunchNotifier"
@interface SBApplicationIcon
- (void)launchFromLocation:(int)arg;
@end
@interface SBLockViewOwner
//+(id)sharedInstance;
-(void)setShowingDeviceLock:(BOOL)lock;
@end
@interface SBIconView
-(id)_iconImageView;
-(void)touchesBegan:(id)began withEvent:(id)event;
-(void)touchesEnded:(id)ended withEvent:(id)event;
@end
//static UIView* iconImageView1;
//static BOOL isLaunching;
//%hook SBIconView
//-(void)touchesEnded:(id)ended withEvent:(id)event{
//if (!isLaunching){
//%orig;
//}
//}
//-(void)touchesBegan:(id)began withEvent:(id)event{
//if (!isLaunching){
//iconImageView1 = [self _iconImageView];
//%orig;
//}
//}
//%end
%hook SBApplicationIcon
-(void)launchFromLocation:(int)location{
//isLaunching = TRUE;
SBLockViewOwner *sblvo = objc_getClass("SBLockViewOwner");
//int state = TRUE;
BOOL lock = TRUE;
//sbdlc -(BOOL)_shouldLockDeviceNow = TRUE;
[sblvo setShowingDeviceLock:(BOOL)lock];
NSURL *fileURL = [NSURL URLWithString:@"/System/Library/Audio/UISounds/play.caf"]; // see list below
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL,&soundID);
AudioServicesPlaySystemSound(soundID);
//CGSize newBounds = CGSizeMake(iconImageView1.frame.size.width/4,iconImageView1.frame.size.height/4);
//iconImageView1.backgroundColor = [UIColor blueColor];
//[sbdlc _setLockState:(int)state];
//CGFloat direction = 1.0f; // -1.0f to rotate other way
//iconImageView1.transform = CGAffineTransformIdentity;
//iconImageView1.transform1 = CGAffineTransformScale;
//[UIView animateKeyframesWithDuration:5.0 delay:0.0
//options:UIViewKeyframeAnimationOptionCalculationModePaced //| UIViewAnimationOptionCurveEaseInOut
//animations:^{
//[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.0 animations:^{
//iconImageView1.transform = CGAffineTransformMakeScale(5.25, 0.001);
//}];
//[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.0 animations:^{
//iconImageView1.transform = CGAffineTransformMakeRotation(180);
//}];
//[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.0 animations:^{
//iconImageView1.transform = CGAffineTransformMakeRotation(180);
//}];
//[UIView addKeyframeWithRelativeStartTime:0.0 relativeDuration:0.0 animations:^{
//iconImageView1.transform = CGAffineTransformIdentity;
//}];
//}
//completion:^(BOOL finished) {
//isLaunching = FALSE;
//%orig(location);
//}];
}
%end