FRScreenSaver 101

From AwkwardTV
Revision as of 16:27, 19 September 2007 by ThnEa7 (talk | contribs)
Jump to: navigation, search

total eclips hp tc1000 venerupis cerchi ciclismo casablanca alberghi e hotel super monkey ball 2 home teatre wireless www smach down scarpe dysney porno nightkill frigoriferi samsung rs 21 karen mcgregor patente a punti giurisprudenza olocausto roma campi di sterminio xxx comics www alitalia virtual com fori uomo del mio tempo masterizzatore interno dvd pioneer mercante di venezia pda bluetooth hp ipaq hw6510 midi suoneria umberta comi milano dj tommyvee lea bruno liber skarby lancia y elefantino blu milano paranoid records tutti i telefonini alcatel kardia mou kaoani monaca santa reporter ucciso nel bel mezzo di un gelido inverno latte dolce e gabbana dunzel albergo ventimiglia temi foscolo pompa dosatrici huttons hotel sex secretary trinity river concessionario firenze bongo song genevoix maurice leonardo caprio sima progetto internet palline di carta pesta www affection orn lancia delta 1 8 dogeball cbr 900 2003 toner ibm infoprint 1120 congressi rianimazione neonatale agla srl modelle brasiliane nude porfirina dangerous pajero sport td orlando shopping gps palmare bluetooth pocket pc vita (trapani) dior addict ultra shine samarcanda (provincia) msica salsa nomo colonna sonora film honey hyde park hotel london fotonovela boosh shoot thousandoaks ph disneyland resort parigi silverscreen 80 acer flashstick moto yamaha enduro loro del demonio baby rialzo snauzer winagenda california ascolta e va eva gara con le slitte www lecce it dolci di roma antica musik arab mp3 scientifico barcellona porsche 987 lgs diffusore passivo chitarra jar ule wonder kettler vogatore forel tauch and go golf 2003 ck one paris hilton in video dlink dbt120 usb bluetooth adapter ati radeon 9200 schede video loriginale carne lista prezzi camionisti the sims fuori tutti obbiettivi vita col padre coello y ochoa antonio busta christine nomi stranieri maschili e femminili fiws o zone teledysk l ritchie nikon 50 d shemale fuck girl nike wmns air max 97 www blue net delonghi stiro meglio assicurazione urbino chevaliers de la table ronde sergio bernardini web design nikon coolscan 9000 ed jennifer anniston nude programma jpg taniservice el gas de camisea cartuccia lexmark z24 the police walking on the moon villaggi terrasini lpd 443 hp pc media center deumidificatore dec 12 www catania it robie williams radio annuncio matrimoniali ragazze dell est rmx easy compress maturita titoli prima prova shivaree goodnight moon sesto sento download architetto verona opti sound card maco s masterizzatori iomega air filter allison siena hp 21 articol medicali a firenze stajla kof2003 la poliziotta film dvd webchat lesbo repubblica dominicana e i suoi hotel ibm 206 download dvx films canalsat fr key le canzoni dei roteo giordana telefono palmare microsoft asus a3500n memento fiscale salvatore pugliatti succhio lc 37p50e falda nokia 6600 grey stripsaver nintendo 64 roms telefono e fax tiffany teen sex bombe clitoride gigante opel classicparts com amore pagano gioco lotto collant tacchi cuffie altec gunther levi sana rubby perez eucaristia lagarina val compiletion letti giapponesi holiday accommodation noosa canton le 170 kensington cable shox nike misty mezzi pubblici ecologici legname video violenze sessuali in casa nostalgia canaglia valori rottame in ferro cavagliere nero lscio le termiti accessori ixus 40 cornici foto keys in viterbo cartelle sospese esselte freestyle sci gioco delle differenze Finally the screen saver problem has been solved too!

All the BackRow screen savers are basically generators for Quartz Composer compositions. These compositions can be very powerful, even driving things like RSS feeds. In fact, that's the example we'll use.

Most of the instructions to create a FRAppliance still apply—the bundles are very similar. I will go by the same steps as the FRAppliance tutorial, but only highlight the DIFFERENCES from those changes. Please review FRAppliance_101 to reference those steps.

Making the Project

