나는 다양한 플랫폼에서 손쉽게 비틀기를 만들 수있는 놀라운 프레임 워크 인 theos를 사용하여 비틀기를 컴파일하려고했습니다. 여기에 respring 때마다 설정 아이콘을 표시하고 천천히 페이드 아웃하려고하지만 컴파일하는 데 실패하고 있습니다. 필자는 필요한 모든 헤더와 프레임 워크를 가지고 있으며, 최신 Xcode가 설치되어 있고 Xcode 4.2가 설치되어있는 실제 Mac (내 터미널 : P에서 본 이름에도 불구하고)을 실행하고 있습니다. 이것은 tweak.xm입니다 :이 비틀기의 문제점은 무엇입니까?
#import <UIKit/UIKit2.h>
#import <objc/runtime.h>
#import <SpringBoard/SpringBoard.h>
#import <Foundation/Foundation.h>
#import <AudioToolbox/AudioToolbox.h>
#import <substrate2.h>
#import <IOSurface/IOSurface.h>
#import <QuartzCore/QuartzCore2.h>
#import <CoreGraphics/CoreGraphics.h>
#import <CaptainHook/CaptainHook.h>
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
#import <AVFoundation/AVAudioPlayer.h>
#import <Celestial/Celestial.h>
#import <SpringBoardServices/SpringBoardServices.h>
#import <CoreFoundation/CFNotificationCenter.h>
#import <ChatKit/ChatKit.h>
%hook CKConversationListController
- (void)composeButtonClicked:(id)clicked {
}
%end
%hook SpringBoard
-(void)applicationDidFinishLaunching:(id)application {
NSArray *animationArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"/Applications/Preferences.app/[email protected]"], nil];
[NSTimer scheduledTimerWithTimeInterval:.75 target:self selector:@selector(crossfade) userInfo:nil repeats:YES];
mainImageView.animationImages = animationArray;
mainImageView.animationDuration = 4.5; //mainImageView is instance of UIImageView
mainImageView.animationRepeatCount = 0;
[mainImageView startAnimating];
CABasicAnimation *crossFade = [CABasicAnimation animationWithKeyPath:@"contents"];
crossFade.autoreverses = YES;
crossFade.repeatCount = 1;
crossFade.duration = 1.0;
}
%new
- (void) crossfade {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; // user dependent transition acn be set here
mainImageView.alpha = !mainImageView.alpha;
[UIView commitAnimations];
}
%end
그리고 메이크 파일은 다음과 같습니다 : 나는 점점에 유지하고
include theos/makefiles/common.mk
export GO_EASY_ON_ME=1
TWEAK_NAME = Goofy
Goofy_FILES = Tweak.xm
Goofy_FRAMEWORKS = Foundation UIKit CoreGraphics ChatKit
Goofy_PRIVATE_FRAMEWORKS = ChatKit VoiceServices AppSupport
include $(THEOS_MAKE_PATH)/tweak.mk
Making all for tweak Goofy...
Preprocessing Tweak.xm...
Compiling Tweak.xm...
Tweak.xm: In function ‘void _logos_method$_ungrouped$SpringBoard$applicationDidFinishLaunching$(SpringBoard*, objc_selector*, objc_object*)’:
Tweak.xm:32: error: ‘mainImageView’ was not declared in this scope
Tweak.xm: In function ‘void _logos_method$_ungrouped$SpringBoard$crossfade(SpringBoard*, objc_selector*)’:
Tweak.xm:53: error: ‘mainImageView’ was not declared in this scope
make[2]: *** [.theos/obj/Tweak.xm.o] Error 1
make[1]: *** [internal-library-all_] Error 2
make: *** [Goofy.all.tweak.variables] Error 2
Hackint0sh-HD:Goofy iHackerMe$
내가 여기서 무엇을 놓치고?
이 도구는 모르지만 오류 메시지로 판단하면'mainImageView'가 정의되어 있지 않은 것처럼 보입니다 (코드 스 니펫에서 정의한 부분이 표시되지 않습니다). – Rob
그래서 어떻게 정의해야합니까 @ 로브? – iHackerMe
'UIImageView'여야합니다. 하지만 표준 프로그램은 일반적으로'didFinishLaunchingWithOptions'에서 그런 종류의 일을하지 않습니다 (일반적으로'window'와'viewController'를 초기화하고,'window'를 설정하고, 'rootViewController' 등)가 아니라 뷰 컨트롤러의'viewDidLoad'에 있습니다. 하지만 당신은 뷰 컨트롤러를 참조조차하지 않는다. 그래서 당신이 뭔가 근본적인 것이 누락 된 것인지, 테오스 프레임 워크가 이런 종류의 것들을 돌봐야하는지 여부는 모른다. 나는 테오스를 모른다. – Rob