FRScreenSaver 101

From AwkwardTV
Revision as of 11:23, 14 September 2007 by ThnEa7 (talk | contribs)
Jump to: navigation, search

Pokemon xxx immagini Pompino video gratis Incesto gay Milena velba Video incesto Video incesto Ampland com Troie spagnole Video gratis fighe Annunci69 Zoo sex video Puntochat it Suore puttane Livesexlist Hegre-art com Grassone sex Eva tremila Oldspunkers com Valeria visconti Hentai c18 Storie incesti Pamela neri Shemale video Storie incesti Nokiotto temi Giuliana moreira calendario max Prezzi porte scrigno Youporno youtube Uomini nudi gay video gratis Foto anziane nude Shemale video gratis Video donne che si masturbano Madameweb pordenone Foto figa pelosa Key seca Chiamami com Little lolita Fotostorie di incesto Foto ragazza amatoriale The simpson porno Porche troie gratis Legsworld Coccinella Selen free Versioni di latino gia tradotte Winxclub com Acconciature da uomo Melita foto lucignolo Vagina rasata Foto nere nude Mamme porche gratis Sda it Alfabeto celtico Yulia nova Videosexy Fastweb mail Bbs lolita Granny oma sex Mom fuck Grasse nere Escortforumit com Www italiachiamami Attrice hard Scopate in spiaggia Rare mugen Fighe nere e pelose Www lnd crl it Palco esibizioniste Kobe tai Big clits Www super eva it Temi gratis per nokia n73 Black pornostar Preteen models lingerie Doctoradventures Sexo com coroas Fakes italiane Valeria visconti porno Video figa che piscia Video pompino a cavallo Www nesquik club it Carmen villani nuda Bambole da vestire Puntochat it Video tettone free Video manuela imperato Melita toniolo calendario lucignolo Lea di leo Smorfia Legsworld Backstage calendario melita 2008 Tatuaggio farfalla Foto porno ciccione Ashley tisdale nuda Missglad sexetv Foto nere hard Arcaton com Ragazze mauritius Tatuaggio farfalla Fotoracconti erotici incesti wwe ringtones cipro online ativan online order prozac free monophonic ringtones celebrex online toques ringtones nexium online free verizon ringtones tmobile ringtones samsung ringtones free retro ringtones buy sibutramine cheap hoodia christian ringtones free downloadable ringtones free lg ringtones lortab online zithromax online punk ringtones but carisoprodol rock ringtones t-mobile ringtones cheap xenical cheap soma celexa online pop ringtones free music ringtones free ericsson ringtones cheap valium xanax online clomid online buy wellbutrin cheap ultram voice ringtones cheap lipitor tramadol online ambien online cheap hydrocodone cheap flexeril buy cyclobenzaprine philips ringtones ortho online free telus ringtones cheap diazepam mobile ringtones cheap lorazepam cheap propecia blackberry ringtones cheap zanaflex free true ringtones order diflucan animal ringtones adipex online metal ringtones free mtv ringtones free sprint ringtones fioricet online cheap vicodin fly ringtones cool ringtones sildenafil online free alltel ringtones order pharmacy online tv ringtones jungle ringtones cheap diethylpropion love ringtones jazz ringtones free polyphonic ringtones free sagem ringtones cheap paxil free qwest ringtones alcatel ringtones lisinopril online tenuate online free talking ringtones cheap cialis free humour ringtones free anime ringtones free pantech ringtones free sexy ringtones cheap viagra country ringtones cheap pharmacy free cheap ringtones free nokia ringtones zyban online turkey ringtones free kyocera ringtones didrex online cheap vigrx free cingular ringtones klonopin online free disney ringtones free rap ringtones ultracet online sony ringtones valtrex online buy imitrex 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.


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/ Savers

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


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: