Repository navigation
This release makes downloads and offline playback publicly available on iOS, and revisits URL-based and standard connector item creation to support them.
Note
Pillarbox now requires Xcode 27 (Swift 6.4). Downloads require iOS 17 or above and are not available on tvOS. Downloading FairPlay-protected content is not supported yet.
Improvements
- Added public support for downloads and offline playback with
URLDownloader(URL-based content),StandardDownloader(Pillarbox standard metadata) andURNDownloader(SRG SSR content). Custom stores can be used withDownloaderandAssetDownloadStore. See the new "Downloads and Offline Playback" article. - Added
DownloadConfigurationto choose the quality (preferredPeakBitRate,preferredMaximumResolution) and the audio and subtitle languages (DownloadMediaSelectionPreference) of downloaded content. - Added
Download.sizeto show how large a download is and how much of it has completed. - Added support for downloading and playing AES-128 protected content offline.
- Made
PlayerConfiguration,PlaybackConfigurationandPlayerLimitsproperties mutable. - Made
PlayerDataproperties public so they can be used in custom asset providers. - Added
AssetLoader.downloadableAssetPublisher(from:metadata:)to provide a different asset for downloading, if needed. A default implementation is provided. - Requests for SRG SSR metadata now include platform information, so the resource best suited for Apple platforms is selected by the server.
- Added useful SRG SSR metadata response headers to events sent to Pillarbox monitoring (
MetricsTracker.Metadata(metadataUrl:metadataHeaders:assetUrl:)). - Added scrolling for long chapter titles in the Info panel on tvOS 26.
- Updated for Xcode, iOS and tvOS 27.
Fixes
- Fixed
Player.resume(_:in:)when resuming an item other than the current one. - Made
Player.resume(_:in:)ignore invalid positions. - Fixed a potential infinite recursion that could occur when a seek failed, most notably near the end of a stream.
Breaking Changes
PlayerMetadatais now a type alias forAssetMetadata<EmptyCustomData>.AssetMetadatanow exposes metadata fields (title,subtitle,imageSource,chapters, etc.) directly and no longer has aplayerMetadataproperty. Create it withAssetMetadata(identifier:title:…:customData:).- Moved
EmptyCustomDatafrom PillarboxStandardConnector to PillarboxPlayer. It is nowCodable. - Removed
PlayerItem.init(asset:metadata:trackerAdapters:),PlayerItem.custom(url:delegate:metadata:trackerAdapters:configuration:)andPlayerItem.encrypted(url:delegate:metadata:trackerAdapters:configuration:), as well as theconfigurationparameter ofPlayerItem.simple(url:metadata:trackerAdapters:). To create custom or encrypted items, or to provide a custom configuration, implement aURLAssetLoaderProviderand usePlayerItem.custom(assetProviderType:url:metadata:trackerAdapters:). - Replaced
PlayerItem.standard(request:type:decoder:trackerAdapters:assetProvider:)andPlayerItem.standard(request:decoder:trackerAdapters:assetProvider:)withPlayerItem.standard(assetProviderType:input:trackerAdapters:). Implement aStandardAssetLoaderProviderto supply the request, decoder and asset. - Moved
SourcetoPlayerData.Source. - Removed
MediaComposition.Chapter.recommendedResourceandMediaComposition.StreamingMethod.supportedMethods. The server now returns resources suited for Apple platforms first.
Demo Improvements
- Added settings to choose the quality and the audio and subtitle languages of downloads.
- Moved URL-based downloads to the new
URLDownloaderAPI. - Added AES-128 protected content examples.
- Added a sign language toggle example to the showcase.
- Displayed artwork for audio content on tvOS.
- Removed multi-window support.
Demo Fixes
- Fixed the TestFlight button frame on tvOS.
- Fixed or removed non-working examples.
What's Changed
- Bump json from 2.20.0 to 2.21.2 by @dependabot[bot] in #1562
- Remove FB22488151 from known issues by @defagos in #1564
- Bump fastlane from 2.237.0 to 2.238.0 in the gems group by @dependabot[bot] in #1565
- Provide download file size information by @defagos in #1563
- Update fixed known issues by @defagos in #1573
- Fix non-working examples by @defagos in #1569
- Replace image for HLS VOD by @waliid in #1574
- Support quality and media selection choice for downloaded content by @defagos in #1566
- Fix download test stability by @defagos in #1575
- Pin stale action to commit SHA by @defagos in #1576
- Send useful headers in monitoring events by @defagos in #1571
- Bump mikepenz/action-junit-report from 6.4.2 to 6.5.0 in the actions group by @dependabot[bot] in #1577
- Provide supported platform information when requesting SRG SSR metadata by @defagos in #1572
- Bump fastlane from 2.238.0 to 2.239.0 in the gems group by @dependabot[bot] in #1580
- Support URL-based asset downloading by @defagos in #1582
- Bump fastlane from 2.239.0 to 2.240.0 in the gems group by @dependabot[bot] in #1581
- Update for Xcode, iOS and tvOS 27 by @defagos in #1567
- Document offline playback APIs by @defagos in #1584
- Fix TestFlight button frame on tvOS by @defagos in #1585
- Bump fastlane from 2.240.0 to 2.240.1 in the gems group across 1 directory by @dependabot[bot] in #1586
- Remove demo multi-window support by @defagos in #1587
- Support offline standard connector by @waliid in #1588
- Add FairPlay-protected content support to demo standard connector integration by @defagos in #1589
- Better organize asset loader and download files by @defagos in #1591
- Handle long chapter titles on tvOS 26 by @waliid in #1595
- Version SwiftData model schemas by @defagos in #1598
- Bump mikepenz/action-junit-report from 6.5.0 to 6.6.0 in the actions group by @dependabot[bot] in #1600
- Bump mikepenz/action-junit-report from 6.6.0 to 6.6.1 in the actions group by @dependabot[bot] in #1605
- Bump fastlane from 2.240.1 to 2.241.0 in the gems group by @dependabot[bot] in #1606
- Display audio artwork on tvOS by @defagos in #1608
- Support AES-128 protected content by @waliid in #1609
- Remove useless imports by @waliid in #1612
- Add sign language example by @defagos in #1613
- Bump fastlane from 2.241.0 to 2.241.1 in the gems group by @dependabot[bot] in #1610
- Enable trailing comma SwiftLint rule by @defagos in #1611
- Fix resume issue by @defagos in #1614
- Fix flaky tests by @defagos in #1615
- Avoid invalid resume positions by @defagos in #1616
- Polish documentation by @defagos in #1618
- Remove workaround potentially leading to infinite recursion by @defagos in #1619
- Add documentation for downloads and offline playback by @defagos in #1620
- Bump fastlane from 2.241.1 to 2.241.2 in the gems group by @dependabot[bot] in #1624
Full Changelog: 19.0.0...20.0.0