Releases: SRGSSR/pillarbox-apple
Performance Improvements
Improvements
- Ensure most
PlayerItemTracker
methods are executed off the main thread to avoid potential UI hitches, particularly when displaying videos in scrollable views.
Demo Fixes
- Fixed performance issues when seeking on certain devices.
- Resolved visible hitches when swiping between stories in the demo.
- Corrected a non-working stream URL.
Breaking Changes
- Removed
HTTP
andHTTPS
constants from media composition streaming methods. - Most
PlayerItemTracker
methods are now called off the main thread. Update your implementation to handle thread safety accordingly.
What's Changed
- Remove non-existing streaming constants by @defagos in #1229
- Improve documentation by @waliid in #1230
- Fix on-demand example URL by @defagos in #1234
- Fix performance issues due to access log and date retrieval by @defagos in #1233
Full Changelog: 11.0.0...12.0.0
Seek Behavior Overhaul
Fixes
- Seek logic has been revisited to address performance issues, particularly with audio content. The
.immediate
behavior has been rebranded as.optimal
, ensuring the best experience based on the content being played. - Player items delivered by the CoreBusiness framework will now include chapters only for episode content.
Demo Fixes
- Fixed issues where interacting with the slider could cause an inconsistent UI state or erratic behavior.
Breaking Changes
- The
.immediate
seek behavior has been replaced with.optimal
.
What's Changed
- Remove picker label where superfluous by @defagos in #1217
- Fix slider animation glitches by @defagos in #1220
- Improve CI reliability by @defagos in #1222
- Improve documentation by @defagos in #1221
- Only return chapters for episodes by @defagos in #1223
- Fix slider interaction issues by @defagos in #1224
- Fix performance issues with immediate seeks in audio content by @defagos in #1225
Full Changelog: 10.0.2...11.0.0
Maintenance Release
Improvements
- Display the currently selected values in the settings menu for better visibility.
- Improve alignment between settings menu labels and the system player's user experience.
- Add support for displaying VPN/proxy blocking reasons.
Fixes
- Prevent potential plugin name clashes with other packages.
- Fix an issue where
Player
observation could fail when empty.
Demo Improvements
- Make skip intervals configurable in demo settings.
What's Changed
- Document sources of sample streams by @defagos in #1203
- Improve demo slider by @defagos in #1204
- Add VPN/proxy blocking reason by @defagos in #1191
- Prefix plugin name to avoid conflicts by @defagos in #1206
- Display current menu selections by @defagos in #1207
- Remove explicit equatable conformance by @waliid in #1209
- Fix player observability when empty by @defagos in #1208
- Remove web content tracking documentation by @defagos in #1210
- Support dynamic skips symbols based on player configuration by @waliid in #1211
- Fix documentation by @defagos in #1213
- Improve standard settings menu by @defagos in #1214
- Avoid using isActive as published var by @waliid in #1215
Full Changelog: 10.0.1...10.0.2
Improved Picture in Picture handling
Improvements
- Improved Picture in Picture (PiP) automatic start support for cases where the video view doesn’t cover the entire screen.
Demo Improvements
- Fixed an issue where the custom player controls toggle gesture wasn’t working as expected on iOS 17.
What's Changed
- Fix analytics documentation by @defagos in #1189
- Fix toggle gesture by @waliid in #1192
- Reorganize gestures for a better user experience by @waliid in #1194
- Update macOS and Xcode versions by @waliid in #1193
- Dependency update by @defagos in #1195
- Update gems by @defagos in #1196
- Disable skip gestures on iOS 17 by @defagos in #1197
- Fix settings preview by @defagos in #1199
- Allow to start Picture-in-Picture automatically for inline contents by @waliid in #1200
- Fix preprocessor condition by @waliid in #1201
Full Changelog: 10.0.0...10.0.1
Support for skip gestures
Improvements
- Introduced
SkipTracker
to simplify the implementation of skip gestures. - Added skip methods that accept a
Skip
direction as a parameter. These methods are more ergonomic when the skip direction is determined programmatically, while the existing methods remain well-suited for UI-bound actions. - Made
PlayerItem
conform toHashable
, simplifying the adoption ofHashable
in wrapper types. - Added methods to stop or close Picture in Picture without triggering restoration behavior.
- Added methods to show or hide the user interface managed by a
VisibilityTracker
.
Breaking Changes
- Core extensions previously defined on
Array
have been moved toCollection
for broader applicability. - Removed the
PictureInPicturePersistable.pictureInPictureDidClose()
method.
Demo Improvements
- Enabled support for skip gestures in the custom player layout.
- Improved playlist management UI in the demo: it now supports inserting the same item multiple times, with control over both the insertion point and a multiplier.
- URIs in the monitoring panel are now displayed in full without truncation.
Demo Fixes
- Fixed high-speed capsule display issues on devices with a notch.
Added custom menu actions
Improvements
- Added support for custom actions in iOS player-related
Menu
contents, allowing applications to respond to user selections. - Replaced
navigation_bu_distributer
withcontent_bu_owner
in Commanders Act page views to ensure consistent measurement across applications and websites. - Enhanced monitoring data with track (audio and subtitles) and application information.
Fixes
- Ensured buffer values are always clamped to the correct range.
- Restored Control Center to the system when no longer needed.
Breaking Changes
- Replaced
PlayerProperties
withTrackerProperties
in tracker implementations. This ensures that property values accurately reflect the state at the time of capture, preventing discrepancies when accessed later. - Renamed
PlayerItemConfiguration
toPlaybackConfiguration
to better represent its role inPlayerItem
andAsset
configurations. - Converted
Server
into an enum with fixed values to prevent unauthorized services from incorrectly implementing the SRG SSR metadata service contract. - Restricted analytics source keys to a predefined enumeration of allowed values.
Demo Improvements
- Added support for Enhance Dialogue in player audio settings on compatible tvOS devices.
Removed custom server support in Core Business
This release removes support for custom servers in Core Business player items, ensuring that only official production, staging, and test environments are available.
Improvements
- URN information is now included in all reports sent to the SRG SSR monitoring platform, even when the URN is invalid.
Bug Fixes
- Fixed an assertion failure in debug builds when attempting to play a URN.
Breaking Changes
- The identifier associated with a
MetricsTracker
has been moved from its metadata to its configuration. - Custom
Server
construction, previously marked as deprecated, is no longer supported.
Demo Improvements
- Removed MMF support.
- Removed alternative environments, including SAM and CH/WW location simulation.
- Enhanced the demo player slider appearance and behavior.
What's Changed
- Remove MMF support by @defagos in #1126
- Fix script location by @defagos in #1127
- Require an identifier to be provided when creating a metrics tracker by @defagos in #1128
- Simplify Plist overrides by @waliid in #1129
- Fix slider background and animations by @defagos in #1131
- Update dependencies by @defagos in #1132
- Replace futures with async publisher by @defagos in #1130
- Remove custom server initializer by @defagos in #1133
Full Changelog: 7.0.0...8.0.0
Removed Support for ComScore Page Views
This release removes support for tracking ComScore page views.
Miscellaneous Improvements
- Overlay Support: Added overlay functionality to
SystemVideoView
. - Enhanced Security: Prevented item creation from unofficial service endpoints. The
Server.init(baseUrl:queryItems:)
initializer, while still available, will be deprecated in a future release and now triggers an assertion if used. - Improved Documentation: Enhanced the organization and clarity of documentation catalogs.
- Analytics Delegate: Introduced
AnalyticsDelegate
, enabling applications to be informed whenever events or page views have been sent.
Breaking Changes
- The
Analytics.trackPageView(commandersAct:)
method now exclusively accepts Commanders Act page view data. ThecomScore
parameter has been removed. - The
ComScorePageView
type and thec8
property fromComScoreLabels
have been removed. - The
comScorePageView
property has been removed from thePageViewTracking
protocol. - The SwiftUI page view tracking modifier
tracked(commandersAct:)
now only supports Commanders Act page view data, removing the previously availablecomScore
parameter.
What's Changed
- Improve documentation by @defagos in #1067
- Add method to respond to state changes at the user interface level by @defagos in #1070
- Add article about resource optimization by @defagos in #1072
- Add hover support by @defagos in #1073
- Fix layout glitches during rotation by @defagos in #1074
- Add GitHub workflows by @waliid in #1075
- Avoid running the release workflow when it is not appropriate by @waliid in #1084
- Fix Pillarbox version in the demo app by @waliid in #1089
- Improve log formatting by @defagos in #1088
- Rename CI workflow by @waliid in #1090
- Update tooling documentation by @defagos in #1091
- Disable parallel testing to improve CI unit test reliability by @defagos in #1085
- Add important instructions for apps using a delivery pipeline by @defagos in #1093
- Add
hlsreport
information by @defagos in #1094 - Avoid flaky expectations capturing values during a hardcoded time interval by @defagos in #1099
- Add timeouts for GitHub action jobs by @waliid in #1101
- Prevent item creation from non-official service endpoints by @defagos in #1102
- Remove dead code by @defagos in #1103
- Document limit restrictions when casting to AirPlay receivers by @defagos in #1109
- Polish documentation catalogs by @defagos in #1105
- Cleanup Makefile targets by @waliid in #1104
- Declare monitoring resources by @defagos in #1111
- Increase job timeouts to 30 minutes by @defagos in #1112
- Add system video view overlay support by @defagos in #1114
- Avoid using shellcode env with pkgx by @waliid in #1119
- Fix demo deliveries by @waliid in #1120
- Improve demo playback slider by @waliid in #1118
- Remove comScore page views by @defagos in #1121
- Fix system video view overlay issues by @defagos in #1122
- Support custom tracking when page views are tracked by @waliid in #1124
Full Changelog: 6.0.0...7.0.0
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.