Migrate delegate callbacks to an observer pattern
Highlights
- API: Switched from delegate callbacks to an observer pattern (one-to-many). Implement FRadioPlayerObserver and call
addObserver/removeObserver. - Streams: Added support for non-live (file) streams with duration/currentTime updates, seeking, and more robust state handling.
- Packaging: SPM-only. Removed CocoaPods/Carthage files and Travis CI.
- Swift version: Bumped to Swift tools 5.5 (Xcode 13+).
- Demo app: Revamped SwiftUI-only demo (iOS 15+):
- Reorganized into Views/Models/Resources; cleaner UI; uses AsyncImage for artwork.
- Generated with XcodeGen (no .xcodeproj in repo).
- CI: Added GitHub Actions
- spm.yml builds and tests the library.
- demo.yml generates (XcodeGen) and builds the demo.
Migration notes (delegate → observers)
- Before (delegate, one-to-one):
player.delegate = self - Now (observers, one-to-many):
player.addObserver(self) // conform to FRadioPlayerObserver
// optionally: player.removeObserver(self)
Observer callbacks to implement
radioPlayer(_:playerStateDidChange:)radioPlayer(_:playbackStateDidChange:)radioPlayer(_:itemDidChange:)radioPlayer(_:metadataDidChange:)radioPlayer(_:artworkDidChange:)radioPlayer(_:durationDidChange:)radioPlayer(_:playTimeDidChange:duration:)