Releases: SRGSSR/pillarbox-apple
SRG SSR monitoring and Low Data Mode support
This release adds monitoring for SRG SSR content. It also introduces new APIs to better manage data in constrained environments, with support for Low Data Mode and upper bounds that can be set on content bitrate and resolution.
Recent API changes introduced for playlists in 4.0.0 have also been rollbacked. These APIs failed to deliver the convenient model / playlist synchronization they were introduced for.
Monitoring
- SRG SSR core business player items are monitored automatically. The collected data covers a wide range of Quality of Service / Quality of Experience needs and, even though all data is anonymous, you should ensure that your app privacy details are updated accordingly if needed.
Support for constrained data environments
ImageSource
supports standard and low-resolution image URLs. When provided these are automatically loaded when Low Data Mode has been enabled for a network.- Core business player items retrieve low-resolution images when Low Data Mode has been enabled for a network.
- The player configuration has been extended with a
allowsConstrainedNetworkAccess
to prevent playback for non-essential content when Low Data Mode has been enabled. PlayerLimits
can be freely defined to set upper bounds on content bitrate and resolution. This makes it possible to implement data-saving modes. Note that no lower bounds can be set, as the player must remain free to use available lower-quality variants to ensure an uninterrupted playback experience.
Miscellaneous improvements
- Provide a way to optionally attach metadata to unavailable
Asset
s. - Attach metadata to core business player items which are unavailable for a business reason (e.g. content not available yet).
- Make
Player.currentItem
a published property.
Breaking changes
- The
source
parameter associated withPlayerItem
s has been removed. - The corresponding
Playlist
parameter has been removed.
Fixes
- Fix erratic change observability when changing legible media options.
- Hide
RoutePickerView
for iPad apps running on macOS.
Demo improvements
- Add quality switch to the custom player layout settings menu.
- Add similar setting to the global demo settings. This setting is applied throughout the demo where appropriate.
- Improve demo overall accessibility via VoiceOver.
What's changed
- Remove playlist source support by @defagos in #1041
- Monitor SRG SSR content by @waliid in #1042
- Set LSMinimumSystemVersion to 14.0 by @waliid in #1043
- Update GitHub templates by @waliid in #1044
- Remove monitoring warnings by @waliid in #1046
- Deliver metadata with business errors by @defagos in #981
- Remove error severity by @defagos in #1048
- Update known issues to reflect state as of iOS / tvOS 18 by @defagos in #1047
- Update fastlane to version 2.225.0 by @defagos in #1050
- Fix performance issue by @defagos in #1051
- Never display route selection for iPad apps run on macOS or Catalyst by @defagos in #1052
- Add support for Low Data Mode and bandwidth / resolution limits by @defagos in #1056
- Update 3rd party dependencies to most recent versions by @defagos in #1058
- Convert demo project to Xcode 16 folders by @defagos in #1055
- Remove superfluous Quality menu level on macOS by @defagos in #1057
- Avoid using SwiftLint via Mint by @waliid in #1059
- Improve demo accessibility via VoiceOver by @defagos in #1062
- Fix player observability in response to media accessibility updates by @defagos in #1061
- Improve tool resilience to offline conditions by @defagos in #1064
Full Changelog: 5.0.0...6.0.0
Picture in Picture stability improvements
Warning
Sources associated with player items, introduced in version 4.0.0, will be removed in version 6.0.0. Please avoid using them in your code.
This release improves Picture in Picture support in advanced scenarios involving several video views supporting it, avoiding unexpected playback interruptions in some cases.
Picture in Picture fixes and improvements
- Improve Picture in Picture stability in complex view hierarchies involving several supporting
VideoView
s orSystemVideoView
s. - Add method to start Picture in Picture programmatically. This method must only be called in response to some form of user interaction.
- Add
PictureInPicturePersistable
method informing implementations that Picture in Picture has been closed from the Picture in Picture overlay.
Miscellaneous improvements
- Remove
VideoView
internal animations when loading content. If applications desire such animations they can animate the video view directly. - Adjust monitoring data.
- Update comScore SDK to its most recent version.
Breaking changes
- Chapters associated with a media composition are provided by
MediaMetadata
, notMediaComposition
directly anymore.
Fixes
- Fix glitches affecting
VideoView
during animations. - Fix Control Center restoration after mixable to non-mixable audio session transitions on iOS and tvOS 16 / 17 devices.
- Avoid pausing playback when a monoscopic video view is destroyed.
- Fix crashes when loading URNs for which a main chapter is not available from the associated media composition chapter list.
Demo improvements
- Add iOS 18 dark and tinted icons.
Performance issue fix
Improvement
- Improve
Playlist
component.
Fix
- Fix date retrieval performance issue with some content (e.g. MP3).
What's Changed
- Fix date retrieval performance issue with some content by @defagos in #997
- Replace lists with forms where appropriate by @defagos in #998
- Enhance the
Playlist
component by @waliid in #1002
Full Changelog: 3.0.0...4.0.0
Metrics, monitoring and improved playlist support
This release mostly focuses on metrics and monitoring. It makes it possible to inspect and monitor playback performance, both locally and remotely.
It also improves features associated with playlists, adding looping playback as well as a simpler way to manage items in a playlist at the user interface level.
Metrics
- Provide several key metrics during playback (bitrates, stalls, data requests, frame drops, etc.). Current metrics can be queries from
PlayerProperties
at any time, or obtained periodically usingperiodicMetricsPublisher(forInterval:queue:limit:)
. - Receive important events during playback (metadata and asset loading, errors, stalls, etc.) by subscribing to the
metricEventsPublisher
publisher. - The
MetricsCollector
observable object lets you easily create metrics visualizations, e.g. using SwiftUI or Swift Charts.
Monitoring
- Add PillarboxMonitoring package, offering seamless integration with Pillarbox monitoring platform.
- Provide
MetricsTracker
to automatically collect and send metrics data to Pillarbox monitoring platform.
Tracking
- Make trackers easier to implement with reliable access to properties when a tracker is disabled.
- Add metrics protocol method to
PlayerItemTracker
. - Add optional and mandatory behaviors to tracker adapters, letting you control how
isTrackingEnabled
affects them. - Add support for optional session identifiers, letting you associate an identifier with a tracker, useful to relate data remotely collected by a tracker with an associated local session.
Playlist support
- The items of a
Player
can be simply displayed as aPlaylist
supporting usual actions (reorder, delete). - A
source
can be associated to items, making it possible to display any kind of relevant data in a playlist user interface. - Repeated playback of a single item or of an entire playlist can be enabled with the new
repeatMode
player property.
Miscellaneous improvements
- Add date support for streams embedding timestamps. A seek method accepting a date as parameter has been enabled and a
date()
method has been added to retrieve the current date. - Make smart navigation interval configurable.
- Improve server support in CoreBusiness by adding support for custom server URLs and query parameters.
- Add Audio Description information to Commanders Act analytics labels.
- Add date interval measurement operator to the Core package.
- Add stopwatch to the Core package.
- Remove Timelane.
Breaking changes
- Update
PlayerItemTracker
protocol method signatures. Implementations can also be made simpler using properties now provided when a tracker is disabled. PlayerConfiguration
navigation mode is now set through anavigationMode
property instead of a simple Boolean flag.- Commanders Act and comScore events captured do not require a leading dot anymore.
- The player current item is set using
currentItem
. The index-basedcurrentIndex
andsetCurrentIndex(_:)
APIs have been removed accordingly. - The current time was retrieved from a
time
property which, for consistency, has been replaced with atime()
function.
Fixes
- Make User Agent reliable in Commanders Act events.
Demo improvements
- Make tvOS Playback HUD, displaying various streaming key metrics, also available on iOS. The HUD can be enabled and customized under the demo Settings tab.
- Add metrics debugging view to the main custom player layout, accessible from its settings menu.
- Provide more entry options for custom URL and URN entry (token, DRM, server).
- Make the custom player slider accessible with VoiceOver.
- Add basic keyboard shortcut support.
- Add BBC and Mux test streams.
- Display metrics session identifier when a failure is encountered while playing SRG SSR content. This makes it possible to relate a playback session to data visualized remotely.
- Improve automatic keyboard dismissal.
What's changed
- Add Swift Package Index documentation links by @defagos in #889
- Update SwiftLint to version 0.55.1 by @defagos in #890
- Improve server support in Core Business by @defagos in #891
- Add playback HUD support by @defagos in #893
- Immediately dismiss the keyboard when scrolling by @defagos in #895
- Update Xcode to version 15.4 by @defagos in #896
- Make smart navigation interval configurable by @defagos in #902
- Provide audio description information in analytics labels by @defagos in #894
- Add basic keyboard shortcut support by @defagos in #898
- Add support for token-protected and DRM-encrypted URLs to the demo by @defagos in #907
- Add useful testing information for stream encoding and packaging teams by @defagos in #910
- Gather player metrics by @defagos in #912
- Simplify the gathering of player metrics by @waliid in #915
- Update issue templates by @defagos in #914
- Add metrics collector by @defagos in #916
- Add SRG SSR environment support to URN entry by @defagos in #919
- Use built-in player metadata image retrieval by @defagos in #921
- Measure startup times by @waliid in #920
- Make metric event API more ergonomic by @defagos in #922
- Improve behavior for streams providing no metrics by @defagos in #923
- Document PillarboxPlayer APIs as supported on the main thread only by @defagos in #932
- Localize MB unit by @defagos in #933
- Fix incorrectly rounded displayed data volume by @defagos in #934
- Provide metric events for fatal errors by @defagos in #937
- Capture stalls in QoS metrics by @defagos in #938
- Provide warnings in QoS metric events by @defagos in #939
- Display event log in metrics debugging view by @defagos in #942
- Add BBC and Mux test streams to the demo by @defagos in #949
- Revisit player item tracking by @waliid in #950
- Reuse comScore session when pausing at item end by @defagos in #952
- Create basic QoS tracker by @waliid in #953
- Send QoS tracker payload data to a specific endpoint by @waliid in #962
- Update 3rd party dependencies by @defagos in #965
- Wait until the User Agent is retrieved by Commanders Act by @defagos in #964
- Update metrics tracker to most recent specifications by @defagos in #967
- Display monitoring session identifier in metrics debugging view by @defagos in #968
- Fix incorrect y-axis data volume scale by @defagos in #969
- Extract settings menu by @defagos in #972
- Add mandatory tracker support by @defagos in #971
- Update metrics tracker to most recent specifications by @defagos in #974
- Fix incorrect negative metrics when toggling AirPlay by @defagos in #976
- Remove Timelane by @defagos in #978
- Update metrics tracker to most recent specifications by @defagos in #977
- Document monitoring and metrics support by @defagos in #979
- Update SwiftLint to version 0.56.1 by @defagos in #980
- Improve metric event name consistency by @defagos in #983
- Avoid returning metrics for reserved items by @defagos in #982
- Fix missing comScore labels when replaying content by @defagos in #985
- Improve playlist user interface integration by @defagos in #986
- Fix incorrect metadata timings after recovering from failure by @defagos in #990
- Update SwiftLint to version 0.56.2 by @defagos in #991
- Fix incorrect QoE timing after recovering from failure by @defagos in #992
- Support repeat modes by @waliid in #993
- Add date support by @defagos in #994
- Make the player custom slider accessible via VoiceOver by @defagos in https://github.com/SRGSSR/...
Improved metadata support
This release improves support for metadata. This includes features for displaying content information and artworks in custom layouts, but also features that can enhance the user experience during playback.
Metadata
Player
provides metadata updates through a newmetadata
published property. Use this metadata to easily display information about the content being played in custom user interfaces.- Chapters can be associated with content being played. Those provide markers into the content, which can be used for display purposes or to offer alternative ways to navigate the content.
- Images are now retrieved by the player directly and do not need to be loaded by a
PlayerItem
custom publisher anymore (though they still can if this approach is more appropriate). The main artwork for a content as well as images associated with chapters must be provided asImageSource
s. URL-based sources are automatically fetched by the player when actually needed, avoiding unnecessary fetches when not used.
Blocked time ranges
- Optionally associate blocked time ranges with content being played. These time ranges are automatically skipped during playback. Seeking into them is prevented as well.
- Blocked time ranges are displayed as interstitials in the tvOS system playback user interface.
Opening and end credits
- Define time ranges associated with opening and closing credits. These time ranges can be used in custom user interfaces, e.g. to display a skip button during credits.
User interface
- Add support for contextual actions to
SystemVideoView
. - Use
LazyImage
in SwiftUI layouts to display images lazily loaded from anImageSource
. UseLazyUIImage
where aUIImage
is required instead.
SRG SSR content support improvements
- Prevent playback of time ranges blocked by SRG SSR editors, instead of preventing playback of the whole content.
- Extract chapters from SRG SSR content.
- Display season / episode information in the tvOS system playback user interface.
- Increase artwork image quality for SRG SSR content.
Miscellaneous
- Update translations.
- Add
Player.seek(to:completion:)
method to seek to a chapter. - Add
PlayerConfiguration.default
to obtain default player configuration settings. - Add `Publisher.delayIfNeeded(for:tolerance:scheduler:options:).
- Make
subscript(safeIndex:)
available for allArray
s.
Breaking changes
- Improve
CMTime
andCMTimeRange
consistency inProgressTracker
, returning.invalid
instead ofnil
when values are not available. Please update your code to check if a time or rangeisValid
rather than testing for nullability. PlayerItem
configuration now happens with a dedicatedPlayerItemConfiguration
parameter, not with a closure anymore.
Fixes
- Avoid undesired automatic Control Center integration on iOS when using the system playback user interface.
- Fix Control Center integration on tvOS.
- Fix incorrect times returned by a
ProgressTracker
when playing a DVR livestream at the live edge.
Demo improvements
- Display chapters in the custom player user interface on iOS.
- Display audio artworks in the custom player user interface on iOS.
- Make satellite radio streams available (Radio Swiss Pop, Radio Swiss Jazz and Radio Swiss Classic).
- Add examples for integration of a skip button during credits.
- Display blocked time ranges in the custom player slider on iOS.
- Improve the playlist example on tvOS.
Demo fixes
- Improve interactions with the demo custom slider.
- Fix custom player interface animation glitches.
- Prevent the custom player user interface from being toggled while scrubbing.
- Fix player settings not applied until the application is restarted.
What's changed
- Deliver player metadata by @waliid in #808
- Remove superfluous icon by @defagos in #811
- Fix unreliable test by @defagos in #812
- Introducing a user-friendly API for AVMetadataItem construction by @waliid in #809
- Polish implementation and documentation by @defagos in #814
- Add a TestFlight badge by @waliid in #821
- Improve metadata delivery by @waliid in #827
- Update translations from Crowdin by @defagos in #828
- Fix tvOS Control Center by @waliid in #829
- Update examples by @defagos in #830
- Display metadata in the iOS custom player by @waliid in #831
- Display chapters in iOS demo by @waliid in #832
- Rename ChapterMetadata to Chapter by @waliid in #833
- Improve chapter cell appearance by @defagos in #834
- Document metadata integration by @defagos in #835
- Enable advanced Picture in Picture and Control Center integration for the chapter-supporting player by @defagos in #836
- Remove chapters with non-matching media type by @defagos in #838
- Add test for mixed chapter filtering by @defagos in #841
- Never return chapters for audio content by @defagos in #842
- Return invalid times and ranges consistently with other player APIs by @defagos in #847
- Fix assertion raised when formatting invalid times by @defagos in #848
- Support opening and end credits by @waliid in #850
- Handle blocked time ranges by @waliid in #853
- Enable chapter support in the main custom player layout by @defagos in #855
- Improved tvOS playlist experience by @defagos in #856
- Add demo privacy manifest by @defagos in #857
- Fix documentation link by @defagos in #858
- Manage image retrieval at the player level by @defagos in #860
- Fix undesired seek in overlapping time ranges by @defagos in #863
- Display time ranges on custom slider by @waliid in #864
- Add blocked time range URN example by @defagos in #865
- Display artwork image for audio by @defagos in #866
- Add a test for nested time range by @waliid in #868
- Use new API for localization by @waliid in #869
- Add journalistic blocking reason by @defagos in #871
- Add HLS documentation links by @defagos in #870
- Apply current demo settings to player instances by @defagos in #872
- Prevent controls from being toggled while interacting by @defagos in #874
- Disable automatic now playing info updates on iOS by @defagos in #875
- Fix Control Center integration documentation on tvOS by @defagos in #877
- Load chapters and artwork images lazily by @waliid in #879
- Fix capped times delivered by a progress tracker at the live edge by @defagos in #880
- Document metadata integration by @defagos in #882
- Fix undesired animation by @waliid in #881
- Avoid settings menu being closed when controls disappear by @defagos in #883
- Align the loading indicator to the right when the UI is hidden by @waliid in #886
Full Changelog: 1.0.1...2.0.0
Performance issue fix
Fixes
- Fix a resource leak which could lead to performance issues over time.
What's changed
Full Changelog: 1.0.0...1.0.1
First official release 🎉
Important
Letterbox will be sunset in August 2025:
- New SRG SSR products must use Pillarbox only.
- Existing SRG SSR products using Letterbox must transition to Pillarbox before this date.
This is the first official release of Pillarbox for Apple platforms. Pillarbox is the modern SRG SSR media playback ecosystem, a generational leap over its predecessor Letterbox.
Tip
Should you have questions, ideas, or should you need assistance, please use our issue tracker or a dedicate discussion.
Features
Refer to our documentation for a complete feature list.
Tip
Articles, tutorials and developer documentation are available right within Xcode as a documentation catalog.
Fixes and improvements
If you were already integrating a pre-release version of Pillarbox, this first official release adds a few final fixes and improvements:
- Fix an issue sometimes preventing metadata from being correctly displayed in the Control Center.
- Update comScore and Commanders Act libraries to the most recent releases.
- Improve documentation and remove unused files.
- Fix missing translations.
- Add privacy manifests.
What's Changed
- Force comScore and Commanders Act SDKs to latest versions by @defagos in #787
- Fix Control Center metadata sometimes disappearing after item deletion by @defagos in #786
- Use version 6.11.0 to avoid archive issue by @waliid in #788
- Update CI to Xcode 15.3 by @defagos in #795
- Add privacy manifest by @defagos in #789
- Add MMF support by @defagos in #792
- Update list of known issues with Control Center playback button state issue in multi-player configurations by @defagos in #793
- Update comScore SDK to version 6.12.2 by @defagos in #791
- Update translations by @defagos in #790
- Clean documentation by @waliid in #794
- Improve documentation by @defagos in #797
- Display library version as demo badge by @defagos in #796
- Improve test stability by @defagos in #798
- Remove unnecessary property update by @waliid in #799
Full Changelog: 0.11.0...1.0.0
Improved error management in playlists
This release improves support for long playlists.
Improvements
- Improve error management in playlists.
- Improve Control Center integration in presence of error:
- Display errors in the Control Center directly.
- Allow users to retry playback after a failure directly from the Control Center.
- Add
actionAtItemEnd
player setting, with which the behavior when playback of an item ends can be customized.
Fixes
- Resolve several analytics issues in playlists:
- Fix an issue leading to Commanders Act events missing a playback position.
- Fix incorrect event transitions emitted when chaining items in a playlist.
- Fix incorrect event transitions emitted when moving the item currently being played.
- Fix incorrect playback position reported when dynamically enabling Control Center integration during playback.
Demo improvements
- Improve slider interactions.
Demo fixes
- Fix missing content image.
What's changed
- Fix incorrectly received tracker property updates by @defagos in #770
- Fix broken image link by @waliid in #771
- Improve demo slider by @defagos in #772
- Improve Control Center display in presence of errors by @waliid in #769
- Force simulator language and region by @defagos in #778
- Fix incorrect time position after disabling and enabling Control Center integration by @waliid in #779
- Support standard actions at item playback end by @waliid in #780
- Avoid unnecessary Commanders Act seek / play transitions by @defagos in #781
- Prepare for complete localization by @defagos in #782
- Remove CombineExt by @defagos in #783
Full Changelog: 0.10.0...0.11.0
Improved support for long playlists
This release improves support for long playlists.
Improved support for long playlists
Prior to this version Pillarbox player was eagerly loading all items in a playlists. This was leading to unnecessary metadata retrieval (potentially including artworks) as well as potential player hangs, most notably with MP3 playlists.
To solve these issues Pillarbox player now only loads two items at any given time. This still ensures that content can be preloaded in advance during normal playback, ensuring gapless playback when possible, while minimizing resource waste and avoiding performance issues.
Improvements
- Display metadata in the
SystemVideoView
. - Stop playback on failed items in playlists.
- Ensure all skips are non-smooth.
- Optimized threads created by SRG SSR standard trackers.
- Ensure common unique identifiers with Letterbox and Pillarbox versions that were running Commanders Act SDK version 4.
- Provide specific analytics device information for iPad applications run on macOS.
Fixes
- Make it possible to restart playback of items whose metadata delivery failed.
- Avoid undesired layer animations when resizing the video view.
- Fix Swift Package Index documentation generation.
Breaking changes
- Rename
isRunning
asshouldPlay
.
Demo improvements
- Add long-press gesture to enable high-speed playback.
- Update Pillarbox web demo link.
Demo fixes
- Fix monoscopic content display in playlist demos.
- Fix page views incorrectly sent during scrolling.
What's changed
- Eliminate undesired layer animations by @waliid in #726
- Extend layout past the safe area by @defagos in #727
- Rename isRunning as shouldPlay by @defagos in #732
- Make all skips consistently non-smooth by @defagos in #731
- Fix replay behavior with unconsumed failed items by @defagos in #734
- Update start time example for consistency with other platforms by @defagos in #733
- Add metadata to the system player by @waliid in #735
- Avoid sending several page views to the analytics by @waliid in #737
- Avoid starting from an incorrect position in terms of analytics by @waliid in #739
- Update SwiftLint to version 0.54.0 by @defagos in #741
- Fix pre-commit hook by @defagos in #742
- Document how to trust plugins in a continuous integration setup by @defagos in #740
- Avoid unnecessary thread creation by item trackers by @defagos in #743
- Fix comScore test flakiness by @waliid in #744
- Increase playback speed during a long press gesture by @waliid in #746
- Use common Commanders Act unique identifier between v4 and v5 by @defagos in #752
- Support desktop as navigation device by @defagos in #751
- Update data provider to version 19.0.0 by @defagos in #755
- Fix unresponsive AirPlay button by @waliid in #754
- Fix incorrect navigation title by @defagos in #758
- Fix Swift Package Index documentation generation by @defagos in #759
- Update links for web player and demo by @defagos in #761
- Disable high speed gesture for monoscopic content by @defagos in #762
- Fix monoscopic support in playlists by @defagos in #763
- Remove web player link by @defagos in #765
- Improve support for long playlists by @defagos in #766
Full Changelog: 0.9.0...0.10.0
Monoscopic 360° video support
This release adds support for monoscopic 360° video and further improves Picture in Picture behavior.
360° video support
- Add support for monoscopic 360° videos to
VideoView
. Use the newVideoView/viewport(_:)
modifier to enable 360° display and choose and set an orientation in space. - Orientation in space requires a quaternion. Two
SCNQuaternionRotate(_:_:_:)
andSCNQuaternionWithAngleAndAxis(_:_:_:_:)
functions are provided to help build relevant quaternions, most notably for controlling the viewport through touch events. On iOS theSCNQuaternionForAttitude(_:)
function makes it possible to bridge quaternions delivered by CoreMotion with SceneKit quaternions required used by Pillarbox.
Picture in Picture improvements
- Improve Picture in Picture integration and overall behavior.
- Introduce
PictureInPicturePersistable
that lets app locally respond to Picture in Picture life cycle events if needed.
Improvements
- Add playback speed menu to the tvOS system player view layout.
- Add
AVPlayerItem/seek(_:)
method to set a player item to start at a given time. - Add
Player/isRunning
property. - Improve documentation and tutorials.
Demo improvements
- Greatly improve tvOS navigation user experience.
- Improve Picture in Picture integration in demo examples.
- Display Pillarbox web demo in a web browser. This feature is not intended to be easily accessible and requires a dedicated opt-in to be enabled in app system settings first.
Fixes
- Update Swift package manifest version to 5.9.
Breaking changes
- Prefix all frameworks with
Pillarbox
to avoid potential naming conflicts with packages providing frameworks having the same name. - Update in-app Picture in Picture in-app integration API. The
View/enabledForInAppPictureInPictureWithCleanup(perform:)
method has been replaced with theView/enabledForInAppPictureInPicture(persisting:)
method which, instead of executing a closure to cleanup resources associated with a player (potentially after Picture in Picture ends), ensures aPictureInPicturePersistable
object is kept alive during Picture in Picture playback. ThePictureInPicturePersistable
protocol can be optionally used to locally respond to Picture in Picture lifef cycle events as well. - Update
VideoView
andSystemVideoView
APIs so that optional behaviors (gravity, Picture in Picture support) are configured with modifiers instead of parameters.
What's Changed
- Update Swift Package manifest to Swift 5.9 by @defagos in #686
- Add tracking documentation by @defagos in #685
- Add Picture in Picture tutorial by @waliid in #687
- Reoganize Player documention by @waliid in #688
- Document analytics integration by @defagos in #689
- Polish documentation by @defagos in #690
- Enhance code documentation by moving some references in appropriate sections by @waliid in #691
- Polish articles by @defagos in #692
- Set the correct duration for completing tutorials by @waliid in #693
- Improve tvOS navigation by @waliid in #694
- Update cells appearance for tvOS by @waliid in #695
- Enhance cells appearance for tvOS by @waliid in #699
- Improve the display of examples on tvOS by @waliid in #701
- Document SwiftUI property wrapper usage recommendations by @defagos in #706
- Update dependencies to most recent versions by @defagos in #709
- Add monoscopic 360° video support by @defagos in #702
- Add an access to Pillarbox Web via a WebView by @waliid in #711
- Fix missing media information in iOS cells by @waliid in #712
- Animate video view display by @defagos in #713
- Rename packages to avoid potential conflicts by @defagos in #714
- Update Xcode version used for CI to to 15.2 by @defagos in #715
- Fix product name conflicts by @defagos in #719
- Make player animations smoother by @defagos in #720
- Revise some documentation images by @waliid in #721
- Implementing Playback Speed Feature on tvOS by @waliid in #718
- Create a computed property to detect non-zero playback rates by @waliid in #722
- Remove superfluous selves by @defagos in #723
- Support starting playback at a given time by @defagos in #724
Full Changelog: 0.8.0...0.9.0