Under The Microscope

Archive for November, 2009

Airfoil Speakers Touch: Correcting Misconceptions

Since we posted our article on our difficulty in updating Airfoil Speakers Touch on the iPhone App Store, we’ve had a lot of great feedback. However, we’ve also had some feedback that appears to be based on misconceptions about just what the trouble is or just what Airfoil Speakers Touch is actually doing. I’d like to take a moment to address these and more fully explain exactly what’s happening behind the scenes.

The AirTunes protocol, which Airfoil uses to communicate to remote speakers, supports sending album art to remote speakers. We initially used this capability to display a badged screenshot on the Apple TV, as detailed in a previous UTM post. Airfoil Speakers Touch just displays this same image coming from Airfoil.

I’d like to address some specific points that people have brought up.

None of these icons are shipped in our apps
On the iPhone side, Airfoil Speakers Touch just displays a generic “album art” image that comes from Airfoil. On the Airfoil side, both the Mac image and the application icon are fetched using public Cocoa APIs.

The call we use to fetch the computer image is [NSImage imageNamed: NSImageNameComputer]. Behind the scenes, the system has a store of machine icons stored away in the /System directory, and matches up your computer’s model identifier with their artwork to return an icon.

The call we use to get the target application’s icon is -[NSWorkspace iconForFile:], which can be used to obtain the icon for any file on the system. Applications such as the Finder would use this call to display the icons of files and applications on the hard drive when browsing its contents.

The code is not specifically designed to send Apple’s icons
The code is fully generic and simply sends the icon of whatever application the user chooses on the Mac side. Apple applications are popular audio sources for Airfoil, but it’s entirely possible to send third-party applications like Firefox, Spotify, Last.fm, our own Pulsar, and others, and many users do just that.

Use of these icons does not infringe trademark or copyright
Airfoil Speakers Touch’s display of these icons falls under fair use. If there’s any doubt to this, look at all the places where Apple displays other people’s icons without their explicit consent, like the Finder, the Dock, Spotlight, etc.

Daring Fireball also has a good, in-depth discussion of various arguments put forth, including a look at just what the iPhone SDK agreement says.

Ultimately, this is not a trademark issue, but simply a matter of Apple enforcing arbitrary and inconsistent requirements for iPhone applications. There’s no legal requirement for them to forbid use of their icons, and no benefit to them in doing so. By insisting on not allowing us to display their icons, Apple is simply wasting everybody’s time, including their own, and inconveniencing our mutual users.

Airfoil Speakers Touch 1.0.1 Finally Ships

First, the basics: Airfoil Speakers Touch version 1.0.1 is now available in the App Store. This update fixes issues with audio sync that could be heard when audio was playing to multiple outputs. If you haven’t used Airfoil, it will let you send any audio from your Mac or PC out to the AirPort Express, Apple TV, other computers, and with Airfoil Speakers Touch, to your iPhone or iPod Touch.

There’s a bigger story here, however. It’s one that’s been told before, but until things change, it needs to keep being told. Simply put, the App Store is broken.

Over Three And A Half Months

Our problems began back in July, when we first submitted this bug fix for Airfoil Speakers Touch to the App Store. While we generally disliked the restrictiveness of the review process, we’d never had any direct problems with it. Further, this was a mere bug fix – it just improved the way audio was received. It was functionally identical to the already-approved version 1.0.0. As such, we expected to have this update available by the end of July or early August.

Not. even. close. Today, over three and a half months after we initially submitted our bug fix update for review, it’s finally available. So what happened?

Our First Two Rejections

After our first submission back in July, Airfoil Speakers Touch was rejected, for using “Apple Logo and Apple-owned Graphic Symbols”.

Apple Logo and Apple-owned Graphic Symbols:

You may not use the Apple Logo or any other Apple-owned graphic symbol, logo, or icon on or in connection with web sites, products, packaging, manuals, promotional/advertising materials, or for any other purpose except pursuant to an express written trademark license from Apple, such as a reseller agreement.

