Project Update

Building a Better Music App: Getting Organized

IMG_5910 After a long weekend of lots of ugly refactoring moving from AVPlayer to AVAudioPlayer and then back again (more than once because I couldn’t make up my mind) I decided that it would probably benefit me to get just a little more organized in my pursuit of putting together my music app. On that end, spent a few hours the other night putting my ideas on paper and then fleshing them out in a much more thought out approach. On that end, the first thing I start with as clearly defining all of the functionality I’d like my player to have by the time I graduate from Flatiron:

Overall Desired Functionality

  • Play local music
  • Play music on iTunes Match
  • Play songs from Spotify
  • Play playlists from Pandora
  • Play Soundcloud Streams
  • Scrobble to
  • Enable favoriting of songs, playlists, and artists
  • Global search across services
  • Specific search narrowed down by service
  • Location based playlists

The list is likely more than a little ambitious, but I’d rather have too much to do than too little. With all that worked out, I did more reading on various audio frameworks available and finally decided to work with MPMusicPlayer. While definitely not as powerful as AVPlayer, it’s a lot simpler to work with and gives access to iTunes Match which I feel like is a must. While it’s true that notifications don’t work while the app is in the background, I’ve found a few clever workarounds online that don’t seem too hard to implement. All in all, the simplicity of the framework over AVPlayer was just too temping for me to pass up. I’d rather be able to get basic functionalities working with ease and give my self more time to  focus on the more complex features (such as Spotify integration). The next thing I did was create a general outline of how to approach the list. While it’s not as comprehensive towards the end of the project, the beginning is pretty detailed and should now give me a good checklist of features to work my way through, as well as speed up my production process. Rather than randomly picking a feature and trying to implement it, I now have a roadmap to follow so I always know what to do next:

Create Base Music Player

  • Pull all songs from local media library
  • Initiate play/pause/skip/rewind/repeat/random playing of songs
  • Scrubbing/volume bar
  • Define audio session (play over other players and in the background)
  • Add control from lock screen and quick settings menu
  • Enable Mic Controls
  • Enable sorting: artist | album | songs (by title)
  • Enable playlists (import iPod playlists and enable creation of new ones)
  • Enable search (probably with NSPredicate)

Integrate with Spotify

  • Enable user login
  • Pull in user playlists
  • Enable playing of songs
  • Make playlists/add to currently existing playlists
  • Search Spotify
  • Add Spotify to global search

Enable Song Favoriting Integrate Pandora

  • Pull in playlists
  • Play songs
  • Bookmark playlists
  • Search Pandora
  • Add Pandora to global search

Integrate Soundcloud

  • Play song streams
  • Search Soundcloud
  • Make playlists from streams
  • integrate Soundcloud into global search


  • Enable scrobbling

Enable Location Based Playlists Finally, the last major thing I did was work on the overall design of the app. While I had originally set out to make a concept app I thought looked amazing, I decided that I’d rather make this project wholly mine and design it form scratch. I’m not the most talented designer, but I pulled together a rough sketch of the various views I plan to use in the app as well as pick a color scheme from an old Pacman illustration I love (seen at the top of the post): sketch

Leave a Reply

Your email address will not be published. Required fields are marked *