BackRow Developers’ Kit
Note: The BackRow Developers’ Kit currently does not offer support for Apple TV version 2.0. I hope to remedy this in the near future. This will require Xcode v3.1, so the final BDK v2 will have to wait for that to be officially released.
I’ve posted a couple of movies (pure QuickTime .mov files there) showing off the state of this project over the past couple of weeks, but now it is finally available in its entirety. It includes a few extra features not mentioned in the earlier posts, which I’ll detail here, along with some caveats on its usage and a rough introduction to the product. Full information will be available in the online help for the BackRow Test application itself, including a quick tutorial to help get you up & running.
Update: Since the appearance of this site on MacNN today, I’ve had to get myself a better class of file server. So what once was hosted at the Internet Archive, is now hosted locally: The video version of the BDK’s Introductory Tutorial; MPEG-4/H.264, 1152×720, 100.3MB.
Update 2: I’ve now replaced the big file with a smaller one, which also serves as the start of my official podcast
I’ve yet to hear back on its submission to the iTunes Music Store, but for now here’s a direct link to the feed, and a link to the .mov file itself. The video this time is 576p PAL, 720×576, QT H.264.
Updated for AppleTV Software version 1.1. See the Change Log for details, and see the Changes page for information on the differences in AppleTV software 1.1.
System Requirements
- Mac OS X 10.4 Tiger with Xcode 2 and Mac OS X 10.4 (Universal) SDK
- The BackRow, AppleTV, and iPhotoAccess frameworks from your Apple TV, software version 1.1.
- Intel Macintosh required to run the BackRow Test application itself
Features
Headers for the BackRow framework, iPhotoAccess framework, and QuartzComposer frameworks.
These are all that’s necessary to build and run your appliance plugins and the BackRow Test application. You need to provide the actual BackRow, AppleTV and iPhotoAccess frameworks yourself, however, and place them into /System/Library/PrivateFrameworks/.
A project template for Xcode.
This template provides everything necessary for starting your own appliance plugin. It creates the Info.plist with the required elements, creates Appliance and ApplianceController classes, and links in the appropriate frameworks (Foundation and BackRow) for you.
The BackRow Test application.
This is the real meat of the device, the application which simulates the basics of the Apple TV software system. It doesn’t include the iTunes or iPhoto bits, but it will run everything implemented in the BackRow framework itself.
Using the Test Harness
Full documentation is included in the application help. That describes how to use the project template, best practices for setting up your project, and how to use the BackRow Test application as a custom executable within Xcode.
Internals
I’ll not go into too much detail here, but this is (broadly) how the test application works:
I created a controller class (similar to the one used by the Finder) which manages the BRRenderer and the BRControllerStack, and is the first responder for IR Remote events. I also created a class to receive and interpret IR remote events, turning them into BREvent objects as necessary, following some rules gleaned from observing these events within a test version of the Loader plugin.
The BackRow interface is placed in a window by using a custom subclass of BRRenderer, which in this case is the owner of a nib file containing a window with a subclass NSOpenGLView. The GLView here is linked in via subclasses of BRRenderContext, BRRenderPixelFormat, and BRRenderScene, which wrap the NSOpenGLContext itself. The NSOpenGLView subclass implements the -keyDown: and -keyUp: NSResponder methods to handle the keyboard, and uses those to build and post BREvent objects via the BREventManager singleton.
Lastly, there are some subclasses of core singletons, along with some ObjC runtime method-swizzling to get their +sharedInstance-type methods routed to my subclasses. Things overridden in this way include BRAppManager, which now hooks into NSApplication and makes itself act as a ’sub-application’ connected to the NSWindow-based BRRenderer subclass, and BRDisplayManager, to stop it from trying to grab the display, and also to stop it eating & discarding all CGEvents.
All in all, surprisingly little code was required (outside of the IR controller and app controller classes) to get this up & running, which is a testament to how well-designed the BackRow framework is itself.
Credits
The application was written by me, but a big thank-you goes out to AwkwardTV’s BigBaconAndEggs for his fantastic work on the application icon.
The Download
BDK Version 1.1.1, 3rd August 2007
The BackRow Developers’ Kit Installer
Next Steps
You can go and look at some BackRow programming tutorials on this site, you could browse the AwkwardTV wiki and forum for more information, or you can always reach me at #awkwardtv, where I reside under the username alan_quatermain.


