Decision
Zero third-party dependencies
over Swift Package Manager libraries
Everything sits on AVFoundation and SwiftUI, so there’s no supply chain to audit and nothing breaks on an iOS update.
A native iOS music player built from scratch — a real 10-band parametric EQ, streaming and local playback, 157 tests, and zero third-party dependencies.
I wanted one app that streams from YouTube and plays my local high-quality files, with an equalizer good enough to matter — and I wanted to understand every line of it. So: no third-party packages, and a test suite that lets me refactor audio code without fear.
YouTube can’t be embedded cleanly on iOS, and local audio needs careful file handling, so the hard parts were stream resolution, a real EQ signal path, and never losing a user’s library.
@MainActor.SwiftUI views observe @MainActor managers. A dual playback path routes local files through an AVAudioEngine EQ and streams through AVPlayer; a small Python service resolves YouTube so the app holds no keys.
Decision
over Swift Package Manager libraries
Everything sits on AVFoundation and SwiftUI, so there’s no supply chain to audit and nothing breaks on an iOS update.
Decision
over one player for everything
Local files run through an AVAudioEngine EQ graph; streams use AVPlayer. Splitting them keeps the equalizer honest without breaking streaming.
Decision
over an embedded API key
A tiny Python service resolves stream URLs, so the shipped app carries no secret and the resolver can change without an app update.
Decision
over manual QA
Import, orphan cleanup, EQ transitions, and missing-track routing are all covered, so I can refactor the audio path without regressions.