NexUp Radio is station-based, music streaming iOS Application I developed for my client (a Detroit based DJ that had already acquired a few investors for this idea). To develop this application, I utilized my experience with Swift, Google Cloud Systems, Node.JS and Apple's audio/video API (AVFoundation). I already had a few years of experience with Swift and Firebase Services (including Authentication, Real-time Database, and Storage) from iOS Apps I had developed prior to starting this project. I also had some experience using Node.JS from previous website projects. However, I had never worked with AVFoundation before. To familiarize myself with the AVFoundation API, I went through the documentation, found a few tutorials available online and started experimenting with the classes until I felt comfortable enough with the technology to start integrating it into the project.
I first had to create a system that would allow my client to continuously add in new music (around 10-20 files at a time). To accomplish this, I used Node.JS to create a script that would grab the metadata from each MP3 file added into the project's Google Cloud Storage Bucket. After adding a new MP3 file to the bucket, the script would upload all of the song's information (as well as a URL pointing to the MP3 file itself and a URL pointing to the cover art found in the metadata).
After setting up the backend, I had one more challenge to take on. I needed to create an audio engine, using AVFoundation. This audio engine would allow me to create a queue of pre-loaded songs from the storage bucket. After spending about 3 weeks working on this engine, I was able to produce substantially faster loading times than those of the audio streaming classes provided by Apple. Creating this audio streaming class was a challenge because I could only maintain a queue of about 3 songs at a time (without greatly affecting the app's performance). I solved this problem by using Grand Central Dispatch to create a function that would asynchronously replenish the queue.
Firebase was used for storing Nexup Radio’s audio files, storing metadata and user authentication.
SwiftyStoreKit was used to help simplify the In-App Purchases integration.