I’ve always wanted to do this: I rewrote almost all of SongPocket’s internals, but because nothing’s new for users, I only bumped it to v3.5.2. 🎩
Specifically, I rewrote how it positions albums and songs, and saves those positions to storage.
The goal
SongPocket lets you reorder albums and songs, so it stores the position and Apple Music ID for each.
To do that, it used to use Core Data, which provides both runtime structures and persistence. Those are separate under the hood; you use different code to handle RAM and storage, because RAM is fast but temporary, while storage is slow but persistent.
So why replace Core Data? I’m preparing to someday switch from Media Player IDs to MusicKit IDs, which’ll require changing the persistence system anyway. I could migrate to a new Core Data model or to SwiftData, but I chose … 🥁
SongPocket is the best damn music viewer I know of. I made it for myself.
You can’t unsee reordering. How come you can reorder your to-dos, but not your albums? Your collection feels so personal when you can arrange it just so.
Artwork goes edge-to-edge because phones are tiny compared to vinyls. You don’t even need to play an album to see it at full size.
And the play confirmation prevents accidental interruptions. It makes other apps feel like hot coals.
In Tog on Interface, Tog designs a picker for selecting one or more options, but not none.
Think languages or time zones: you need one; you can have more; you can’t have none.
We actually don’t have a dedicated component for this, even today. We use checkboxes for multiple selection, and disable continuing when none are selected.