Difference between revisions of "FRScreenSaver 101"

From AwkwardTV
Jump to: navigation, search
m
m (Reverted edits by Itextras (Talk) to last revision by Peoplemover)
 
(19 intermediate revisions by 9 users not shown)
Line 1: Line 1:
[http://wonted.cn/waes-of-luve/index.html waes of luve] [http://knock-knock.cn/www-scooby-doo/index.html www scooby doo com] [http://kitmun.cn/yupy.html yupy] [http://boradrljacamercedes.kittiss.cn/index.html bora drljaca mercedes] [http://bailedelperreo.romanikki.cn/index.html baile del perreo] [http://bavariade.fast-road.cn/index.html bavaria de] [http://knock-knock.cn/w32gaobot/index.html w32gaobot wo] [http://wonted.cn/www-tx-tnet/index.html www tx tnet it] [http://knock-knock.cn/www-ostetrica/index.html www ostetrica di neonati it] [http://botosani.kittiss.cn/index.html botosani] [http://bedbreakfastamilanomarittima.fast-road.cn/index.html bed breakfast a milano marittima] [http://wonted.cn/www-grafitti/index.html www grafitti com] [http://knock-knock.cn/www-westunion/index.html www westunion it] [http://wonted.cn/we-are-the/index.html we are the] [http://breatheasydeiblue.midways.cn/index.html breath easy dei blue] [http://blackeyespeace.clung.cn/index.html black eyes peace] [http://knock-knock.cn/www-ail-com/index.html www ail com] [http://knock-knock.cn/wwwte/index.html wwwte] [http://knock-knock.cn/web-cam-nascoste/index.html web cam nascoste in spogliatoi maschili] [http://ballerinedibuonadomenica.romanikki.cn/index.html ballerine di buona domenica] [http://boombastic.clung.cn/index.html boombastic] [http://bolognaerosit.midways.cn/index.html bolognaeros it] [http://wonted.cn/www-mare-neve/index.html www mare neve it] [http://bagattoquandopartivanoi9lenti.clung.cn/index.html bagatto quando partivano i9 lenti] [http://snailtail.cn/xsway-driver/index.html xsway driver] [http://billioner.kittiss.cn/index.html billioner] [http://snailtail.cn/x-nelly-dilemma/index.html x nelly dilemma] [http://kitmun.cn/you-ll-never.html you ll never walk alone] [http://bertonialberto.kittiss.cn/index.html bertoni alberto] [http://quoits.cn/akiko.html akiko] [http://snailtail.cn/yiffy/index.html yiffy] [http://snailtail.cn/www-taca-com/index.html www taca com] [http://bernardocorradifoto.kittiss.cn/index.html bernardo corradi foto] [http://bailasexything.clung.cn/index.html baila sexy thing] [http://barbieraperonzolo.kittiss.cn/index.html barbie raperonzolo] [http://wonted.cn/www-maschio/index.html www maschio it] [http://snailtail.cn/xgay/index.html xgay] [http://kitmun.cn/zion-and-lennox.html zion and lennox] [http://snailtail.cn/www-samsung/index.html www samsung mobile com] [http://knock-knock.cn/www-videonoleggio/index.html www videonoleggio it] [http://brasilxxxcom.clung.cn/index.html brasil xxx com] [http://bergerdecapitazione.kittiss.cn/index.html berger decapitazione] [http://kitmun.cn/ziveo.html ziveo] [http://beckhamfotos.romanikki.cn/index.html beckham fotos] [http://bibbliotecareggioemilia.clung.cn/index.html bibblioteca reggio emilia] [http://wonted.cn/www-bibbia/index.html www bibbia it] [http://brandonlee.kittiss.cn/index.html brandon lee] [http://wonted.cn/www-tribunaleamministrativo/index.html www tribunaleamministrativo it] [http://quoits.cn/accidenti-che.html accidenti che schianto] [http://wonted.cn/www-vodaphone/index.html www vodaphone it] [http://bersagliri.clung.cn/index.html bersagliri] [http://bontempiloredana.clung.cn/index.html bontempi loredana] [http://bensonpleasedon.romanikki.cn/index.html benson please don] [http://wonted.cn/www-politica/index.html www politica teramo it] [http://knock-knock.cn/wrd1874/index.html wrd1874] [http://brandywhataboutus.midways.cn/index.html brandy what about us] [http://kitmun.cn/zairi.html zairi] [http://beckhamslife.romanikki.cn/index.html beckham s life] [http://knock-knock.cn/www-antonello/index.html www antonello com] [http://knock-knock.cn/www-surf-it/index.html www surf it] [http://knock-knock.cn/www-volvocars/index.html www volvocars it] [http://bobmarlin.fast-road.cn/index.html bob marlin] [http://snailtail.cn/xandee-1-life/index.html xandee 1 life] [http://kitmun.cn/yiorgos.html yiorgos mazonakis missing you] [http://wonted.cn/www-megadeth/index.html www megadeth] [http://wonted.cn/www-motorola/index.html www motorola it] [http://bongibongi.fast-road.cn/index.html bongi bongi] [http://kitmun.cn/you-lift.html you lift me up] [http://bonnietylersidemai.clung.cn/index.html bonnie tyler si demai] [http://kitmun.cn/you-are-my.html you are my sonia] [http://quoits.cn/zidero.html zidero] [http://balloballo.midways.cn/index.html ballo ballo] [http://blokshaft.midways.cn/index.html blok shaft] [http://billwithers.fast-road.cn/index.html bill withers] [http://quoits.cn/andrò-come.html andrò come un cavallo pazzo] [http://quoits.cn/aeroporto.html aeroporto] [http://botylkoty.fast-road.cn/index.html bo tylko ty] [http://biscochospeludos.romanikki.cn/index.html biscochos peludos] [http://wonted.cn/www-calavera/index.html www calavera com] [http://knock-knock.cn/www-geoggle/index.html www geoggle] [http://basstabpfm.clung.cn/index.html bass tab pfm] [http://bondedotigraothuthuca.kittiss.cn/index.html bonde do tigrao thu thuca] [http://wonted.cn/www-museoegizio/index.html www museoegizio it] [http://wonted.cn/www-mariam/index.html www mariam dj com] [http://wonted.cn/www-sexso/index.html www sexso] [http://kitmun.cn/yatana-desnuda.html yatana desnuda] [http://knock-knock.cn/www-scopare/index.html www scopare it] [http://snailtail.cn/www-ratemyimplants/index.html www ratemyimplants com] [http://basimuscli.clung.cn/index.html basi muscli] [http://brendaexporto.midways.cn/index.html brenda exporto] [http://bebocigala.clung.cn/index.html bebo cigala] [http://wonted.cn/www-libero/index.html www libero t] [http://kitmun.cn/zvezde-granda.html zvezde granda 2004] [http://bennybenassiillusion.kittiss.cn/index.html benny benassi illusion] [http://kitmun.cn/yu-gi-ho-per.html yu gi ho per visual boy advanc] [http://wonted.cn/www-radio/index.html www radio activa con] [http://bersagliari.fast-road.cn/index.html bersagliari] [http://wonted.cn/www-petit-it/index.html www petit it] [http://berluscone.clung.cn/index.html berluscone] [http://britneyspearssometimes.clung.cn/index.html britney spears sometimes] [http://knock-knock.cn/www-sexy/index.html www sexy com] [http://wonted.cn/www-googli-it/index.html www googli it] [http://quoits.cn/zona-allarm.html zona allarm italiano] [http://bongi.fast-road.cn/index.html bongi] [http://benassibenni.midways.cn/index.html benassi benni] [http://blueto.romanikki.cn/index.html blue to] [http://wonted.cn/www-ficone/index.html www ficone it] [http://wonted.cn/walkthrough/index.html walkthrough final fantasy viii] [http://knock-knock.cn/www-paulsevers/index.html www paulsevers be] [http://knock-knock.cn/www-ersucam/index.html www ersucam it] [http://britneyspearscrazy.clung.cn/index.html britney spears crazy] [http://brianabank.kittiss.cn/index.html briana bank] [http://wonted.cn/www-aida-it/index.html www aida it] [http://buscounamujerguanabanas.kittiss.cn/index.html busco una mujer guanabanas] [http://knock-knock.cn/www-hotbird/index.html www hotbird 13e satellite] [http://kitmun.cn/zee.html zee] [http://kitmun.cn/your-so-vain.html your so vain] [http://brigitebui.midways.cn/index.html brigite bui] [http://biglietticompleannodastampare.midways.cn/index.html biglietti compleanno da stampare] [http://snailtail.cn/www-radio105/index.html www radio105 net] [http://begintowonder.romanikki.cn/index.html begin to wonder] [http://knock-knock.cn/www-cristore/index.html www cristore com] [http://kitmun.cn/yamaha-driver.html yamaha driver] [http://wonted.cn/www-ff-ss-it/index.html www ff ss it] [http://quoits.cn/agenzia.html agenzia omicidi] [http://snailtail.cn/xxx-movie/index.html xxx movie] [http://snailtail.cn/xxx-school/index.html xxx school sexy girls] [http://benceno.kittiss.cn/index.html benceno] [http://boffibagni.midways.cn/index.html boffi bagni] [http://snailtail.cn/yussuf/index.html yussuf] [http://bulgarodecapitatoiniraq.fast-road.cn/index.html bulgaro decapitato in iraq] [http://snailtail.cn/xsc-550anvz/index.html xsc 550anvz] [http://wonted.cn/www-donnaderrico/index.html www donnaderrico com] [http://knock-knock.cn/www-sportler/index.html www sportler com] [http://barbarabarolo.romanikki.cn/index.html barbara barolo] [http://borgovalsugana.fast-road.cn/index.html borgo valsugana] [http://kitmun.cn/youngerbabes.html youngerbabes] [http://bublelyrics.midways.cn/index.html buble lyrics] [http://brankoolar.clung.cn/index.html branko olar] [http://bheetoven.midways.cn/index.html bheetoven] [http://berdanmardini.clung.cn/index.html berdan mardini] [http://boysjpg.clung.cn/index.html boys jpg] [http://bennybenasii.clung.cn/index.html benny benasii] [http://blindateporte.clung.cn/index.html blindate porte] [http://buscaemportugues.clung.cn/index.html busca em portugues] [http://kitmun.cn/yahho-games.html yahho games] [http://bancodilodi.clung.cn/index.html banco di lodi] [http://quoits.cn/arriva-dorellik.html arriva dorellik] [http://basementjaxx.romanikki.cn/index.html basement jaxx] [http://knock-knock.cn/will-nevill/index.html will nevill] Finally the screen saver problem has been solved too!  
+
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.  
 
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.  
Line 5: Line 5:
 
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.
 
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===
+
==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.
 
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.
 +
"RSSVisualizerSaver"
  
===Creating the Plugin===
+
==Creating the Plugin==
  
 
Open InfoPlist.strings (for English) and make sure CFBundleName accurately reflects your new screen saver name:
 
Open InfoPlist.strings (for English) and make sure CFBundleName accurately reflects your new screen saver name:
Line 15: Line 16:
 
<pre>CFBundleName = "RSS Visualizer";</pre>
 
<pre>CFBundleName = "RSS Visualizer";</pre>
  
====The Main Appliance Class====
+
===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.
 
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.
Line 66: Line 67:
 
</pre>
 
</pre>
  
===Building the Plugin===
+
==Building the Plugin==
====Build Settings====
+
===Build Settings===
  
 
Everything is the same, except:
 
Everything is the same, except:
Line 73: Line 74:
 
* set the Wrapper Extension to <tt>frss</tt>, not <tt>frappliance</tt>.
 
* set the Wrapper Extension to <tt>frss</tt>, not <tt>frappliance</tt>.
  
====Building====
+
===Building===
 
Click Build. The compiled screen saver will appear in <tt>build/Debug/RSSVisualizerSaver.frss</tt>.
 
Click Build. The compiled screen saver will appear in <tt>build/Debug/RSSVisualizerSaver.frss</tt>.
  
===Running the Plugin===
+
==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:
 
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:
  

Latest revision as of 08:18, 30 December 2012

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. "RSSVisualizerSaver"

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