All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Report output sample rate to AVAudioSession to fix DAC support (Player)
- Disable file encription for OfflineStorage DB (Player)
- Updated Tidal API module with latest OpenAPI spec (Tidal API)
- Configure Player logger earlier to catch some possible bootstrap errors (Player)
- Fix AuthLoggable metadata in some cases (Auth)
- Added error code in logs (Auth)
- Logging in case of keychain error (Auth)
- Unify logging metadata keys (Auth)
- Fix implementation of
offlinePrivilegeCheck
in PlayerEngine (Player)
- Delete FF
shouldSendEventsInDeinit
and code related to it
- Add Offline playback privilege check (Player)
- Moved OfflineEntry expiry check behind development flag until revalidation is fully implemented (Player)
- Add TidalAPI module (TidalAPI)
- Add logic in Player to handle issue when media services are reset (Player)
- Add player item monitor for when an item reaches the end when action at end is none (Player)
- Remove old Catalogue module (Catalogue)
- Change how external players are provided so they can be changed at runtime (Player)
- Added support for
OfflinePlay
events with new OfflineEngine (Player)
- Update client configuraiton correctly in OfflineEngine when it changes (Player)
- Save the
actualProductId
when backend returns a different product than requested (Player) - Fix canPlay checks for new OfflineEngine items (Player)
- Make OfflineEngine non-optional in Player setup (Logging)
- Improved License handling for Offlined items (Player)
- Rename Offlined HLS assets (Player)
- Fix OfflineItem data race in download finalization (Player)
- Make source optional + added documentation (Logging)
- Refactor OfflineEngine Listener setup and handling (Player)
- Add
Common
product (SDK) - Add FF
shouldNotPerformActionAtItemEnd
for not performing any action when item reaches end (Player)
- Fix OfflineItem size calculation
- Fix OfflineEntry deletion edge cases
- Calculate size of downloaded MediaProducts (Player)
- Upgraded OfflineEngine from dev flag to feature flag (Player)
- New AnyCodable Extras class for the PlayLog metadata (Player)
- Reworked AVQueuePlayerWrapper and cache integration to try to solve an enqueue crash (Player)
- Add new FF
shouldPauseAndPlayAroundSeek
and related logic to pause and play around the seek call (Player) - Simple logging API (Logging)
- Remove unnecessary logging in Player (Player)
- Better error descriptions in Auth (Auth)
- Add more logging in Player (Player)
- Add
sendAllEvents
func inTidalEventSender
(EventProducer)
- Format unformatted code
- Update unit test action
- Do not set up logging system in the Auth module (Logging)
- Update Logging library version to latest version (Logging)
- Add support to new logging structure in Auth (Auth)
- Update StreamingMetrics support for new offliner (Player)
- Integrate new OfflineStorage layer into OfflineEngine and PlaybackEngine (Player)
- Make OfflineStorage optional for PlaybackEngine for now (Player)
- Add common code for logging (Logging)
- Add logging support in Player (Player)
- Add database-backed persistence layer for Asset Cache (Player)
- Add database-backed persistence layer for Offline (Player)
- Public interface for OfflineEngine (Player)
- Remove
setupUserConfiguration
fromPlayer
(Player)
- Fix parsing error in
clientIdFromToken
inCredentialsSuccessDataParser
(Player)
- Do not set up logging system in the Auth module (Auth)
- New
MediaProduct.referenceId
andMediaProduct.extras
fields as part of the Player spec (Player)
isStallWhenTransitionFromEndedToBufferingEnabled
fromFeatureFlagProvider
(Player)Interruption
as a subclass ofMediaProduct
(Player)ProgressEvents
are no longer reported (Player)
- Allow calls to
setNext
with the sameproductId
but with a different type ofMediaProduct
class. (Player)
- Reworked the encoding logic of the payloads (EventProducer)
- Add more log data in the error message to help with debugging (Player)
- Multiple unit tests for Playlog (Player)
- Made accessing credentials thread safe (Auth)
- Use swift-log library for logging different events (Auth)
- Fixed crash for the new cache implementation in AVQueuePlayerWrapper (Player)
- Made access to the database queue thread-safe (EventProducer)
- Refactoring of configuration and schedulers (EventProducer)
- Invalidate existing schedulers in case of reconfiguration (EventProducer)
- Throw error in case of misconfiguration (EventProducer)
- Readme had Polish language link instead of English
- Attempt to fix crashes + better logging (EventProducer)
- Added new empty catalogue module
- Check Queue Size (EventProducer)
- Added step to update chagelog in readme when releasing a new version
- Fixed SQLITE_LOCKED errors (EventProducer)
- Enforced Player cache delegate calls in the same queue as playback (Player)
- Playback was not stopping immediately on reset (Player)
- Fix for long buffering due to caching in some situations (Player)
- Split GenericMediaPlayer responsibilities (Player)
- Improved caching implementation for AVPlayer (Player)
- New FeatureFlag for the improved caching implementation (Player)
- New sessionTag in StreamingMetrics to track new caching implementation (Player)
- Support for new immersiveAudio param in playbackinfo (Player)
- Use absolute URLs in documentation links
- Update Common module README.md
- Move PlayLog tests to a separate GH Action
- Migrate
shouldSendEventsInDeinit
dev flag to production
- Steps for ClientCredentials flow (Auth)
- Test flakiness in PlayerEventSender (Player)
- Append
client_unique_key
only if present (Auth)
- Add
.CACHING_DISABLED
tag to Player metrics (Player) - Added new PlayerError
.PENotSupported
for media not supported (Player) - Use of
@_exported Common
with all of our Products
- Removed
clientToken
from Player bootstrap (Player) - Renamed
Environment
toBuildEnvironment
(EventProducer) - Align EventProducer interface implementation with other modules (EventProducer)
- Fix unhandled errors while preloading (Player)
- Add playlog tests - 8 (Player)
- Delete all code related to old auth and remove new Auth FF (Player)
- Fixed encoding of sessionProductType as a String in StreamingSessionStart (Player)
- Add playlog tests (Player)
- Replace Scopes with Set + migrate stored
Credentials
(Auth) - Spec conformance - interface segregation (Auth)
- Don't check
offlineMode
when sendingPlayerEvents
(Player) - Removed
clientVersion
parameter from Player bootstrap (Player)
- New FeatureFlag to control Player catching (Player)
- New StreamingMetrics Tag to monitor playback of cached items (Player)
- Unit tests for play log (Player)
- Renamed default FeatureFlagProvider from '.live' to '.standard'
- HTTPBody data to the request (Auth)
- Support for Stage endpoint (Auth)
- Support for keychain sharing (Auth)
- Default listener queue on player bootstrap (Player)
- Add a new workflow to verify CHANGELOG.md update status
- Add uts for streaming privileges handler when in offline mode (Player)
- Fix for SwiftLint warnings on test targets
- Made some PlayerListener protocol methods optional (Player)
- CredentialsProvider: isUserLoggedIn and removed isLoggedIn from Auth
- Scopes validation (Auth)
- Initial support for Uploaded Content
- Create package documentation catalogues
- Player bootstrap to include shouldUseEventProducer (Player)
- Linter improvements and fixes
- Update internal dependencies
- Refactored EventProducer Environment usage (EventProducer)
- Adjust auth documentation (code samples, texts)
- Emit events in didSet of current and next items in PlayerEngine instead of deinit of PlayerItem (Player)
- Disable streaming privileges when entering offline mode
- Unit tests (Player)
- Initial setup for a test app
- Move feature flags from develop to production
- Bug-fixing the withRemovedQuery method
- Semver comparison
- Unit tests preparation
- Workflow to run FOSSA scans on PRs to main branch
- An attempt to fix the versioning
- Increase the timeout of the optimizedWait method due to flaky tests
- Use EventProducer in Player (Player)
- Inject EventSender in PlayerEventSender (Player)
- Missing public in EventSenderMock (EventProducer)
- Make EventSender testable
- Auth sub-status error handling
- Compiler warnings due to deprecated api usage
- Crash when playing video in PIP and skipping to the next item (Player)
- Internal package update
- Increase timeout to address flaky tests in CI
- Remove pause call in PlayerEngine reset method (Player)
- Enabling the Event Producer for watchOS & to support Auth Module integration (Auth)
- Move FileManagerClient to PlayerWorldClient
- Align Auth Feature flag
- Make auth config non-throwable (Auth)
- Increase timeout to address flaky tests in CI
- Unit tests
- Generate DocC documentation
- Use xcodebuild for Player tests
- Logout not working
- Volume normalisation
- "Demo app" & adding Auth Test App as a replacement
- Token usage bug
- Player test app
- Streaming privileges with async await
- Allow custom redirect URI
- Make clientName nullable
- Align Auth with specification, pt3 (Auth)
- Co-ownership for the PACE team to code owned by BITS
- Align Auth with specification, pt2 (Auth)
- Player library to target for demo app (Player)
- Mp3 AudioCodec (Player)
- Tests to AuthProvider+Player
- Linter plugin in PlayerTests and address violations
- Align Auth with specification (rename Credentials to Tokens) (Auth)
- Change shouldUseAuthModule to true
- Update tests dependencies
- Rename blacklisted(category) to blocked (EventProducer)
- Package.swift maintenance
- Bearer Auth Token
- Fix slow tests on Auth module
- Streaming privileges preparation (Player)
- Support new reactions value in DJSessionMetadata (Player)
- Support playback of DRM-free tracks using AVPlayer (Player)
- Improve Xcode test settings for Player module (Player)
- Add playbackSessionId to Offlineplay (Player)
- Retry attempts take more than 5 minutes (Auth)
- Make Renovate less noisy
- Retry attempts take more than 5 minutes (Auth)
- Increase timeout (Player)
- Regression crash on DRM handling (Player)
- Loudness normalization values
- Auth in FairPlayLicenseFetcher and PlaybackInfoFetcher
- Auth in DJProducer
- Regression on AVPlayer DRM handling when switching tracks quickly (Player)
- Preparation for tests
- LoginResponse - made properties public
- Code ownership to mobile platform team
- Extended AuthProvider protocol
- Replace enum AuthResult with Swift.Result
- Improve mock classes
- Add new flag shouldStallWhenTransitionFromEndedToBuffering in GenericMediaPlayer (Player)
- Preparation of Integration of Auth module into Player (Player)
- Codeowners
- Updated playbackinfo endpoint to Streaming API V5 (Player)
- Move all used methods to AuthProvider protocol
- Replace enum AuthResult with Swift.Result
- LoginResponse - made properties public
- New Player module based on BoomBox 0.0.70
Fix to loudness normalization during streaming (Player)
- Set credentials functionality that allows to set existing credentials from the outside (useful for migration purposes) (Auth)
- Simplify integration and tests on clients
- Proper URL formatting for refresh token (EventProducer)
- UserID Handling from the server (Auth)
- Unify returning errors for Auth (Auth)
- Send monitoring info only if it is not empty (EventProducer)
- Make TIDAL Error non-optional
- Improve refreshToken() error handling and testing (EventProducer)
- Evaluate upgrade if clientId doesn't match with the stored one
- Update GRDB to 6.22.0
- Clear-up monitoring data when sending the Monitoring event to server (EventProducer)
- Enable tvOS and watchOS as targets
- Rollback swiftLint version to align with the main project usage.
- Token refresh feature (EventProducer)
- SwiftLint integration (EventProducer)
- Legacy Event parsing (EventProducer)
- Authorisation (EventProducer)
- Background processing issues (EventProducer)
- Formatting for ClientID and Token parameters (EventProducer)
- Logic to include device information for sent events (EventProducer)
- API endpoint update (EventProducer)
- Initial EventProducer module release for iOS.