Weekend project: ShairPort menulet

Update: New version built around a native Cocoa port of ShairPort, MacShairport: ShairPort-v0.2.1.zip)

Recently an open source emulator for AirPort Express / AirTunes was released by James Laird. I’ve been waiting for something like this for a long while to enable remote music playback on my media center from my laptop and iPhone. However, I lack the hardware skills to extract the necessary firmware from the AirPort Express ROM chip. Thanks to James for doing the work and putting out his perl script / c utility. It’s pretty simple to build and run, and the source includes a nice OS X launcher script, but I’m looking for a little GUI widget to easily control it lest someone ‘inadvertently’ decides to send audio to my computer.

I’ve been lately transitioning my iPhone-specific Cocoa knowledge to the desktop; this was a nice opportunity to wrap up the ShairPort scripts in an OS X menu bar widget. The source is available on Github, and you can get the bundled app below. This was made for my specific system, so YMMV.

ShairPortMenu: [download]

Tags: , , , , ,

17 Responses to “Weekend project: ShairPort menulet”

  1. Toby Adams Says:

    Looks like your first off the bat with this one, looks like a great start! Do you think in future builds that the shairport source files might be included?

  2. Robert Says:

    Yes, I’m thinking about including the shairport repo as a git submodule. Building hairtunes could also be done by the Xcode project, maybe in a script or as a target dependency. Still have to have a way to install libao and the perl dependencies, though.

    This was quick and dirty…but that’s some good advice. Thanks!

  3. Lars Says:

    Hmm… It doesn’t seem to work here – on neither of my machines.
    Same problem, the app lanches, but whenever I turn the server on, it seems to be activated for a brief moment and then it goes gray again.

    Tried with some different names, also both with and with password…

    But great effort! The app looks exactly what I hope such an app would look like! :D

    Mange tak!

  4. Robert Says:

    You probably have to ensure that shairport / hairtunes can run standalone. Specifically, there are two perl modules and a library described at the shairport github site.

    In a future update, it would be nice to include that step, perhaps as an installer…but for now this is just a GUI wrapper.

    Good luck!

  5. Robert Says:


    Try the updated version. You will still have to add the necessary perl modules described at https://github.com/albertz/shairport but the hairtunes bit should work.

  6. sean Says:

    thanks so much for building this.. i can’t seem to get it to run on 10.7 though. do i need to have shairport installed as well? if this is the case, could you please write a tutorial for us dummies? =)


  7. Robert Says:

    Running a pre-release OS and you’re looking for a tutorial “for dummies” :) ?

    In brief, no you don’t need to install ShairPort separately, but you need to have the perl dependencies installed as described at the ShairPort github site. I included a compiled copy of libao, but it may not work (at least it didn’t on my work computer).

    Thanks for the report; I’m thinking of changing to using the Cocoa port of ShairPort to eliminate the perl deps and all.

  8. Paul Cook Says:

    A +1 thanks for some great work, and interest in a MacShairPort version of this menulet. Though MacShairPort also needs a little work to be completely reliable, but in the longer term it certainly makes sense as the foundation for your menulet.

  9. sjobs Says:

    Thanks! That’s exactly what I have been looking for in the last few years!

    It would be even better if you can bring this to iOS! I really want to use my old iPhone 3G and over armv6 iDevices as wireless IEMs!

  10. Jon Mcdowall Says:

    Excellent work.
    Tell me Why when I start to streaming from my iOS device to the Shairport quits suddenly?

  11. Robert Says:

    Probably because it crashed, but it’s difficult to tell without the crash report. If you wanted to provide it, you could get it through the Console.app.

  12. Aaron Says:

    Looks awesome but I just keep getting the following error when I start sharing:

    “The operation couldn’t be completed. (MSShairportServer error -1.)”

    I don’t think it is specific to your wrapper but an error of the ShairPort itself. I’m running 10.6.7.

  13. fish Says:

    robert: this works fantastically, thanks!

    everyone else: fyi, to get the binary to work, one must make sure to do these things:

    1) use CPAN to install the perl module Crypt, and after that, Crypt::OpenSSL::RSA (explicitly).
    2) install homebrew (if you don’t have it already)
    3) install libao using homebrew — the homebrew-specific path to libao is hardcoded in the build’s copy of Shairport, is why you should use homebrew, specifically. yes.

  14. Peter Says:

    After a couple of hours of trying and failing to install from the shairport source I found this – brilliant work, thank you.

  15. Dmitry Says:

    Hi Robert,

    Thanks for this nice tool.
    Do you know if shairport can be run at startup with “Shairport on”?

  16. dingo Says:

    Shairport crashes against an iPod 4th gen with iOS 6. I’m on 10.6.8. Can I ask for an update? Your app is the best, simplest and free solution out there.

  17. Robert Says:

    Please grab a crash report and post it to the ShairportMenu github page:

Leave a Reply