June 20 2007 Patch (aka the YouTube Patch)

From AwkwardTV
Revision as of 22:45, 20 June 2007 by AK2007 (talk | contribs) (Quickly Switching between old (1.0) Finder and new (1.1) Finder)
Jump to: navigation, search


As described in the Patch Over Network article, the AppleTV goes out to mesu.apple.com perodically and checks for updates, much like Software Update on "real" OS X works.

The DMG is accessible from http://mesu.apple.com/data/OS/061-2988.20070620.bHy75/2Z694-5248-45.dmg. It weighs in at 179MB (188,072,708 bytes)

**Forum discussions are located here"**

Full file listing of the disk image

file list is here

What has changed in the update from the original vanilla factory image?

Diff file is here

Added Items

  • A new appliance with YouTube integration: YT.frappliance.
  • A new screensaver: slideshow.frss.
  • A new version of BackRow.framework, now updated to version 2.1 (seems to be the one used in the WWDC Leopard release).
  • A new framework, AppleTV.framework, containing everything AppleTV-specific from BackRow version 2.0 (screensavers, hardware, sw update).

Removed Items

  • Most of the OS X installation is gone: LoginPlugins, OpenDirectory plugins, Printing support frameworks, many support apps and suchlike.
  • All remote filesystem support is gone: automount, mount_afp, mount_smbfs, mount_webdav, etc.
  • AppleFileServer is gone. The symlink in /usr/sbin remains, but the app in /System/Library/CoreServices is gone.
  • VNC

Tweaking Plugins to work with BackRow v2.1

Two things must be changed to make appliance plugins compatible with BackRow v2.1:

  • Change the CFBundleIdentifier in your appliance's Info.plist so it begins with "com.apple.frontrow.appliance".
  • Change the fake class name returned from the +className override to something like "RUIMoviesAppliance".

In the new version of the BackRow framework, there is a new class called BRFeatureManager. This uses strings to record whether certain features are enabled or disabled (the strings/keys are entirely arbitrary btw, so we can use this ourselves). I believe this is mostly designed to enable parental controls, but the part of the implementation as it concerns the main menu now filtering appliances goes like this:

  1. BRFeatureManager looks up the given 'key', which in this case is an appliance plugin's CFBundleIdentifier.
  2. If the key is present in the feature dictionary, it returns the YES or NO depending on the object for that key (an NSNumber).
  3. If the key is not present, it checks whether the key begins with "com.apple.frontrow.appliance".
  4. If it does, the manager returns YES, enabled. Otherwise it returns NO, not enabled.

So, it looks like the simplest way to get past the new BRFeatureManager in a backward-compatible way is simply to change your bundle identifiers. The other alternative is to add this initialize function to your principal class:

+ (void) initialize
    Class cls = NSClassFromString( @"BRFeatureManager" );
    if ( cls == Nil )

    [[cls sharedInstance] enableFeatureNamed: [[NSBundle bundleForClass: self] bundleIdentifier];

What is known about the update so far

-It will erase any modifications you've made to the Apple TV OS such as installing SSH, AFS, and special network mounts, however your Media partition will stay intact.

-All plugins will need to be tweaked and recompiled to work under the new firmware due to changes in the BackRow Classes.

-The firmware update seems to contain everything you would need to make your own patchstick legally without having to open up your Apple TV. It may also be possible to do a DNS Redirection for the update server url and point the Apple TV to your own customized filesystem updating the ATV over the network with an OS that has all of your plugins and settings pre-installed.

-Most network filesystem support has been removed

-The update includes some new code called: 'RUIDVDAppliance' This could mean a HD DVD / BlueRay addon for Apple TV is in the works?!?

-There appears to be support for pin-code protected parental controls

Safe Update

The update patch removes several features including Apple File Sharing and other network functionality. Other than the items listed below the update doesn't seem to have any other enhancements. With the update you also lose all customizations and hacks. An alternative method can be used for updating. Using this method will preserve all your hacks and changes to the system. The plugins wil have to be added again:

 0. Don't update the AppleTV using the update feature
 1. Backup /System/Library/PrivateFrameworks/Backrow.Framework
 2. Backup /System/Library/CoreServices/Finder.app
 3. Download the update dmg file from the link above
 4. Open the dmg file and locate Backrow.Framework and AppleTV.Framework 
 5. Copy them to /System/Library/PrivateFrameworks on AppleTV
 6. Locate Finder.app from the updates dmg and copy it to /System/Library/CoreServices on AppleTV
 7. optional - insert       mesu.apple.com in the /etc/hosts on AppleTV so it can't reach the update server

If your system has already been updated you should be able to do a factory restore, patch the system again to get ssh then the follow the above steps, that way you will not lose the network connectivity and other features that have been removed.

Quickly Switching between old (1.0) Finder and new (1.1) Finder

 1. Copy or rename the old(1.0) Backrow.Framework to /System/Library/PrivateFrameworks/Backrow.Framework.1.0
 2. Copy or rename the new(1.1) Backrow.Framework to /System/Library/PrivateFrameworks/Backrow.Framework.1.1
 3. Copy or rename the old (1.0) Finder.app to /System/Library/CoreServices/Finder.app.1.0
 4. Copy or rename the new (1.1) Finder.app to /System/Library/CoreServices/Finder.app.1.1
 5. Make sure you don't have a Finder.app or Backrow.Framework the following scripts will create symlinks for you

To run the old(1.0) Finder run this script

 rm   /Volumes/OSBoot/System/Library/CoreServices/Finder.app
 ln -s /Volumes/OSBoot/System/Library/CoreServices/Finder.app.1.0   /Volumes/OSBoot/System/Library/CoreServices/Finder.app
 rm   /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework
 ln -s /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework.1.0  /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework
 ps ax | grep 'Finder' |awk '{print $1}' |xargs kill

To run the new(1.1) Finder run this script

 rm   /Volumes/OSBoot/System/Library/CoreServices/Finder.app
 ln -s /Volumes/OSBoot/System/Library/CoreServices/Finder.app.1.1   /Volumes/OSBoot/System/Library/CoreServices/Finder.app
 rm   /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework
 ln -s /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework.1.1  /Volumes/OSBoot/System/Library/PrivateFrameworks/Backrow.Framework
 ps ax | grep 'Finder' |awk '{print $1}' |xargs kill

You must be root and the system must be rw for these scripts to work.