Feeds

Serve up iTunes with Apple's media browser

Give your software some soul

Beginner's guide to SSL certificates

Mac Secrets Let's stay with the iLifeMediaBrowser.framework, which we looked at last time. Previously, I showed how to use Apple's built-in media browser using virtually no code.

Following on from that, a number of folks have asked me if it's possible to use classes in the iLifeMediaBrowser library to access your iTunes library without displaying the Apple browser? Indeed it is, and this is the subject of this article.

First off, why would you want to do this? From a developer's point of view, there are lots of good reasons. Maybe you've written an alarm-clock utility and you want the user to be able to choose a "wake-up" song from her iTunes library. Or maybe you're writing an app to backup, consolidate or repair the song library. Or maybe you want multiple iTunes libraries - whatever.

If you browse the net, you'll find various techniques for interrogating the library, ranging from using iTunes with AppleScript to parsing the associated XML file. But to the best of my knowledge, the techniques used here have never been documented outside of Apple.

The key class that I'm using here is called ILiTunesMediaManager. As the name suggests, this class is the media manager for iTunes. If your interest lies elsewhere, there are equivalent classes that handle the media for other iLife applications, such as ILiMovieMediaManager and ILiPhotoMediaManager.

Instantiating an ILiTunesMediaManager object is dead easy. We simply call the sharedMediaManager class method like this:


ILiTunesMediaManager * tunesManager = [ILiTunesMediaManager sharedMediaManager];

As before, I've provided the necessary header files as part of this month's sample project. The header files were created using class-dump as described in previous articles.

Load your data

Once we've got an instance of ILiTunesMediaManager, we need to load it with data from the iTunes library: this doesn't happen automatically. To do this, you need to call the loadData method. This is asynchronous - it works away in the background - so we need some way of knowing when the job's done.

From our perspective, the simplest way of doing this is to set up a timer to periodically query the media manager to ask if it's ready yet. This can be done via the isLoaded and isLoading methods: I check them both just to make sure the media manager really is ready. If you're worried about long delays here, don't be: I've got over 1,600 songs in my library, and it loads almost instantly.

Once ILiTunesMediaManager is ready to roll, we can start having some fun. The list of available playlists is accessed, counter-intuitively, via a method called playlists.

Security for virtualized datacentres

More from The Register

next story
New 'Cosmos' browser surfs the net by TXT alone
No data plan? No WiFi? No worries ... except sluggish download speed
'Windows 9' LEAK: Microsoft's playing catchup with Linux
Multiple desktops and live tiles in restored Start button star in new vids
iOS 8 release: WebGL now runs everywhere. Hurrah for 3D graphics!
HTML 5's pretty neat ... when your browser supports it
Mathematica hits the Web
Wolfram embraces the cloud, promies private cloud cut of its number-cruncher
Google extends app refund window to two hours
You now have 120 minutes to finish that game instead of 15
Intel: Hey, enterprises, drop everything and DO HADOOP
Big Data analytics projected to run on more servers than any other app
Mozilla shutters Labs, tells nobody it's been dead for five months
Staffer's blog reveals all as projects languish on GitHub
SUSE Linux owner Attachmate gobbled by Micro Focus for $2.3bn
Merger will lead to mainframe and COBOL powerhouse
iOS 8 Healthkit gets a bug SO Apple KILLS it. That's real healthcare!
Not fit for purpose on day of launch, says Cupertino
prev story

Whitepapers

Providing a secure and efficient Helpdesk
A single remote control platform for user support is be key to providing an efficient helpdesk. Retain full control over the way in which screen and keystroke data is transmitted.
WIN a very cool portable ZX Spectrum
Win a one-off portable Spectrum built by legendary hardware hacker Ben Heck
Storage capacity and performance optimization at Mizuno USA
Mizuno USA turn to Tegile storage technology to solve both their SAN and backup issues.
High Performance for All
While HPC is not new, it has traditionally been seen as a specialist area – is it now geared up to meet more mainstream requirements?
Security and trust: The backbone of doing business over the internet
Explores the current state of website security and the contributions Symantec is making to help organizations protect critical data and build trust with customers.