Background
I’m a fan of the No Agenda Show, hosted by Adam Curry of MTV fame and John C. Dvorak of PC Magazine. Twice a week, they go over current events and assemble clips of people in the news in an entertaining fashion. It’s not straight news–it’s more “infotainment” where they poke fun at the press and people in the news.
The show plays funny “jingles” that are interspersed with the stories they cover on the show. As policy, the show does not accept commercial advertising and is entirely listener-supported. Listeners donate to the show and request sequences of jingles be played during the donation segment.
In looking through the jingle apps for the No Agenda Show, I found all of them:
- lacked search capability and...
- the ability to save playlists.
I set about creating my own app, NA Jingles. It’s a searchable library of over 150 jingles from the No Agenda Show. Individual jingles can be assembled into reorder-able playlists that persist between launches. Since my app was released, I’ve noticed the quality of the playlist requests on the show has gone up markedly. I like to think I had something to do with it.
Data persistence
Core Data solved the to major nits I had to pick with existing jingle applications. It also made implementing a search controller very easy.
I started by assembling the digital media by scouring the Internet for archived clips from the show. As the show is "open source", I contacted the owners of the various sites to request permission to use their clips as a courtesy to them. For jingles I couldn't find laying around, I ripped them myself. I assembled information about the media assets into a spreadsheet.
In order to get the digital media into Core Data, I created a JSON dictionary with the currently shipping app's version of the clips. When the app launches, it runs a check see if it's the initial launch, what version of the software is running, what needs to be added, deleted, or changed.
Challenges
Managing Media Between Versions
One issue I found to be challenging in versions subsequent to the initial release was managing media between versions. As the jingle library has grown, I've had to refactor code to manage the media between versions. The app's codebase is now to a point where it's simple to update the app's content across all versions.
Within the app, I implemented MFMailComposeViewController to enable users to send me jingle requests. As a result, I've gotten leads on new clips and original copies of staple clips from the show from the producers who created them.
Feedback
Active Feedback
I love to get feedback, but I know from my own experience that I hate being hounded for it. I utilized iRate to trigger alerts requesting user feedback. Rather than the stock alerts with iRate, I try funnel feedback so the App Store hears about pleasant experiences and I hear about gripes. Thankfully, I haven't had a lot of complaints, but I have had a lot of content requests.
Passive Feedback
One framework I've grown to love is Crashlytics. It's been an invaluable tool to aid me proactively addressing issues with code that didn't come up in my own testing.
Anyway, that's the story behind NA Jingles.