2012-09-12 3 views
0

나는 다양한 플랫폼에서 손쉽게 비틀기를 만들 수있는 놀라운 프레임 워크 인 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$ 

내가 여기서 무엇을 놓치고?

+0

이 도구는 모르지만 오류 메시지로 판단하면'mainImageView'가 정의되어 있지 않은 것처럼 보입니다 (코드 스 니펫에서 정의한 부분이 표시되지 않습니다). – Rob

+0

그래서 어떻게 정의해야합니까 @ 로브? – iHackerMe

+0

'UIImageView'여야합니다. 하지만 표준 프로그램은 일반적으로'didFinishLaunchingWithOptions'에서 그런 종류의 일을하지 않습니다 (일반적으로'window'와'viewController'를 초기화하고,'window'를 설정하고, 'rootViewController' 등)가 아니라 뷰 컨트롤러의'viewDidLoad'에 있습니다. 하지만 당신은 뷰 컨트롤러를 참조조차하지 않는다. 그래서 당신이 뭔가 근본적인 것이 누락 된 것인지, 테오스 프레임 워크가 이런 종류의 것들을 돌봐야하는지 여부는 모른다. 나는 테오스를 모른다. – Rob

답변

0

문제는, 당신은 시계 말처럼 잠금 화면에 이미 객체를 이동하려고하지 않는 한

그냥

UIImageView *mainImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"/Applications/Preferences.app/[email protected]"]];을 ... mainImageView 아무것도로 선언되지 않은 것입니다 이 경우 객체가 무엇인지 알아 내야하고, #import을 사용하여 파일에 포함시킨 다음 이미 가지고있는 것처럼 애니메이션을 적용해야합니다.