← Projects

iOS Music App

Offline iOS music player for local files with system playback.

Summer 2025 · iOS · Completed personal project

Hand-drawn early music app sketch with Play buttons, Auto Generated, Artists, and All sections
The first spec: a few boxes and labels on one page.

Stack

Stack: Swift · AVFoundation · MediaPlayer

No internet at the campsite. Audio files already on the phone. The app had to feel native enough that I would actually use it.

Log

  1. Aug 2025 — Davis Mountains

    Drove out to the McDonald Observatory dark-sky site. Zero LTE across the valley. Starlink on the picnic table covered the laptop, but the phone in my pocket was on its own. The files I wanted to hear were already in Files; that was reason enough to build a local player.

  2. Day 1 — paper

    Sketched the whole app on one sheet of notebook paper. Five rectangular buttons, no icons, no styling. That was the spec.

  3. First playback

    Pointed AVAudioPlayer at a local MP3 already on the phone and called play(). Sound came from the iPhone speaker without a network connection. The first playback took about thirty lines of Swift: a useful proof of concept, not the whole app.

  4. Library

    Replaced the paper buttons with a real Music Library: a dark-mode grid populated from local file metadata. Tapping a cover opened Now Playing with that track's art and title.

  5. Controls

    Built Now Playing around a test track, with artwork, title, artist, elapsed time, scrubber, transport controls, and a queue button backed by player state.

  6. Queue

    A plain array backed Up Next, and the player worked through it in order. Selecting a track from the library moved it to the top; the remaining tracks followed when the current one ended.

  7. Lock screen

    Used MediaPlayer for playback metadata and transport controls so the system could display and operate current playback.

Result

Local-file music library with playback, queue, and system controls.

What I learned

The first successful play was tiny; the useful project was the library and queue around files I already had. It solved a specific offline problem on that trip. The iPhone already knew how to play the audio; the work was making the files easy to find and control.

Related