First, you'll want a more useful name. Instead of "HelloWorld", let's call it "RSSVisualizerSaver". Create a new Cocoa Bundle project with this name.

Creating the Plugin

Open InfoPlist.strings (for English) and make sure CFBundleName accurately reflects your new screen saver name:

CFBundleName = "RSS Visualizer";

The Main Appliance Class

Our primary class will not be HelloWorldAppliance, rather use "RSSVisualizerSaver". That means you'll add an Objective-C class to your project caled RSSVisualizerSaver. Don't forget to check "Also create RSSVisualizerSaver.h" in Xcode.

Open RSSVisualizerSaver.h and change it so that your RSSVisualizerSaver class inherits from BRQCScreenSaver. Change "NSObject" in the line beginning with "@interface" to read "BRQCScreenSaver".

Make sure you import the BackRow framework.

You'll want to add the className class method to RSSVisualizerSaver.m—screen savers need to bypass their own whitelists too. However, we need to use an unused screen saver item, and the only one appears to be RUIRetailScreenSaver. Folks are working on subverting the whitelists, so stay tuned for that. You will also want to search for a different method in the exception backtrace: _validateBundleAtPath:. Here's the full code to place into RSSVisualizerSaver.m, instead of the one defined by the Appliance instructions.

// Override to allow FrontRow to load custom screen saver bundles
  (NSString *) className {
    // this function creates an NSString from the contents of the
    // struct objc_class, which means using this will not call this
    // function recursively, and it'll also return the *real* class
    // name.
    NSString * className = NSStringFromClass( self );
	
	// new method based on the BackRow NSException subclass, which conveniently provides us a backtrace
	// method!
	NSRange result = [[BRBacktracingException backtrace] rangeOfString:@"_validateBundleAtPath:"];
	
	if(result.location != NSNotFound) {
		NSLog(@" [%@ className] called for screen saver whitelist check, so I'm lying, m'kay?", className);
		className = @"RUIRetailScreenSaver";
	}
	
	return className;
}

We need to copy our Quartz composition into our project, otherwise we'll be making an extremely boring screen saver. First, you'll want to copy a composition into your project. Copy this file from your Mac OS X system:

/System/Library/Screen\ Savers/RSS Visualizer.qtz

into your project folder. Then in Xcode, right-click on the "Resources" directory, select Add > Existing Files..., and select RSS Visualizer.qtz from your project folder. Make sure it is added to your target.

Back to the code. There is no equivalent to the applianceControllerWithScene method in a BRQCScreenSaver. The only thing need to do to run a QuartzComposer composition is override its initWithScene method and set the appropriate composition. We'll call the superclass' initWithScene: method to do all the dirty work, the only change we will make is to set a different composition.

- (id)initWithScene:(id)scene {
	NSBundle *thisBundle = [NSBundle bundleForClass:[self class]];
	NSString *compositionPath = [thisBundle pathForResource:@"RSS Visualizer" ofType:@"qtz"];

	self = [super initWithScene:scene];
	[self setCompositionPath:compositionPath];
	return self;
}

Building the Plugin

Build Settings

Everything is the same, except:

  • make sure your Principal Class is set to RSSVisualizerSaver, not HelloWorldAppliance.
  • set the Wrapper Extension to frss, not frappliance.

Building

Click Build. The compiled screen saver will appear in build/Debug/RSSVisualizerSaver.frss.

Running the Plugin

You'll want to copy your built copy to the correct folder. I recommend, as the Appliance tutorial author did, to mount the project from your development system so you can make a symlink to the correct location. Copy or symlink your built project to:

/System/Library/CoreServices/Finder.app/Contents/Screen Savers

Kill Finder, then navigate to Settings > Screen Savers. Select "RSS Visualizer", then click Preview to witness your great creation!

Congratulations...again!

Start experimenting with some cool compositions for AppleTV—I think this will be a hugely popular hack, given I know the Apple TV community can come up with some really creative screen savers to show on their sexy widescreens. :)

I (just call me John Doe, I want no recognition for this) owe this entire hack to EricIII, the creator of the FRAppliance 101 tutorial. Quite simply, it would have been impossible without his work, especially since the Screen Saver project is largely a clone of the Appliance project.

Some pretty compositions can be found here:

http://www.zugakousaku.com/index.php?m=project