Я попытался скомпилировать твик, используя theos, удивительную среду для легкого создания твиков на разных платформах. Здесь я пытаюсь показать значок настроек каждый раз, когда я перезагружаюсь, и медленно исчезаю, но он не компилируется. У меня есть все необходимые заголовки и фреймворки, и я использую настоящий Mac (несмотря на имя, которое вы видите на моем терминале: P) с последней установленной версией Xcode и предыдущей установкой Xcode 4.2. Это твик.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
И makefile выглядит так:
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
не определен (и я не вижу, где вы определили его в своем фрагменте кода). - person Rob   schedule 12.09.2012UIImageView
. Дело, однако, в том, что стандартные программы обычно не делают такого рода вещи вdidFinishLaunchingWithOptions
(которые обычно содержат только служебные вещи, такие как, возможно, инициализацияwindow
иviewController
, установкаrootViewController
дляwindow
и т. д.), а скорее вviewDidLoad
контроллера представления. Но вы даже не ссылаетесь на контроллер представления, поэтому я не знаю, то ли вы упускаете что-то фундаментальное, то ли фреймворк Theos должен позаботиться об этом за вас. Я просто не знаю Теоса. - person Rob   schedule 12.09.2012didFinishLaunchingWithOptions
— это способ Theos. Так что вам может просто понадобиться включить строку в начале вашегоdidFinishLaunchingWithOptions
, которая говоритUIImageView *mainImageView = [[UIImageView alloc] initWithFrame:CGRectMake( /* set your frame coordinates in here */)];
или что-то в этом роде. Надеюсь, сюда вмешается опытный человек с Теосом. - person Rob   schedule 12.09.2012