Contents

srgssr/pillarbox-apple

Pillarbox is the iOS and tvOS modern reactive SRG SSR player ecosystem implemented on top of AVFoundation and AVKit. Pillarbox has been designed with robustness, efficiency and flexibility in mind, with full customization of:

DocC documentation

Documentation is available as a DocC documentation catalog. This catalog must be built by opening the project with Xcode and selecting Product > Build Documentation. You can then access it right from within the Xcode documentation window.

Online documentation

Documentation for each major product provided by Pillarbox can also be found online on Swift Package Index:

  • Player: Create engaging audio and video playback experiences.
  • StandardConnector: Connect to a standard metadata source.
  • CoreBusiness: Play SRG SSR content with the Player framework.
  • Monitoring: Monitor playback activity.
  • Analytics: Measure app usage according to SRG SSR requirements.

Documentation is also available for companion products:

  • Core: Essential tools used when implementing Pillarbox.
  • Circumspect: A Nimble-based framework for testing Combine publishers.

[!TIP] Documentation available from the above links opens for the latest tag. Use Swift Package Index navigation top bar to quickly switch to another tag or main.

Miscellaneous documentation

Further documentation is also available by following the links below:

Plugins

The package provides a single plugin which automatically inserts correct versioning information into binaries. This plugin must be trusted interactively when a project integrating Pillarbox is built using Xcode for the first time.

On a continuous integration server you must trust plugins automatically by setting an appropriate default:

defaults write com.apple.dt.Xcode IDESkipPackagePluginFingerprintValidatation -bool YES

If you are using Xcode Cloud this can be achieved with a custom build script.

If your project is built with xcodebuild directly the same effect can be achieved by passing the -skipPackagePluginValidation option.

[!IMPORTANT] Build services such as GitHub Actions, Bitrise, CircleCI, and Travis CI often provide caching mechanisms to accelerate CI/CD pipelines, including caching Swift package sources. Pillarbox leverages Git tags from its package repository to automatically determine the correct version. However, this process depends on having up-to-date local tags, which may not be guaranteed when a package cache is used.

To ensure accuracy and reliability, we recommend performing clean builds when delivering your application via a delivery pipeline. Caches can still be utilized for routine continuous integration tasks to save time during development.

Code example

With Pillarbox creating a custom video player user interface has never been easier. Simply instantiate a Player and start building your user interface in SwiftUI right away:

import PillarboxPlayer
import SwiftUI

struct PlayerView: View {
    @StateObject private var player = Player(
        item: .simple(url: URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/img_bipbop_adv_example_ts/master.m3u8")!)
    )

    var body: some View {
        ZStack {
            VideoView(player: player)
            Button(action: player.togglePlayPause) {
                Image(systemName: player.shouldPlay ? "pause.circle.fill" : "play.circle.fill")
                    .resizable()
                    .frame(width: 80, height: 80)
            }
        }
        .onAppear(perform: player.play)
    }
}

With the expressiveness of SwiftUI, our rich playback API and the set of components at your disposal you will have a full-fledged player user interface in no time.

Contributing

If you want to contribute to the project have a look at our contributing guide.

License

See the LICENSE file for more information.

Package Metadata

Repository: srgssr/pillarbox-apple

Default branch: main

README: README.md