Appendix M: CryoTunes Player (Shop Manual)

Status: Live on the App Store as of 2026-03-26. Current version 2.4 (build 2.5). App Apple ID 6761222456. Bundle ID com.Tangerine.CryoTunes-Player. GPL v3. Public repo at github.com/fluhartyml/CryoTunesPlayer. App Store: apps.apple.com/us/app/cryotunes-player/id6761222456. CryoTunes Player is a 90's-retro-inspired iPhone music player — ice-blue motif drawn from the Winamp / Napster / LimeWire visual era, MusicKit streaming underneath. It's the book's flagship music app and the host of the shared CryoKit data layer (covered in Appendix B).

What it is

An iPhone-only retro player whose look-and-feel sits firmly in the 90's: chunky transport controls, an LCD ticker, ice-blue chrome. Underneath that surface, all playback is modern Apple MusicKit. The station catalog (80+ entries) is the same one driving Tally Matrix Clock (Appendix W) — both apps share the CryoKit Swift package.

The CryoKit dependency — DIAMOND RULE

CryoTunes Player's data layer is the CryoKit Swift package, not source local to this project. Per the package's DIAMOND RULE (Appendix B): nothing in CryoKit changes without express written consent from Michael, and Claude may never remove or subtract code there. This rule exists because the same package backs Tally Matrix Clock on tvOS — an edit that makes sense for the music player can quietly break the clock.

Anything touching stations, decades, year picks, or the station catalog itself lives in CryoKit. Anything touching the iPhone-specific UI — transport controls, LCD ticker, settings — lives in this project.

Architecture overview

The project is small. SwiftUI app, MusicKit-backed, no SwiftData (CryoKit handles the data side), shared package as the engine.

File roles:

Three-level station navigation

Stations are organized as Category → Decade → Year. Popular Hits is the spine category (decades 1958 through 2025); Big Band, Jazz Age, Ragtime, and the other genre categories sit alongside it. The user picks Category, then Decade, then Year. Each leaf builds a MusicKit query that drives the playback queue.

CryoStationPicker renders this as a button tree, not a SwiftUI Picker. The pattern matters — readers reaching Book 06 (Controls) see the "stock Picker can't carry every design" example land in this exact file.

Transport + playback

MusicKit's ApplicationMusicPlayer.shared drives playback. CryoTransportControls binds its play / pause buttons to player state and dispatches skip / stop directly. No .toolbar modifier is used here — the transport row is a hand-laid HStack because the design needed exact spacing, sizing, and pill backgrounds the system toolbar doesn't give. (Book 07 cross-references this as a worked example of when .toolbar isn't the right choice.)

LCD ticker + WeatherKit

The LCD ticker at the top of the player runs three lines on a timer: current time, current date, and local weather. WeatherKit is the source for the weather line. Permission UX is the standard one-time Core Location prompt; if denied, the line falls back to a static "−−" placeholder.

Station persistence and the silent-fail rule

The last-tuned station persists across launches, but the app never auto-plays on launch. The user re-taps the station to start playback. This is a deliberate "calm" choice — the player opens to where it was, doesn't blast audio into a quiet room.

The silent-fail-on-station-tap behavior is intentional and locked since 2026-04-29: if a station tap produces an empty queue for any reason (network, subscription state, transient MusicKit error), the app shows no error overlay. The user just sees nothing happen. The errorOverlay binding was stripped on that date because the overlay was firing on transient conditions that resolved themselves a second later; the silent failure is the better UX. StationFailureMonitor still logs the failure for the next development pass, but it doesn't surface to the user.

Build + deployment

Known gotchas

Roadmap status (from DeveloperNotes.swift)

v1.0 — "Fidget Spinner" Release (Live)

FeatureStatus
Xcode project setupDone
GitHub repo (fluhartyml/CryoTunesPlayer)Done
Wiki with hero iconDone
App icons (light + dark variants)Done
Retro 90s player UI (ice blue motif)Done
MusicKit streaming playbackDone
80+ music stations (Category → Decade → Year)Done
Album art display with song title + artistDone
LCD ticker (time / date / WeatherKit)Done
Station persistence (no auto-play)Done
Custom background image (PhotosPicker, persisted)Dropped 2026-05-03 (z-order)
Sleep timer (30m / 1h / 2h / 4h)Pending
AirPlay 2 output pickerPending
Play / Pause / Skip / Stop controlsDone
Now Playing info on lock screenPending
Settings screenDone

v1.1+ — Future Enhancements

Sources