It wasn’t clear what precisely this was about, but if you’ve used the application, you’ve likely seen something similar to this screenshot:

As you can see, Airfoil Speakers Touch displays an image of the sending Mac, with a screenshot showing the source application. If you’re sending from an iMac with Safari as your source (as pictured), it shows your iMac running Safari. If you’re sending from a MacBook Pro, it shows a MacBook Pro, and so on. These computer images are provided by Mac OS X itself, using a public function expressly for this purpose.

We also show the source application’s icon – Safari in the above example. This icon also comes from a public function provided by Apple as part of Mac OS X. These functions are expressly made to enable developers to get this artwork, and use it just as we are.

We’ve done this before, in Airfoil on the Mac and Windows, when we talk to the Apple TV. It’s a nice little bit of polish, but it’s also functional – it lets the user verify what machine they’re receiving from, what source application, and what that source application is doing. Nonetheless, it seemed from this rejection that Apple wanted it out.

Naively, we simply re-submitted the application without changes, in the hopes of getting a more sensible reviewer. A full four weeks later, on August 31st, we were rejected again.

Our Third, And Final, Rejection

At this point, we knew we needed to talk to a real person. Perhaps, we reasoned, an app reviewer was simply reading their guidelines and following them overzealously. Following Craig Hockenberry’s advice, we sent an email to the App Review address, explaining how our application worked and why we felt there were no trademark issues. Eventually, on September 2nd, we were told to resubmit the application for further review. Then we waited.

On September 12th, we received a form email stating that the review was taking longer than expected. No other information was given.

On September 21st, we emailed to ask where we were in the process. On the 22nd, we were again told it was “still undergoing a review process”, with no additional detail.

Finally, on October 5th (over a month since the most recent submission, and almost two and a half months since our initial submission), we were contacted by an Apple employee via phone. We were told that despite our explanation, Apple was unwilling to ship this update, and it would again be rejected.

However, later that day a second Apple employee phoned. He was a fan of our products, and wanted to take another crack at getting this approved the way it was. With a mixture of hope and trepidation, we provided him even more details, and awaited his reply.

In mid-October, he called again, saying that there was nothing for it. In order to ship our update, we had to stop showing both the computer images and Apple’s app icons. It didn’t matter that Apple provided us with code expressly to enable us to show these, nor that the same functionality had been previously approved. We’d reached the end of the road – if we wanted to ship this update, we had to remove the functionality.

“When angry, count to four. When very angry, swear.”

Needless to say, we were quite upset. There was no change between the approved 1.0.0 and the new 1.0.1 – this functionality had already been approved once. Further, if simply showing another application’s icon is a trademark issue, then the software world is going to need to make some drastic changes, and Mac OS X’s Dock will be the first to go.

Worst of all, however, Apple left 1.0.0 in the store, a buggy version being downloaded hundreds of times per day. The exact same “infringing behavior” could be found in 1.0.0, and they weren’t taking that down. As such, the only thing Apple’s process was doing was preventing a needed bug-fix from reaching the hands of our mutual customers.

Bend, Don’t Break

Of course, being angry wasn’t helping our users, and that’s always our goal. We didn’t want to remove functionality to do it, but we had little choice, because Apple controls the means of distribution for iPhone software. We had to compromise.

Now, when you receive audio on Airfoil Speakers Touch, you’ll see a generic computer screen, not your specific Mac. Further, if you’re receiving audio from an Apple app, such as Safari, QuickTime Player, or iTunes, you’ll see this:

If you tap the artwork in Airfoil Speakers Touch, you’ll be taken to this page, providing a pithier summary of the situation. Is it likely to change anything? Probably not. But it was the only way we could remove this functionality and still sleep at night.

What Now?

