Welcome to Cesium 5

The goal when working on Cesium 5 was to optimize as much as possible for smooth, reliable performance. As Apple continues to evolve the Apple Music platform, it is clear that there is a lot of continual work going into updating their playback API to support the new service. Unfortunately some of these changes affect undocumented functionality that certain advanced features in Cesium rely on.

Building a layer of functionality on undocumented (and therefore subject to change) behaviour was always a gamble; but as long as it was working and changes could be navigated, it was best to keep letting it roll. This became a considerable challenge with iOS 11 and 12. Some tough decisions needed to be made to restore the Cesium user experience to what users should expect, and to ensure that Cesium is reasonably future-proof moving forward.

Cesium 5 has been built API-safe, using only officially documented functionality. Below is an outline of how this has affected the previous feature set, and what features have had to be removed.


Feature Description
Custom Queue Management Apple has never provided public access to the contents of the system queue. Cesium implemented a workaround, but in iOS 11 results were limited to the first 500 items, and in iOS 12 that was further reduced to 100. The necessitates a lot of additional dependency (caching and recontextualizing larger queues) to maintain functionality. Unfortunately, whatever changed in iOS 12 reduced the reliability and stability of making so many calls to the system, causing performance issues. Tracks can still be queued up to Play Next or Play Later, but viewing, reordering, or deleting tracks from the queue has been removed.
Playback History Without a home in the UI, tracking playback history has been removed. This functionality can easily be recreated with a Smart Playlist.
Queue Resume Recontextualizing the playback point in a cached queue was always problematic because the system did not always update tracks’ dateAccessed property. More significantly are the issues with fetching and comparing the cached and current system queues, which are described under Custom Queue Management.
Shuffle Modes Custom shuffling by album or grouping (and unshuffling these queues) were built upon the abandoned custom queue model. Cesium 5 includes a new “Randomize” sort option for playlist tracks that, when paired with playlist collections, provides the same functionality.
Shake to Shuffle Only worked when Cesium was open, which was not strictly consistent with the typical usage pattern.
Tab-Specific Search I 😍 the new integrated NavBar search bars, but they are buggy as hell when you put them in multiple tabs. Just keeping the single Search tab working with the "More" tab is challenge enough.
Multi-Genre Support Multi-Genre support was independent of any Apple API issues, but it had a significant "quirk" that could not be overcome without a significant performance hit. In the spirit of something that "just works", it was been replaced with the original "straight" treatment of the Genre field.
Star Ratings Handling of star ratings didn't seem to get an update with the introduction of iCloud Music Library. Local changes do not propagate to the cloud (or by extension other devices), and in some cases the original value in the cloud overrides and undoes the local change. Ratings are not being removed entirely, but their presence is being deprecated.
Love/Dislike Despite being present in previous version of Cesium, this functionality has never been publicly documented by Apple.
Today Widget With ratings and Love functionality removed, the Today Widget provides no meaningful functionality over the iOS default.

It seems like a lot, and I realize that there are several popular features on that list. I feel strongly that Cesium 5 still represents the best iteration yet. It is leaner and more stable, with a renewed focus on powerful sorting and grouping tools and beautiful UI. I hope you enjoy it!