FRScreenSaver 101

From AwkwardTV
Revision as of 09:56, 21 September 2007 by ThnEa7 (talk | contribs)
Jump to: navigation, search

Tania russof Racconto di sculacciate Sasso dipinti Ryanair it Quiz patente b Sfondi anna kournikova Rodi garganico Padova hotel Persociv Scie chimiche primiero Racconti porno veri Software astronomia palm os Pornotubecom Prestito novara Sentenza cassazione 2006 incentivo esodo Scopate nere Tastiera musicale Tenda usata brescia Piscina giardino Riassunto promessi sposi Siracusa hotel reservation Sms buonanotte Registro obbligatori impresa agricola Toronews Ragazze nudiste Ragazza nuda lesbica Snaidero Sigle telefilm mp3 Sms augurio 18 anni Sagem simply cellulare Toscana casa vacanza Poppea escort Tapis roulant Prestito aziendali online Siderno Teen virgin Striscia la notizia Sud sound system Timcafe Telecamera professionale sony Ricardo kaka Passante ferroviario milano Rivista porno star Porcellino Secondamano it umbria Progetto appunti Sauna chiasso Sesso coppia Posillipo Tesine interdisciplinari maturita Rete adsl basilicata Parigi shopping Scarpa scarpa Penny porsche Piscina gabbiano limbiate Porn big lesbian Sound blaster live 5 Oroscopo della settimana Testi musicali Scaricare skipe Rare mugen Traghetto corsica ferries Progressive slots Psicologi Studio legale roma Sexpatatina it Programma tv oggi Oroscopo 2003 vergine Sex japanese girl Preteens models Stampante stampe cd Tatuaggi di iguana Ragazza est Punto blu telepass Recensioni escort Smaltimento eternita amianto Petardas Supereva it incontri Promozione motore Orologio casio Stampa distribuzione volantino Street blowjobs site Racconti di mamme incestuose Sigarette sexy Playgirl centerfold Storia pirateria Sagittario ascendente scorpione Pokemon pearl rom Orologio swatch Prestito aosta Rivista sport Scaricare film divx Sauna gay Style maglieria Skirt no panties Super pompini Tette mania Spazio web pagamento Sito hard sicuri Simulazioni prove ecdl Portobello it Transavia nl main Ragazze giapponesi nude Phentermine prescription Traghetti per ventotene Principina mare Servizi di animazione turistica Porno culo Parco delle foreste casentinesi Prestito salerno Testi luca dirisio Simpsons porno Telenorba Stun guns Real huge pussy fat Pietra bianca supereva it Paesaggio sfondi desktop Portofino Porno tettone Sexi schop a milano Test dell intelligenza Scopate anali Rayban Prostituzione in svizzera Quarantenni troie Tetta naturale Tickling torture Preteen cgiworld Ricetta light Seggiolino bici posteriore Tassi interesse Scarica mp3 bob sinclar Toon sexy Salumifici Sesso negre Si sportitaliait Quotazione usata moto Pompini teen Pesce spada Rubber stamping Sirenetta porno Todomondo it Portafoglio luis vuitton Sanpaoloit Sexy lycos it Stampante oki Timbri Scritte nomi Teen troie Storia gioco calcio campionato serie Sms gratis registrazione Pianetaescort com Super tette gratis Portland ristorante Seduzione web Rilascio passaporto Poltrona gonfiabili Porno da guardare gratis Prestiti padova Oroscopo uomo acquario Shannen doherty Tette vip Porno toube Residence volterra Tabella aci Super porche Site forum lottoced com lottoced Spagna vacanza Prima comunione Puntoedu indire it Pokemon cristallo soluzione Racconti cukold Segretarie puttane Potatura Pissing escort torino Tamagotchi net Puntura Tiava Sauna finlandese vendo Tesi titoli Renga francesco Ricetta aloe Passere pelose Orologio altimetro Siti gratuiti Ragazze porche video Saffico Servizi hosting dominio Porche tettone Scuola vela deriva Pienza Petto pollo asparago Radisson hotel Smalville anticipazione Professione casa immobiliare Pinne apnea Preventivi assicurazione casa Suore hard Percorsi michelin Passeggini neonati Porche arrapate Sesso suocera Reno hotel Scarpa uomo geox Tessa gelisio Pession foto Storie erotiche vere map Recco Ricetta nonna Pornostar video Ricettario on line Scopate con donne vecchie gratis Pitagora musica Questura bologna Shemale bologna Photoshop cs2 Tetta da succhiare 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