jPod was a free, lightweight (250 KB) Windows application for managing (current-at-the-time) iPods. It offered straightforward management of songs, videos, playlists and cover art for iPod libraries. jPod was written in C#.
The greatest challenge in writing iPod management software was interfacing with Apple’s proprietary database format. Although the hard drives of early iPods could be accessed when plugged in via USB, Apple took great pains to ensure that users could not simply copy files to the device in order to listen to them. The device maintained a database of songs, and only played files listed in the database; the intent was that users would need to install and use iTunes in order to maintain the iPod database. Not surprisingly, many people wrote software to manage the iPod database in order to avoid having to deal with iTunes. jPod was one such piece of software.
The format of the database changed with each iPod version (though they were uniformly terrible: totally denormalized, with lots of redundancy and unused data). Eventually, Apple began signing the database cryptographically (starting with the iPod Nano 4G, I believe). The data was still completely readable (not encrypted), but the iPod would refuse to play music if the database lacked the correct signature. There was no legitimate reason for adding the hashing mechanism; it was put in place specifically to make it harder to write iPod management software. Through some reverse engineering of my own and some work that I cribbed from the gtkpod project, jPod supported signing the databases.
While all then-current iPod models were supported by jPod, the iPhone and iPad represented an additional challenge. With the iOS devices, Apple perfected its technique: the devices would not even mount as hard drives when plugged in via USB. In order to support managing the music libraries of an iOS device, it was necessary to write a USB driver which exposed its file system. This was my related project, jPhone.
Last updated 15 October 2014