Under The Microscope

SoundSource 2.5 and a Story About the Menu Bar

SoundSource IconEarlier today we released SoundSource 2.5, an update to our audio device switcher. SoundSource is a handy little tool for rapidly adjusting the audio input and output devices on your Mac (switching between microphones or various speakers or headphones, for instance). Our new version 2.5 features full compatibility with Mac OS X 10.6 (Snow Leopard), and now requires Mac OS X 10.5 or higher.

Although SoundSource 2.5 does not have any new features, it has changed dramatically internally. The first place you will notice this, is right after you expand the .zip file it comes in: SoundSource is now an application.

A bit of background is probably needed here before that statement will make much sense. On Mac OS X, there are two ways to display little icon-and-menu-thingys in the menu bar.

The first method, is something called a “menuExtra”. All of OS X’s built-in menu bar bits are done with menuExtras: the Volume control, the Clock, the Airport menu, and so on. You can see the whole list of them at: /System/Library/CoreServices/Menu Extras. MenuExtras offer several nice features. First, if you double-click them they will load in the menu bar, and automatically open again each time you login. As well, you can command-click on them and drag them around, putting them in any order you like. Finally, if you want to remove one, you can command-click on it and drag it right off the menu bar. They’re very nice all around. Unfortunately, their usage is limited to Apple applications only.

The second method for getting an icon-and-menu-thingy into the menu bar, is something called an “NSStatusItem”. Nearly all third party applications that put things in the menu bar, for example Airfoil Speakers, use NSStatusItems. Unlike menuExtras, StatusItems have no nice features. They display in the order they are opened in, they can not be reordered, and removing them from the menu bar typically means quitting the application that is providing the StatusItem. All around, StatusItems generally provide an inferior experience compared to menuExtras.

NSStatusItems do have one very important feature on their side however: Apple officially supports their usage. Because menuExtras run as a plugin within the system process SystemUIServer, Apple does not allow third parties to create their own. Various methods of getting around this limitation (such as MenuCracker and MenuExtra Enabler) have long existed.

For all versions of SoundSource until now, we have used MenuExtra Enabler to allow SoundSource to exist as a menuExtra. This enabled it to behave like it was any other built-in system component, with full drag-and-drop support. As of SoundSource v2.5.0 and Mac OS X 10.6, we’ve finally given in, and converted SoundSource to be an NSStatusItem running as its own standalone application.

The reason is primarily one of defeat. With every new release of Mac OS X, MenuExtra Enabler breaks and requires updating. We simply no longer care to fight Apple on this front. When it was relatively easy to improve SoundSource’s user experience by making it a menuExtra, we did so.

We now also believe that providing a good user experience in this area is Apple’s job and not ours: NSStatusItems should simply behave as menuExtras do, and if they don’t, the burden of fixing that is on Apple.

That all said, SoundSource running as its own application is not all that terrible. It is a little annoying to not be able to move it around the menu bar, but there are some benefits. We no longer need an installer for it and it can live in your Applications folder like any other application. It’s also easy to open and close, and delete when you are done with it. And if we’re lucky, SoundSource may even work on OS X 10.7 without requiring an update.

That, and we got a pretty new icon for it.

Our Software