As noted on that page, we urge you to do two things. First, be aware that Apple is acting as a gatekeeper, and preventing you from getting the software that developers such as ourselves are trying to provide you. We wanted to ship a simple bug fix, and it took almost four months of slow replies, delays, and dithering by Apple. All the while, our buggy, and supposedly infringing version, was still available. There’s no other word for that but “broken”.

Second, consider donating to the EFF. The change we made to Airfoil Speakers Touch wasn’t their idea, nor have they endorsed it. However, in addition to being one of Rogue Amoeba’s favorite charities, they’re also the organization defending the rights of both consumers and developers in the digital world. If Apple is to change, it may take such an organization to make it happen.

Focusing On The Mac

In the future, we hope that developers will be allowed to ship software without needing Apple’s approval at all, the same way we do on Mac OS X. We hope the App Store will get better, review times will be shorter, reviews will be more intelligent, and that we can all focus on making great software. Right now, however, the platform is a mess.

The chorus of disenchanted developers is growing and we’re adding our voices as well. Rogue Amoeba no longer has any plans for additional iPhone applications, and updates to our existing iPhone applications will likely be rare. The iPhone platform had great promise, but that promise is not enough, so we’re focusing on the Mac.

Hear All About Us: Geek Speak

Yesterday, I had the honor of appearing on GeekSpeak, broadcast on KUSP and heard across the internet. The show started with a discussion of various technical stories, then discussed several pieces of Rogue Amoeba’s software.

You can check out the show right here – have a listen!

Software in Action: Airfoil Speakers in the Lab

Here at Rogue Amoeba, we sometimes hear about interesting uses of our software that are worth sharing. Starting today, we’ll be doing just that, in an occasional series called Software in Action.

Airfoil in Action ThumbnailAfter seeing some tweets about how he was using Airfoil Speakers, we got in touch with Joachim Bengtsson, who gave us a great overview on how he’s using Airfoil Speakers.

I work for Blekinge Institute of Technology, more specifically their labs (called REAL), where I write Cocoa and Erlang all day long. The Mac Minis are for running the distributed simulation engine we’re working on there. The same day I had performed this experiment, which you probably saw on my twitter; I had been tasked to prepare the minis, install erlang and xcode on them and such, and I just couldn’t help but to throw Airfoil into the mix.

When my coworkers aren’t around, I max the iMacs (four of them) plus my own computer for some pretty good sound (like in the video on my blog); sometimes one of them hiccups a bit and gets de-synced, but I’m always impressed every time it re-syncs without even stuttering or noticeably changing pitch or anything like that, within a second.

While he normally uses Airfoil and the free Airfoil Speakers with a half-dozen machines, in the screenshot you can see Joachim playing audio through fifteen different machines. We’ve stress-tested Airfoil with multiple AirPort Express units, as well as multiple machines, but this tops any testing we’ve done. Thankfully, Airfoil is up to the challenge!

Are you using our products in an interesting or obscure way? Let us know!

Macworld 2010: Come Join Us

The end of 2009 is fast approaching, along with the beginning of 2010, and that’s got us thinking about Macworld Expo in San Francisco. I’ve talked about Macworld 2010 before, but a reminder may be useful, as we’re now just over 3 months away.

Details
Dates: February 11th – February 13th, 2010
Times: 12 PM – 6 PM (Thursday), 10 AM – 6 PM (Friday, Saturday)
Location: Moscone Center, San Francisco

If you’ve been to Macworld before, you know what to expect. There will be hundreds of Mac vendors coming together with tens of thousands of Mac users to talk about the software and hardware we all use every day. If you’ve never been, now’s the perfect time. In fact, Exhibit Hall passes for the Expo are $25, but we’ve worked with Macworld to get 500 free passes for our readers.

Register now and use Priority Code RAMW2010 (type it in then hit the Return key) to get your free Exhibit Hall pass.

Once you’ve registered, mark down 2/11/2010 through 2/13/2010 in your calendar, and put our booth number (#1545) in there too. We’ll see you in San Francisco!