The Swift Package Index logo.Swift Package Index

Build Information

Failed to build OpenImmersive, reference 1.6.1 (cd33fd), with Swift 6.3 for macOS (SPM) on 18 Apr 2026 10:53:18 UTC.

Build Command

env DEVELOPER_DIR=/Applications/Xcode-26.4.0.app xcrun swift build --arch arm64

Build Log

 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
131 |
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
    +--- macro expansion @ObservationTracked ---------------------------
    |2 |
    |3 |     @ObservationIgnored
    |4 | private  var _displayLink: CADisplayLink?
    |  |                            `- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:42: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    |                 |                        `- error: 'Task' is only available in macOS 10.15 or newer
    |                 `- note: add '@available' attribute to enclosing property
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
macro expansion @ObservationTracked:2:40: error: 'Task' is only available in macOS 10.15 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:60: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |2 | private  var _dismissControlPanelTask: Task<Void, Never>?
    |  |                                        `- error: 'Task' is only available in macOS 10.15 or newer
    +-------------------------------------------------------------------
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:493:37: error: 'CADisplayLink' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
491 |
492 |     /// Callback from the display link. This will execute for each display frame, which may be a different rate from the video.
493 |     @objc private func tick(_ link: CADisplayLink) {
    |                        |            `- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    |                        `- note: add '@available' attribute to enclosing instance method
494 |         guard framePacking != .none, let videoOutput, let injector else {
495 |             return
macro expansion @Observable:1:70: error: 'ObservationRegistrar' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:639:1: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on class 'VideoPlayer' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
637 |         dismissControlPanelTask = nil
638 |     }
639 | }
    +--- macro expansion @Observable -----------------------------------
    | 1 | @ObservationIgnored private let _$observationRegistrar = Observation.ObservationRegistrar()
    |   |                                                                      `- error: 'ObservationRegistrar' is only available in macOS 14.0 or newer
    | 2 |
    | 3 | internal nonisolated func access<$s13OpenImmersive11VideoPlayer10ObservablefMm_6MemberfMu_>(
    +-------------------------------------------------------------------
640 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:13:2: error: 'Observable()' is only available in macOS 14.0 or newer
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    |  `- error: 'Observable()' is only available in macOS 14.0 or newer
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
/Users/admin/builder/spi-builder-workspace/Sources/Utils/APMPInjector.swift:22:27: error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
 11 |
 12 | /// Injects APMP metadata into frames to render stereo frame-packed media efficiently.
 13 | public class APMPInjector {
    |              `- note: add '@available' attribute to enclosing class
 14 |     /// Errors specific to APMP Injector.
 15 |     public enum APMPInjectorError: Error {
    :
 20 |     /// The renderer to use for enqueueing. Expose this so callers can
 21 |     /// associate it with a display layer or RealityKit component.
 22 |     public let renderer = AVSampleBufferVideoRenderer()
    |                           `- error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
 23 |     /// The source media's frame packing type, must be .sideBySide or .overUnder.
 24 |     private let packing: VideoItem.FramePacking
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:152:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
148 |
149 |     /// Instruct the UI to reveal the control panel.
150 |     public func showControlPanel() {
    |                 `- note: add '@available' attribute to enclosing instance method
151 |         shouldShowPlaybackOptions = false
152 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
153 |             shouldShowControlPanel = true
154 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:160:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
157 |
158 |     /// Instruct the UI to hide the control panel.
159 |     public func hideControlPanel() {
    |                 `- note: add '@available' attribute to enclosing instance method
160 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
161 |             shouldShowPlaybackOptions = false
162 |             shouldShowControlPanel = false
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:180:13: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
176 |     ///
177 |     /// This will only do something if resolution or audio options are available.
178 |     public func togglePlaybackOptions() {
    |                 `- note: add '@available' attribute to enclosing instance method
179 |         if bitrateLadder.count > 1 || audioOptions.count > 1 {
180 |             withAnimation {
    |             |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
181 |                 shouldShowPlaybackOptions.toggle()
182 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:192:27: error: 'AVAudioSession' is unavailable in macOS
190 |             // Configure the audio session for playback. Set the `moviePlayback` mode
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
    |                           `- error: 'AVAudioSession' is unavailable in macOS
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h:29:12: note: 'AVAudioSession' has been explicitly marked unavailable here
 27 | NS_SWIFT_SENDABLE
 28 | API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos)
 29 | @interface AVAudioSession : NSObject {
    |            `- note: 'AVAudioSession' has been explicitly marked unavailable here
 30 | @private
 31 | 	void *_impl;
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:192:42: error: 'sharedInstance()' is unavailable in macOS
190 |             // Configure the audio session for playback. Set the `moviePlayback` mode
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
    |                                          `- error: 'sharedInstance()' is unavailable in macOS
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
AVFAudio.AVAudioSession.sharedInstance:3:19: note: 'sharedInstance()' has been explicitly marked unavailable here
1 | class AVAudioSession {
2 | @available(macOS, unavailable)
3 |   open class func sharedInstance() -> AVAudioSession}
  |                   `- note: 'sharedInstance()' has been explicitly marked unavailable here
4 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:25: error: 'setCategory(_:mode:policy:options:)' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                         `- error: 'setCategory(_:mode:policy:options:)' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
AVFAudio.AVAudioSession.setCategory:3:13: note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
1 | class AVAudioSession {
2 | @available(macOS, unavailable)
3 |   open func setCategory(_ category: AVAudioSession.Category, mode: AVAudioSession.Mode, policy: AVAudioSession.RouteSharingPolicy, options: AVAudioSession.CategoryOptions = []) throws}
  |             `- note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
4 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:38: error: 'playback' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                      `- error: 'playback' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:100:40: note: 'playback' has been explicitly marked unavailable here
 98 |
 99 | /*! Use this category for music tracks.*/
100 | OS_EXPORT AVAudioSessionCategory const AVAudioSessionCategoryPlayback			API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
    |                                        `- note: 'playback' has been explicitly marked unavailable here
101 |
102 | /*! Use this category when recording audio. */
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:55: error: 'moviePlayback' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                                       `- error: 'moviePlayback' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:165:36: note: 'moviePlayback' has been explicitly marked unavailable here
163 |  Setting this mode engages appropriate output signal processing for movie playback scenarios.
164 |  Content using this mode is eligible for Enhance Dialogue processing on supported routes with capable hardware */
165 | OS_EXPORT AVAudioSessionMode const AVAudioSessionModeMoviePlayback API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
    |                                    `- note: 'moviePlayback' has been explicitly marked unavailable here
166 |
167 | /*! Only valid with kAudioSessionCategory_PlayAndRecord. Reduces the number of allowable audio
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:79: error: 'longFormVideo' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                                                               `- error: 'longFormVideo' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
AVFAudio.AVAudioSession.RouteSharingPolicy.longFormVideo:4:10: note: 'longFormVideo' has been explicitly marked unavailable here
2 |   enum RouteSharingPolicy {
3 | @available(macOS, unavailable)
4 |     case longFormVideo  }
  |          `- note: 'longFormVideo' has been explicitly marked unavailable here
5 | }
6 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:194:25: error: value of type 'AVAudioSession' has no member 'setIntendedSpatialExperience'
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
    |                         `- error: value of type 'AVAudioSession' has no member 'setIntendedSpatialExperience'
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
196 |             )
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:18: error: cannot infer contextual base in reference to member 'headTracked'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                  `- error: cannot infer contextual base in reference to member 'headTracked'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:47: error: cannot infer contextual base in reference to member 'automatic'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                                               `- error: cannot infer contextual base in reference to member 'automatic'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:78: error: cannot infer contextual base in reference to member 'automatic'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                                                                              `- error: cannot infer contextual base in reference to member 'automatic'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:231:13: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
229 |
230 |             // Detect resolution and field of view, if available
231 |             Task { [weak self] in
    |             |- error: 'Task' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
232 |                 guard let self,
233 |                       let asset = playerItem.asset as? AVURLAsset,
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:231:13: error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
229 |
230 |             // Detect resolution and field of view, if available
231 |             Task { [weak self] in
    |             |- error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
232 |                 guard let self,
233 |                       let asset = playerItem.asset as? AVURLAsset,
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:250:21: error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
248 |         selectedBitrateRungIndex = -1
249 |         selectedAudioIndex = -1
250 |         if item.url.host() != nil {
    |                     |- error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
    |                     `- note: add 'if #available' version check
251 |             playlistReader = PlaylistReader(url: item.url) { reader in
252 |                 if case .success = reader.state {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:274:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
266 |
267 |     /// Load an HLS stream variant for the currently selected resolution and audio options, preserving other states.
268 |     private func playSelectedVariant() {
    |                  `- note: add '@available' attribute to enclosing instance method
269 |         guard let url,
270 |               let playerItem = makePlayerItem(url) else {
    :
272 |         }
273 |
274 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
275 |             shouldShowPlaybackOptions = false
276 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:305:16: error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
302 |     /// - Parameters:
303 |     ///   - url: the URL to the media.
304 |     private func makePlayerItem(_ url: URL) -> AVPlayerItem? {
    |                  `- note: add '@available' attribute to enclosing instance method
305 |         if url.host() == nil, url.pathExtension != "m3u8" {
    |                |- error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
    |                `- note: add 'if #available' version check
306 |             return AVPlayerItem(url: url)
307 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:370:23: warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                `- note: property declared here
 22 |         injector?.renderer
 23 |     }
    :
368 |                     return
369 |                 }
370 |                 self?.renderer?.flush()
    |                       `- warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
371 |             }
372 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:402:19: warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                `- note: property declared here
 22 |         injector?.renderer
 23 |     }
    :
400 |                 return
401 |             }
402 |             self?.renderer?.flush()
    |                   `- warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
403 |         }
404 |         restartControlPanelTask()
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:486:31: error: 'CADisplayLink' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
465 |     /// - Parameters:
466 |     ///   - playerItem: the player item of the media that needs APMP injection.
467 |     private func setupInjector(_ playerItem: AVPlayerItem) {
    |                  `- note: add '@available' attribute to enclosing instance method
468 |         guard framePacking != .none else {
469 |             return
    :
484 |
485 |         displayLink = {
486 |             let displayLink = CADisplayLink(target: self, selector: #selector(tick))
    |                               |- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    |                               `- note: add 'if #available' version check
487 |             displayLink.add(to: .main, forMode: .common)
488 |             return displayLink
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:486:31: error: 'init(target:selector:)' is unavailable in macOS
484 |
485 |         displayLink = {
486 |             let displayLink = CADisplayLink(target: self, selector: #selector(tick))
    |                               `- error: 'init(target:selector:)' is unavailable in macOS
487 |             displayLink.add(to: .main, forMode: .common)
488 |             return displayLink
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/QuartzCore.framework/Headers/CADisplayLink.h:32:1: note: 'init(target:selector:)' has been explicitly marked unavailable here
 30 |  * For macOS, see NSView/NSWindow/NSScreen.displayLink(withTarget:selector:). */
 31 |
 32 | + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel
    | `- note: 'init(target:selector:)' has been explicitly marked unavailable here
 33 |     API_UNAVAILABLE(macos);
 34 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:500:17: warning: initialization of immutable value 'result' was never used; consider replacing with assignment to '_' or removing it [#no-usage]
498 |         let itemTime = videoOutput.itemTime(forHostTime: link.targetTimestamp)
499 |         do {
500 |             let result = try injector.processFrame(
    |                 `- warning: initialization of immutable value 'result' was never used; consider replacing with assignment to '_' or removing it [#no-usage]
501 |                 videoOutput: videoOutput,
502 |                 at: itemTime
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:536:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
534 |                 // but some HLS manifests only advertise bitrate.
535 |                 if let event, event.indicatedAverageBitrate > 0 {
536 |                     self.bitrate = event.indicatedAverageBitrate
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
537 |                 } else if let event, event.indicatedBitrate > 0 {
538 |                     self.bitrate = event.indicatedBitrate
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:538:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
536 |                     self.bitrate = event.indicatedAverageBitrate
537 |                 } else if let event, event.indicatedBitrate > 0 {
538 |                     self.bitrate = event.indicatedBitrate
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
539 |                 } else {
540 |                     self.bitrate = 0
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:540:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
538 |                     self.bitrate = event.indicatedBitrate
539 |                 } else {
540 |                     self.bitrate = 0
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
541 |                 }
542 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:543:29: warning: main actor-isolated property 'scrubState' can not be referenced from a Sendable closure
107 |     }
108 |     /// The current state of the scrubber.
109 |     public var scrubState: ScrubState = .notScrubbing {
    |                `- note: property declared here
110 |        didSet {
111 |           switch scrubState {
    :
541 |                 }
542 |
543 |                 switch self.scrubState {
    |                             `- warning: main actor-isolated property 'scrubState' can not be referenced from a Sendable closure
544 |                 case .notScrubbing:
545 |                     self.currentTime = time.seconds
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:545:26: warning: main actor-isolated property 'currentTime' can not be mutated from a Sendable closure
 97 |     ///
 98 |     /// This variable is updated by video playback but can be overwritten by a scrubber, in conjunction with `scrubState`.
 99 |     public var currentTime: Double = 0
    |                `- note: mutation of this property is only permitted within the actor
100 |     public enum ScrubState {
101 |         /// The scrubber is not active and reflects the video's current playback time.
    :
543 |                 switch self.scrubState {
544 |                 case .notScrubbing:
545 |                     self.currentTime = time.seconds
    |                          `- warning: main actor-isolated property 'currentTime' can not be mutated from a Sendable closure
546 |                     break
547 |                 case .scrubStarted: return
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:560:27: warning: main actor-isolated property 'duration' can not be mutated from a Sendable closure
 39 |     private(set) public var error: Error?
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
    :
558 |                 let duration = CMTimeGetSeconds(item.duration)
559 |                 if !duration.isNaN {
560 |                     self?.duration = duration
    |                           `- warning: main actor-isolated property 'duration' can not be mutated from a Sendable closure
561 |                 }
562 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:570:23: warning: main actor-isolated property 'loading' can not be mutated from a Sendable closure
 43 |     private(set) public var paused: Bool = false
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
    |                             `- note: mutation of this property is only permitted within the actor
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    :
568 |                  options: [.new, .initial]
569 |             ) { [weak self] item, _ in
570 |                 self?.loading = item.status == .unknown
    |                       `- warning: main actor-isolated property 'loading' can not be mutated from a Sendable closure
571 |                 if item.status == .failed, let error = item.error {
572 |                     print("Error: failed to load media: \(error.localizedDescription)")
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:573:27: warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    |                             `- note: mutation of this property is only permitted within the actor
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    :
571 |                 if item.status == .failed, let error = item.error {
572 |                     print("Error: failed to load media: \(error.localizedDescription)")
573 |                     self?.error = error
    |                           `- warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
574 |                 } else {
575 |                     self?.error = nil
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:575:27: warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    |                             `- note: mutation of this property is only permitted within the actor
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    :
573 |                     self?.error = error
574 |                 } else {
575 |                     self?.error = nil
    |                           `- warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
576 |                 }
577 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:585:23: warning: main actor-isolated property 'buffering' can not be mutated from a Sendable closure
 45 |     private(set) public var loading: Bool = false
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    |                             `- note: mutation of this property is only permitted within the actor
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
    :
583 |                  options: [.new, .old, .initial]
584 |             ) { [weak self] player, status in
585 |                 self?.buffering = player.timeControlStatus == .waitingToPlayAtSpecifiedRate
    |                       `- warning: main actor-isolated property 'buffering' can not be mutated from a Sendable closure
586 |                 // buffering doesn't bring up the control panel but prevents auto dismiss.
587 |                 // auto dismiss after play resumed.
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:589:27: warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
587 |                 // auto dismiss after play resumed.
588 |                 if (status.oldValue, status.newValue) == (.waitingToPlayAtSpecifiedRate, .playing) {
589 |                     self?.restartControlPanelTask()
    |                           `- warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
590 |                 }
591 |             }
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: calls to instance method 'restartControlPanelTask()' from outside of its actor context are implicitly asynchronous
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:625:35: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
    |                                   |- error: 'Task' is only available in macOS 10.15 or newer
    |                                   `- note: add 'if #available' version check
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:625:35: error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
    |                                   |- error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
    |                                   `- note: add 'if #available' version check
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:24: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                        |- error: 'Task' is only available in macOS 10.15 or newer
    |                        `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:29: error: 'sleep(for:tolerance:clock:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                             |- error: 'sleep(for:tolerance:clock:)' is only available in macOS 13.0 or newer
    |                             `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:41: error: 'seconds' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                                         |- error: 'seconds' is only available in macOS 13.0 or newer
    |                                         `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:628:17: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
    |                 |- error: 'Task' is only available in macOS 10.15 or newer
    |                 `- note: add 'if #available' version check
629 |                 hideControlPanel()
630 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:628:22: error: 'isCancelled' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
    |                      |- error: 'isCancelled' is only available in macOS 10.15 or newer
    |                      `- note: add 'if #available' version check
629 |                 hideControlPanel()
630 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:636:34: error: 'cancel()' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
633 |
634 |     /// Cancel the current task to dismiss the control panel, if any.
635 |     private func cancelControlPanelTask() {
    |                  `- note: add '@available' attribute to enclosing instance method
636 |         dismissControlPanelTask?.cancel()
    |                                  |- error: 'cancel()' is only available in macOS 10.15 or newer
    |                                  `- note: add 'if #available' version check
637 |         dismissControlPanelTask = nil
638 |     }
/Users/admin/builder/spi-builder-workspace/Sources/Extensions/AVMetadataIdentifier+Codable.swift:11:1: warning: extension declares a conformance of imported type 'AVMetadataIdentifier' to imported protocols 'Decodable', 'Encodable'; this will not behave correctly if the owners of 'AVFoundation' introduce this conformance in the future
 9 |
10 | /// Codable extension of AVMetadataIdentifier so it can be used in VideoItem
11 | extension AVMetadataIdentifier: Codable {
   | |- warning: extension declares a conformance of imported type 'AVMetadataIdentifier' to imported protocols 'Decodable', 'Encodable'; this will not behave correctly if the owners of 'AVFoundation' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |     public typealias RawValue = String
13 |
[#ActorIsolatedCall]: <https://docs.swift.org/compiler/documentation/diagnostics/actor-isolated-call>
[24/24] Compiling OpenImmersive AVMetadataIdentifier+Codable.swift
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:36:27: error: 'ARKitSession' is only available in macOS 26.0 or newer
11 |
12 | /// Provides a convenience interface to obtain head pose transforms and subscribing a closure to handle pose update events.
13 | public class HeadTracker {
   |              `- note: add '@available' attribute to enclosing class
14 |     public enum State {
15 |         /// Head tracking is stopped.
   :
34 |     }
35 |
36 |     private let session = ARKitSession()
   |                           `- error: 'ARKitSession' is only available in macOS 26.0 or newer
37 |     private let worldTracking = WorldTrackingProvider()
38 |     private var subscription: EventSubscription?
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:36:27: error: 'init()' is unavailable in macOS
34 |     }
35 |
36 |     private let session = ARKitSession()
   |                           `- error: 'init()' is unavailable in macOS
37 |     private let worldTracking = WorldTrackingProvider()
38 |     private var subscription: EventSubscription?
ARKit.ARKitSession.init:3:22: note: 'init()' has been explicitly marked unavailable here
1 | class ARKitSession {
2 | @available(macOS, unavailable)
3 |   public convenience init()}
  |                      `- note: 'init()' has been explicitly marked unavailable here
4 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:37:33: error: 'WorldTrackingProvider' is only available in macOS 26.0 or newer
11 |
12 | /// Provides a convenience interface to obtain head pose transforms and subscribing a closure to handle pose update events.
13 | public class HeadTracker {
   |              `- note: add '@available' attribute to enclosing class
14 |     public enum State {
15 |         /// Head tracking is stopped.
   :
35 |
36 |     private let session = ARKitSession()
37 |     private let worldTracking = WorldTrackingProvider()
   |                                 `- error: 'WorldTrackingProvider' is only available in macOS 26.0 or newer
38 |     private var subscription: EventSubscription?
39 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:38:31: error: 'EventSubscription' is only available in macOS 15.0 or newer
11 |
12 | /// Provides a convenience interface to obtain head pose transforms and subscribing a closure to handle pose update events.
13 | public class HeadTracker {
   |              `- note: add '@available' attribute to enclosing class
14 |     public enum State {
15 |         /// Head tracking is stopped.
   :
36 |     private let session = ARKitSession()
37 |     private let worldTracking = WorldTrackingProvider()
38 |     private var subscription: EventSubscription?
   |                               `- error: 'EventSubscription' is only available in macOS 15.0 or newer
39 |
40 |     /// Starts head tracking by starting the underlying `ARKitSession` and subscribes to pose update events.
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:44:32: error: cannot find type 'RealityViewContent' in scope
42 |     ///   - content: The `RealityViewContent` provided by the `RealityView`'s `body` closure.
43 |     ///   - handler: A closure that runs when the head pose update occurs.
44 |     public func start(content: RealityViewContent, _ handler: @escaping (SceneEvents.Update) -> Void) {
   |                                `- error: cannot find type 'RealityViewContent' in scope
45 |         guard state == .stopped else { return }
46 |         state = .starting
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift:44:74: error: 'SceneEvents' is only available in macOS 10.15 or newer
11 |
12 | /// Provides a convenience interface to obtain head pose transforms and subscribing a closure to handle pose update events.
13 | public class HeadTracker {
   |              `- note: add '@available' attribute to enclosing class
14 |     public enum State {
15 |         /// Head tracking is stopped.
   :
42 |     ///   - content: The `RealityViewContent` provided by the `RealityView`'s `body` closure.
43 |     ///   - handler: A closure that runs when the head pose update occurs.
44 |     public func start(content: RealityViewContent, _ handler: @escaping (SceneEvents.Update) -> Void) {
   |                 |                                                        `- error: 'SceneEvents' is only available in macOS 10.15 or newer
   |                 `- note: add '@available' attribute to enclosing instance method
45 |         guard state == .stopped else { return }
46 |         state = .starting
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:13:2: error: 'Observable()' is only available in macOS 14.0 or newer
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    |  `- error: 'Observable()' is only available in macOS 14.0 or newer
 14 | public class VideoPlayer: Sendable {
 15 |     //MARK: Video Player and Video Renderer
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:19:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'injector' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
 17 |     public let player = AVPlayer()
 18 |     /// The APMP tag injector used in video streams that are frame-packed side by side or over under.
 19 |     private var injector: APMPInjector?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:27:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'title' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 25 |     //MARK: Variables accessible to the UI
 26 |     /// The title of the current video (empty string if none).
 27 |     private(set) public var title: String = ""
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 28 |     /// A short description of the current video, displayed under the title (empty string if none).
 29 |     private(set) public var description: String = ""
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:29:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'description' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 27 |     private(set) public var title: String = ""
 28 |     /// A short description of the current video, displayed under the title (empty string if none).
 29 |     private(set) public var description: String = ""
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 30 |     /// The url of the current video.
 31 |     private(set) public var url: URL?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:31:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'url' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 29 |     private(set) public var description: String = ""
 30 |     /// The url of the current video.
 31 |     private(set) public var url: URL?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 32 |     /// The AVFoundation metadata of the current video.
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:33:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'metadata' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 31 |     private(set) public var url: URL?
 32 |     /// The AVFoundation metadata of the current video.
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 34 |     /// The frame packing type of the video media, if any.
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:35:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'framePacking' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
 34 |     /// The frame packing type of the video media, if any.
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 36 |     /// The projection type of the video media, defaults to VR180.
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:37:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'projection' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
 36 |     /// The projection type of the video media, defaults to VR180.
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:39:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'error' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:41:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'duration' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 39 |     private(set) public var error: Error?
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:43:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'paused' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 41 |     private(set) public var duration: Double = 0
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:45:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'loading' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 43 |     private(set) public var paused: Bool = false
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:47:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'buffering' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 45 |     private(set) public var loading: Bool = false
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:49:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'hasReachedEnd' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 47 |     private(set) public var buffering: Bool = false
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 50 |     /// The callback to execute when playback reaches the end of the video.
 51 |     public var playbackEndedAction: CustomAction?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:51:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'playbackEndedAction' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 49 |     private(set) public var hasReachedEnd: Bool = false
 50 |     /// The callback to execute when playback reaches the end of the video.
 51 |     public var playbackEndedAction: CustomAction?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 52 |     /// The aspect ratio of the current media (width / height) (equirectangular projection only).
 53 |     private(set) public var aspectRatio: Float?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:53:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'aspectRatio' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 51 |     public var playbackEndedAction: CustomAction?
 52 |     /// The aspect ratio of the current media (width / height) (equirectangular projection only).
 53 |     private(set) public var aspectRatio: Float?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 54 |     /// The horizontal field of view for the current media (equirectangular projection only).
 55 |     private(set) public var horizontalFieldOfView: Float = 180.0
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:55:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'horizontalFieldOfView' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 53 |     private(set) public var aspectRatio: Float?
 54 |     /// The horizontal field of view for the current media (equirectangular projection only).
 55 |     private(set) public var horizontalFieldOfView: Float = 180.0
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 56 |     /// The vertical field of view for the current media (equirectangular projection only).
 57 |     public var verticalFieldOfView: Float {
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:66:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'bitrate' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:68:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'bitrateLadder' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 66 |     private(set) public var bitrate: Double = 0
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 69 |     /// The currently selected bitrate rung index, if any. Only available if streaming from a HLS server (m3u8).
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:70:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'selectedBitrateRungIndex' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
 69 |     /// The currently selected bitrate rung index, if any. Only available if streaming from a HLS server (m3u8).
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 71 |     /// Audio options available for the video stream, only available if streaming from a HLS server (m3u8) and with separate audio playlists.
 72 |     private(set) public var audioOptions: [AudioOption] = []
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:72:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'audioOptions' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
 71 |     /// Audio options available for the video stream, only available if streaming from a HLS server (m3u8) and with separate audio playlists.
 72 |     private(set) public var audioOptions: [AudioOption] = []
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 73 |     /// The currently selected audio index, if any. Only available if streaming from a HLS server (m3u8).
 74 |     private(set) public var selectedAudioIndex: Int = -1
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:74:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'selectedAudioIndex' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 72 |     private(set) public var audioOptions: [AudioOption] = []
 73 |     /// The currently selected audio index, if any. Only available if streaming from a HLS server (m3u8).
 74 |     private(set) public var selectedAudioIndex: Int = -1
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 75 |     /// `true` if the control panel should be visible to the user.
 76 |     private(set) public var shouldShowControlPanel: Bool = true
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:76:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'shouldShowControlPanel' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 74 |     private(set) public var selectedAudioIndex: Int = -1
 75 |     /// `true` if the control panel should be visible to the user.
 76 |     private(set) public var shouldShowControlPanel: Bool = true
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 77 |     /// `true` if the control panel should present resolution & audio options to the user.
 78 |     private(set) public var shouldShowPlaybackOptions: Bool = false
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:78:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'shouldShowPlaybackOptions' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 76 |     private(set) public var shouldShowControlPanel: Bool = true
 77 |     /// `true` if the control panel should present resolution & audio options to the user.
 78 |     private(set) public var shouldShowPlaybackOptions: Bool = false
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
 79 |     /// `true` if the HLS stream has a bitrate ladder with at least 2 rungs and the custom configuration doesn't prevent user selection.
 80 |     public var canChooseResolution: Bool {
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:99:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'currentTime' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 97 |     ///
 98 |     /// This variable is updated by video playback but can be overwritten by a scrubber, in conjunction with `scrubState`.
 99 |     public var currentTime: Double = 0
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
100 |     public enum ScrubState {
101 |         /// The scrubber is not active and reflects the video's current playback time.
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:109:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'scrubState' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
107 |     }
108 |     /// The current state of the scrubber.
109 |     public var scrubState: ScrubState = .notScrubbing {
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
110 |        didSet {
111 |           switch scrubState {
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:133:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'displayLink' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
131 |
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:134:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'videoOutput' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
134 |     private var videoOutput: AVPlayerItemVideoOutput?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:135:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'timeObserver' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
133 |     private var displayLink: CADisplayLink?
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:136:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'durationObserver' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:137:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'mediaStatusObserver' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:138:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'bufferingObserver' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'dismissControlPanelTask' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:140:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'playlistReader' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
141 |     private var delegate: PlaylistLoaderDelegate?
142 |
macro expansion @Observable:1:2: error: 'ObservationTracked()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:141:5: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on property 'delegate' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
    +--- macro expansion @Observable -----------------------------------
    |1 | @ObservationTracked
    |  |  `- error: 'ObservationTracked()' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
142 |
143 |     //MARK: Public methods
macro expansion @Observable:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:639:1: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on class 'VideoPlayer' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
637 |         dismissControlPanelTask = nil
638 |     }
639 | }
    +--- macro expansion @Observable -----------------------------------
    | 1 | @ObservationIgnored private let _$observationRegistrar = Observation.ObservationRegistrar()
    |   |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    | 2 |
    | 3 | internal nonisolated func access<$s13OpenImmersive11VideoPlayer10ObservablefMm_6MemberfMu_>(
    +-------------------------------------------------------------------
640 |
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:19:40: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
 17 |     public let player = AVPlayer()
 18 |     /// The APMP tag injector used in video streams that are frame-packed side by side or over under.
 19 |     private var injector: APMPInjector?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The APMP tag injector used in video streams that are frame-packed side by side or over under.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _injector: APMPInjector?
    +-------------------------------------------------------------------
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
macro expansion @ObservationTracked:4:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:27:47: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 25 |     //MARK: Variables accessible to the UI
 26 |     /// The title of the current video (empty string if none).
 27 |     private(set) public var title: String = ""
    +--- macro expansion @ObservationTracked ---------------------------
    |2 |     /// The title of the current video (empty string if none).
    |3 |
    |4 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |5 | private  var _title: String = ""
    +-------------------------------------------------------------------
 28 |     /// A short description of the current video, displayed under the title (empty string if none).
 29 |     private(set) public var description: String = ""
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:29:53: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 27 |     private(set) public var title: String = ""
 28 |     /// A short description of the current video, displayed under the title (empty string if none).
 29 |     private(set) public var description: String = ""
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// A short description of the current video, displayed under the title (empty string if none).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _description: String = ""
    +-------------------------------------------------------------------
 30 |     /// The url of the current video.
 31 |     private(set) public var url: URL?
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:31:38: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 29 |     private(set) public var description: String = ""
 30 |     /// The url of the current video.
 31 |     private(set) public var url: URL?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The url of the current video.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _url: URL?
    +-------------------------------------------------------------------
 32 |     /// The AVFoundation metadata of the current video.
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:33:75: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 31 |     private(set) public var url: URL?
 32 |     /// The AVFoundation metadata of the current video.
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The AVFoundation metadata of the current video.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _metadata: [AVMetadataIdentifier: String] = [:]
    +-------------------------------------------------------------------
 34 |     /// The frame packing type of the video media, if any.
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:35:73: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 33 |     private(set) public var metadata: [AVMetadataIdentifier: String] = [:]
 34 |     /// The frame packing type of the video media, if any.
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The frame packing type of the video media, if any.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _framePacking: VideoItem.FramePacking = .none
    +-------------------------------------------------------------------
 36 |     /// The projection type of the video media, defaults to VR180.
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:37:98: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 35 |     private(set) public var framePacking: VideoItem.FramePacking = .none
 36 |     /// The projection type of the video media, defaults to VR180.
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The projection type of the video media, defaults to VR180.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
    +-------------------------------------------------------------------
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:39:42: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// A playback error, if any.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _error: Error?
    +-------------------------------------------------------------------
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:41:49: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 39 |     private(set) public var error: Error?
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The duration in seconds of the current video (0 if none).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _duration: Double = 0
    +-------------------------------------------------------------------
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:43:49: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 41 |     private(set) public var duration: Double = 0
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if playback is currently paused, or if playback has completed.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _paused: Bool = false
    +-------------------------------------------------------------------
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:45:50: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 43 |     private(set) public var paused: Bool = false
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if playback is waiting to load the media.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _loading: Bool = false
    +-------------------------------------------------------------------
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:47:52: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 45 |     private(set) public var loading: Bool = false
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if playback is temporarily interrupted due to buffering (HLS only).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _buffering: Bool = false
    +-------------------------------------------------------------------
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:49:56: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 47 |     private(set) public var buffering: Bool = false
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if playback reached the end of the video and is no longer playing.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _hasReachedEnd: Bool = false
    +-------------------------------------------------------------------
 50 |     /// The callback to execute when playback reaches the end of the video.
 51 |     public var playbackEndedAction: CustomAction?
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:51:50: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 49 |     private(set) public var hasReachedEnd: Bool = false
 50 |     /// The callback to execute when playback reaches the end of the video.
 51 |     public var playbackEndedAction: CustomAction?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The callback to execute when playback reaches the end of the video.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _playbackEndedAction: CustomAction?
    +-------------------------------------------------------------------
 52 |     /// The aspect ratio of the current media (width / height) (equirectangular projection only).
 53 |     private(set) public var aspectRatio: Float?
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:53:48: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 51 |     public var playbackEndedAction: CustomAction?
 52 |     /// The aspect ratio of the current media (width / height) (equirectangular projection only).
 53 |     private(set) public var aspectRatio: Float?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The aspect ratio of the current media (width / height) (equirectangular projection only).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _aspectRatio: Float?
    +-------------------------------------------------------------------
 54 |     /// The horizontal field of view for the current media (equirectangular projection only).
 55 |     private(set) public var horizontalFieldOfView: Float = 180.0
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:55:65: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 53 |     private(set) public var aspectRatio: Float?
 54 |     /// The horizontal field of view for the current media (equirectangular projection only).
 55 |     private(set) public var horizontalFieldOfView: Float = 180.0
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The horizontal field of view for the current media (equirectangular projection only).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _horizontalFieldOfView: Float = 180.0
    +-------------------------------------------------------------------
 56 |     /// The vertical field of view for the current media (equirectangular projection only).
 57 |     public var verticalFieldOfView: Float {
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:66:48: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _bitrate: Double = 0
    +-------------------------------------------------------------------
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:68:62: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 66 |     private(set) public var bitrate: Double = 0
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _bitrateLadder: [BitrateRung] = []
    +-------------------------------------------------------------------
 69 |     /// The currently selected bitrate rung index, if any. Only available if streaming from a HLS server (m3u8).
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:70:63: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
 69 |     /// The currently selected bitrate rung index, if any. Only available if streaming from a HLS server (m3u8).
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The currently selected bitrate rung index, if any. Only available if streaming from a HLS server (m3u8).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _selectedBitrateRungIndex: Int = -1
    +-------------------------------------------------------------------
 71 |     /// Audio options available for the video stream, only available if streaming from a HLS server (m3u8) and with separate audio playlists.
 72 |     private(set) public var audioOptions: [AudioOption] = []
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:72:61: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 70 |     private(set) public var selectedBitrateRungIndex: Int = -1
 71 |     /// Audio options available for the video stream, only available if streaming from a HLS server (m3u8) and with separate audio playlists.
 72 |     private(set) public var audioOptions: [AudioOption] = []
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// Audio options available for the video stream, only available if streaming from a HLS server (m3u8) and with separate audio playlists.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _audioOptions: [AudioOption] = []
    +-------------------------------------------------------------------
 73 |     /// The currently selected audio index, if any. Only available if streaming from a HLS server (m3u8).
 74 |     private(set) public var selectedAudioIndex: Int = -1
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:74:57: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 72 |     private(set) public var audioOptions: [AudioOption] = []
 73 |     /// The currently selected audio index, if any. Only available if streaming from a HLS server (m3u8).
 74 |     private(set) public var selectedAudioIndex: Int = -1
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// The currently selected audio index, if any. Only available if streaming from a HLS server (m3u8).
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _selectedAudioIndex: Int = -1
    +-------------------------------------------------------------------
 75 |     /// `true` if the control panel should be visible to the user.
 76 |     private(set) public var shouldShowControlPanel: Bool = true
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:76:64: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 74 |     private(set) public var selectedAudioIndex: Int = -1
 75 |     /// `true` if the control panel should be visible to the user.
 76 |     private(set) public var shouldShowControlPanel: Bool = true
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if the control panel should be visible to the user.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _shouldShowControlPanel: Bool = true
    +-------------------------------------------------------------------
 77 |     /// `true` if the control panel should present resolution & audio options to the user.
 78 |     private(set) public var shouldShowPlaybackOptions: Bool = false
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:78:68: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 76 |     private(set) public var shouldShowControlPanel: Bool = true
 77 |     /// `true` if the control panel should present resolution & audio options to the user.
 78 |     private(set) public var shouldShowPlaybackOptions: Bool = false
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | /// `true` if the control panel should present resolution & audio options to the user.
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _shouldShowPlaybackOptions: Bool = false
    +-------------------------------------------------------------------
 79 |     /// `true` if the HLS stream has a bitrate ladder with at least 2 rungs and the custom configuration doesn't prevent user selection.
 80 |     public var canChooseResolution: Bool {
macro expansion @ObservationTracked:5:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:99:39: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 97 |     ///
 98 |     /// This variable is updated by video playback but can be overwritten by a scrubber, in conjunction with `scrubState`.
 99 |     public var currentTime: Double = 0
    +--- macro expansion @ObservationTracked ---------------------------
    |3 |     /// This variable is updated by video playback but can be overwritten by a scrubber, in conjunction with `scrubState`.
    |4 |
    |5 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |6 | private  var _currentTime: Double = 0
    +-------------------------------------------------------------------
100 |     public enum ScrubState {
101 |         /// The scrubber is not active and reflects the video's current playback time.
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:130:6: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
128 |           }
129 |        }
130 |     }
    +--- macro expansion @ObservationTracked ---------------------------
    | 1 | /// The current state of the scrubber.
    | 2 |
    | 3 |     @ObservationIgnored
    |   |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    | 4 | private  var _scrubState: ScrubState = .notScrubbing {
    | 5 |
    +-------------------------------------------------------------------
131 |
132 |     //MARK: Private variables
macro expansion @ObservationTracked:3:6: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:133:44: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
131 |
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | //MARK: Private variables
    |2 |
    |3 |     @ObservationIgnored
    |  |      `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |4 | private  var _displayLink: CADisplayLink?
    +-------------------------------------------------------------------
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:134:54: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
134 |     private var videoOutput: AVPlayerItemVideoOutput?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _videoOutput: AVPlayerItemVideoOutput?
    +-------------------------------------------------------------------
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:135:35: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
133 |     private var displayLink: CADisplayLink?
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _timeObserver: Any?
    +-------------------------------------------------------------------
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:136:57: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _durationObserver: NSKeyValueObservation?
    +-------------------------------------------------------------------
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:137:60: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
135 |     private var timeObserver: Any?
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _mediaStatusObserver: NSKeyValueObservation?
    +-------------------------------------------------------------------
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:138:58: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
136 |     private var durationObserver: NSKeyValueObservation?
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _bufferingObserver: NSKeyValueObservation?
    +-------------------------------------------------------------------
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:60: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _dismissControlPanelTask: Task<Void, Never>?
    +-------------------------------------------------------------------
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:140:48: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _playlistReader: PlaylistReader?
    +-------------------------------------------------------------------
141 |     private var delegate: PlaylistLoaderDelegate?
142 |
macro expansion @ObservationTracked:1:2: error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:141:50: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
139 |     private var dismissControlPanelTask: Task<Void, Never>?
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |  |  `- error: 'ObservationIgnored()' is only available in macOS 14.0 or newer
    |2 | private  var _delegate: PlaylistLoaderDelegate?
    +-------------------------------------------------------------------
142 |
143 |     //MARK: Public methods
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:21:26: error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                |         `- error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
    |                `- note: add '@available' attribute to enclosing property
 22 |         injector?.renderer
 23 |     }
OpenImmersive/VideoPlayer.swift:123:36: warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:130:6: note: expanded code originates here
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                `- note: property declared here
 22 |         injector?.renderer
 23 |     }
    :
128 |           }
129 |        }
130 |     }
    +--- macro expansion @ObservationTracked ---------------------------
    |18 |                                  return
    |19 |                              }
    |20 |                              self?.renderer?.flush()
    |   |                                    `- warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
    |21 |                              self?.scrubState = .notScrubbing
    |22 |                              self?.restartControlPanelTask()
    +-------------------------------------------------------------------
131 |
132 |     //MARK: Private variables
OpenImmersive/VideoPlayer.swift:124:36: warning: main actor-isolated property 'scrubState' can not be mutated from a Sendable closure
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:130:6: note: expanded code originates here
107 |     }
108 |     /// The current state of the scrubber.
109 |     public var scrubState: ScrubState = .notScrubbing {
    |                `- note: mutation of this property is only permitted within the actor
110 |        didSet {
111 |           switch scrubState {
    :
128 |           }
129 |        }
130 |     }
    +--- macro expansion @ObservationTracked ---------------------------
    |19 |                              }
    |20 |                              self?.renderer?.flush()
    |21 |                              self?.scrubState = .notScrubbing
    |   |                                    `- warning: main actor-isolated property 'scrubState' can not be mutated from a Sendable closure
    |22 |                              self?.restartControlPanelTask()
    |23 |                          }
    +-------------------------------------------------------------------
131 |
132 |     //MARK: Private variables
OpenImmersive/VideoPlayer.swift:125:36: warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:130:6: note: expanded code originates here
128 |           }
129 |        }
130 |     }
    +--- macro expansion @ObservationTracked ---------------------------
    |20 |                              self?.renderer?.flush()
    |21 |                              self?.scrubState = .notScrubbing
    |22 |                              self?.restartControlPanelTask()
    |   |                                    `- warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
    |23 |                          }
    |24 |                          hasReachedEnd = false
    +-------------------------------------------------------------------
131 |
132 |     //MARK: Private variables
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: calls to instance method 'restartControlPanelTask()' from outside of its actor context are implicitly asynchronous
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:133:30: error: 'CADisplayLink' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
131 |
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
    |                 |            `- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    |                 `- note: add '@available' attribute to enclosing property
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
macro expansion @ObservationTracked:4:28: error: 'CADisplayLink' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:133:44: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
131 |
132 |     //MARK: Private variables
133 |     private var displayLink: CADisplayLink?
    +--- macro expansion @ObservationTracked ---------------------------
    |2 |
    |3 |     @ObservationIgnored
    |4 | private  var _displayLink: CADisplayLink?
    |  |                            `- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    +-------------------------------------------------------------------
134 |     private var videoOutput: AVPlayerItemVideoOutput?
135 |     private var timeObserver: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:42: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    |                 |                        `- error: 'Task' is only available in macOS 10.15 or newer
    |                 `- note: add '@available' attribute to enclosing property
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
macro expansion @ObservationTracked:2:40: error: 'Task' is only available in macOS 10.15 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:139:60: note: expanded code originates here
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
137 |     private var mediaStatusObserver: NSKeyValueObservation?
138 |     private var bufferingObserver: NSKeyValueObservation?
139 |     private var dismissControlPanelTask: Task<Void, Never>?
    +--- macro expansion @ObservationTracked ---------------------------
    |1 | @ObservationIgnored
    |2 | private  var _dismissControlPanelTask: Task<Void, Never>?
    |  |                                        `- error: 'Task' is only available in macOS 10.15 or newer
    +-------------------------------------------------------------------
140 |     private var playlistReader: PlaylistReader?
141 |     private var delegate: PlaylistLoaderDelegate?
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:493:37: error: 'CADisplayLink' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
491 |
492 |     /// Callback from the display link. This will execute for each display frame, which may be a different rate from the video.
493 |     @objc private func tick(_ link: CADisplayLink) {
    |                        |            `- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    |                        `- note: add '@available' attribute to enclosing instance method
494 |         guard framePacking != .none, let videoOutput, let injector else {
495 |             return
macro expansion @Observable:1:70: error: 'ObservationRegistrar' is only available in macOS 14.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:639:1: note: expanded code originates here
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    | `- note: in expansion of macro 'Observable' on class 'VideoPlayer' here
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
637 |         dismissControlPanelTask = nil
638 |     }
639 | }
    +--- macro expansion @Observable -----------------------------------
    | 1 | @ObservationIgnored private let _$observationRegistrar = Observation.ObservationRegistrar()
    |   |                                                                      `- error: 'ObservationRegistrar' is only available in macOS 14.0 or newer
    | 2 |
    | 3 | internal nonisolated func access<$s13OpenImmersive11VideoPlayer10ObservablefMm_6MemberfMu_>(
    +-------------------------------------------------------------------
640 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:13:2: error: 'Observable()' is only available in macOS 14.0 or newer
 11 |
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
    |  `- error: 'Observable()' is only available in macOS 14.0 or newer
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
/Users/admin/builder/spi-builder-workspace/Sources/Utils/APMPInjector.swift:22:27: error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
 11 |
 12 | /// Injects APMP metadata into frames to render stereo frame-packed media efficiently.
 13 | public class APMPInjector {
    |              `- note: add '@available' attribute to enclosing class
 14 |     /// Errors specific to APMP Injector.
 15 |     public enum APMPInjectorError: Error {
    :
 20 |     /// The renderer to use for enqueueing. Expose this so callers can
 21 |     /// associate it with a display layer or RealityKit component.
 22 |     public let renderer = AVSampleBufferVideoRenderer()
    |                           `- error: 'AVSampleBufferVideoRenderer' is only available in macOS 14.0 or newer
 23 |     /// The source media's frame packing type, must be .sideBySide or .overUnder.
 24 |     private let packing: VideoItem.FramePacking
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:152:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
148 |
149 |     /// Instruct the UI to reveal the control panel.
150 |     public func showControlPanel() {
    |                 `- note: add '@available' attribute to enclosing instance method
151 |         shouldShowPlaybackOptions = false
152 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
153 |             shouldShowControlPanel = true
154 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:160:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
157 |
158 |     /// Instruct the UI to hide the control panel.
159 |     public func hideControlPanel() {
    |                 `- note: add '@available' attribute to enclosing instance method
160 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
161 |             shouldShowPlaybackOptions = false
162 |             shouldShowControlPanel = false
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:180:13: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
176 |     ///
177 |     /// This will only do something if resolution or audio options are available.
178 |     public func togglePlaybackOptions() {
    |                 `- note: add '@available' attribute to enclosing instance method
179 |         if bitrateLadder.count > 1 || audioOptions.count > 1 {
180 |             withAnimation {
    |             |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
181 |                 shouldShowPlaybackOptions.toggle()
182 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:192:27: error: 'AVAudioSession' is unavailable in macOS
190 |             // Configure the audio session for playback. Set the `moviePlayback` mode
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
    |                           `- error: 'AVAudioSession' is unavailable in macOS
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h:29:12: note: 'AVAudioSession' has been explicitly marked unavailable here
 27 | NS_SWIFT_SENDABLE
 28 | API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos)
 29 | @interface AVAudioSession : NSObject {
    |            `- note: 'AVAudioSession' has been explicitly marked unavailable here
 30 | @private
 31 | 	void *_impl;
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:192:42: error: 'sharedInstance()' is unavailable in macOS
190 |             // Configure the audio session for playback. Set the `moviePlayback` mode
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
    |                                          `- error: 'sharedInstance()' is unavailable in macOS
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
AVFAudio.AVAudioSession.sharedInstance:3:19: note: 'sharedInstance()' has been explicitly marked unavailable here
1 | class AVAudioSession {
2 | @available(macOS, unavailable)
3 |   open class func sharedInstance() -> AVAudioSession}
  |                   `- note: 'sharedInstance()' has been explicitly marked unavailable here
4 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:25: error: 'setCategory(_:mode:policy:options:)' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                         `- error: 'setCategory(_:mode:policy:options:)' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
AVFAudio.AVAudioSession.setCategory:3:13: note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
1 | class AVAudioSession {
2 | @available(macOS, unavailable)
3 |   open func setCategory(_ category: AVAudioSession.Category, mode: AVAudioSession.Mode, policy: AVAudioSession.RouteSharingPolicy, options: AVAudioSession.CategoryOptions = []) throws}
  |             `- note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
4 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:38: error: 'playback' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                      `- error: 'playback' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:100:40: note: 'playback' has been explicitly marked unavailable here
 98 |
 99 | /*! Use this category for music tracks.*/
100 | OS_EXPORT AVAudioSessionCategory const AVAudioSessionCategoryPlayback			API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
    |                                        `- note: 'playback' has been explicitly marked unavailable here
101 |
102 | /*! Use this category when recording audio. */
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:55: error: 'moviePlayback' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                                       `- error: 'moviePlayback' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:165:36: note: 'moviePlayback' has been explicitly marked unavailable here
163 |  Setting this mode engages appropriate output signal processing for movie playback scenarios.
164 |  Content using this mode is eligible for Enhance Dialogue processing on supported routes with capable hardware */
165 | OS_EXPORT AVAudioSessionMode const AVAudioSessionModeMoviePlayback API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
    |                                    `- note: 'moviePlayback' has been explicitly marked unavailable here
166 |
167 | /*! Only valid with kAudioSessionCategory_PlayAndRecord. Reduces the number of allowable audio
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:193:79: error: 'longFormVideo' is unavailable in macOS
191 |             // to reduce the audio's dynamic range to help normalize audio levels.
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
    |                                                                               `- error: 'longFormVideo' is unavailable in macOS
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
AVFAudio.AVAudioSession.RouteSharingPolicy.longFormVideo:4:10: note: 'longFormVideo' has been explicitly marked unavailable here
2 |   enum RouteSharingPolicy {
3 | @available(macOS, unavailable)
4 |     case longFormVideo  }
  |          `- note: 'longFormVideo' has been explicitly marked unavailable here
5 | }
6 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:194:25: error: value of type 'AVAudioSession' has no member 'setIntendedSpatialExperience'
192 |             let session = AVAudioSession.sharedInstance()
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
    |                         `- error: value of type 'AVAudioSession' has no member 'setIntendedSpatialExperience'
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
196 |             )
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:18: error: cannot infer contextual base in reference to member 'headTracked'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                  `- error: cannot infer contextual base in reference to member 'headTracked'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:47: error: cannot infer contextual base in reference to member 'automatic'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                                               `- error: cannot infer contextual base in reference to member 'automatic'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:195:78: error: cannot infer contextual base in reference to member 'automatic'
193 |             try session.setCategory(.playback, mode: .moviePlayback, policy: .longFormVideo)
194 |             try session.setIntendedSpatialExperience(
195 |                 .headTracked(soundStageSize: .automatic, anchoringStrategy: .automatic)
    |                                                                              `- error: cannot infer contextual base in reference to member 'automatic'
196 |             )
197 |         } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:231:13: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
229 |
230 |             // Detect resolution and field of view, if available
231 |             Task { [weak self] in
    |             |- error: 'Task' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
232 |                 guard let self,
233 |                       let asset = playerItem.asset as? AVURLAsset,
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:231:13: error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
229 |
230 |             // Detect resolution and field of view, if available
231 |             Task { [weak self] in
    |             |- error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
    |             `- note: add 'if #available' version check
232 |                 guard let self,
233 |                       let asset = playerItem.asset as? AVURLAsset,
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:250:21: error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
203 |     /// - Parameters:
204 |     ///   - item: The object describing the video.
205 |     public func openItem(_ item: VideoItem) {
    |                 `- note: add '@available' attribute to enclosing instance method
206 |         // Clean up the AVPlayer first, avoid bad states
207 |         stop()
    :
248 |         selectedBitrateRungIndex = -1
249 |         selectedAudioIndex = -1
250 |         if item.url.host() != nil {
    |                     |- error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
    |                     `- note: add 'if #available' version check
251 |             playlistReader = PlaylistReader(url: item.url) { reader in
252 |                 if case .success = reader.state {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:274:9: error: 'withAnimation' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
266 |
267 |     /// Load an HLS stream variant for the currently selected resolution and audio options, preserving other states.
268 |     private func playSelectedVariant() {
    |                  `- note: add '@available' attribute to enclosing instance method
269 |         guard let url,
270 |               let playerItem = makePlayerItem(url) else {
    :
272 |         }
273 |
274 |         withAnimation {
    |         |- error: 'withAnimation' is only available in macOS 10.15 or newer
    |         `- note: add 'if #available' version check
275 |             shouldShowPlaybackOptions = false
276 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:305:16: error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
302 |     /// - Parameters:
303 |     ///   - url: the URL to the media.
304 |     private func makePlayerItem(_ url: URL) -> AVPlayerItem? {
    |                  `- note: add '@available' attribute to enclosing instance method
305 |         if url.host() == nil, url.pathExtension != "m3u8" {
    |                |- error: 'host(percentEncoded:)' is only available in macOS 13.0 or newer
    |                `- note: add 'if #available' version check
306 |             return AVPlayerItem(url: url)
307 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:370:23: warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                `- note: property declared here
 22 |         injector?.renderer
 23 |     }
    :
368 |                     return
369 |                 }
370 |                 self?.renderer?.flush()
    |                       `- warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
371 |             }
372 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:402:19: warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
 19 |     private var injector: APMPInjector?
 20 |     /// The video renderer to use for media that are frame-packed side by side or over under.
 21 |     public var renderer: AVSampleBufferVideoRenderer? {
    |                `- note: property declared here
 22 |         injector?.renderer
 23 |     }
    :
400 |                 return
401 |             }
402 |             self?.renderer?.flush()
    |                   `- warning: main actor-isolated property 'renderer' can not be referenced from a Sendable closure
403 |         }
404 |         restartControlPanelTask()
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:486:31: error: 'CADisplayLink' is only available in macOS 14.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
465 |     /// - Parameters:
466 |     ///   - playerItem: the player item of the media that needs APMP injection.
467 |     private func setupInjector(_ playerItem: AVPlayerItem) {
    |                  `- note: add '@available' attribute to enclosing instance method
468 |         guard framePacking != .none else {
469 |             return
    :
484 |
485 |         displayLink = {
486 |             let displayLink = CADisplayLink(target: self, selector: #selector(tick))
    |                               |- error: 'CADisplayLink' is only available in macOS 14.0 or newer
    |                               `- note: add 'if #available' version check
487 |             displayLink.add(to: .main, forMode: .common)
488 |             return displayLink
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:486:31: error: 'init(target:selector:)' is unavailable in macOS
484 |
485 |         displayLink = {
486 |             let displayLink = CADisplayLink(target: self, selector: #selector(tick))
    |                               `- error: 'init(target:selector:)' is unavailable in macOS
487 |             displayLink.add(to: .main, forMode: .common)
488 |             return displayLink
/Applications/Xcode-26.4.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX26.4.sdk/System/Library/Frameworks/QuartzCore.framework/Headers/CADisplayLink.h:32:1: note: 'init(target:selector:)' has been explicitly marked unavailable here
 30 |  * For macOS, see NSView/NSWindow/NSScreen.displayLink(withTarget:selector:). */
 31 |
 32 | + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel
    | `- note: 'init(target:selector:)' has been explicitly marked unavailable here
 33 |     API_UNAVAILABLE(macos);
 34 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:500:17: warning: initialization of immutable value 'result' was never used; consider replacing with assignment to '_' or removing it [#no-usage]
498 |         let itemTime = videoOutput.itemTime(forHostTime: link.targetTimestamp)
499 |         do {
500 |             let result = try injector.processFrame(
    |                 `- warning: initialization of immutable value 'result' was never used; consider replacing with assignment to '_' or removing it [#no-usage]
501 |                 videoOutput: videoOutput,
502 |                 at: itemTime
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:536:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
534 |                 // but some HLS manifests only advertise bitrate.
535 |                 if let event, event.indicatedAverageBitrate > 0 {
536 |                     self.bitrate = event.indicatedAverageBitrate
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
537 |                 } else if let event, event.indicatedBitrate > 0 {
538 |                     self.bitrate = event.indicatedBitrate
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:538:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
536 |                     self.bitrate = event.indicatedAverageBitrate
537 |                 } else if let event, event.indicatedBitrate > 0 {
538 |                     self.bitrate = event.indicatedBitrate
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
539 |                 } else {
540 |                     self.bitrate = 0
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:540:26: warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
 64 |     }
 65 |     /// The bitrate of the current video stream (0 if none), only available if streaming from a HLS server (m3u8).
 66 |     private(set) public var bitrate: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 67 |     /// Bitrate/resolution ladder available for the video stream, only available if streaming from a HLS server (m3u8).
 68 |     private(set) public var bitrateLadder: [BitrateRung] = []
    :
538 |                     self.bitrate = event.indicatedBitrate
539 |                 } else {
540 |                     self.bitrate = 0
    |                          `- warning: main actor-isolated property 'bitrate' can not be mutated from a Sendable closure
541 |                 }
542 |
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:543:29: warning: main actor-isolated property 'scrubState' can not be referenced from a Sendable closure
107 |     }
108 |     /// The current state of the scrubber.
109 |     public var scrubState: ScrubState = .notScrubbing {
    |                `- note: property declared here
110 |        didSet {
111 |           switch scrubState {
    :
541 |                 }
542 |
543 |                 switch self.scrubState {
    |                             `- warning: main actor-isolated property 'scrubState' can not be referenced from a Sendable closure
544 |                 case .notScrubbing:
545 |                     self.currentTime = time.seconds
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:545:26: warning: main actor-isolated property 'currentTime' can not be mutated from a Sendable closure
 97 |     ///
 98 |     /// This variable is updated by video playback but can be overwritten by a scrubber, in conjunction with `scrubState`.
 99 |     public var currentTime: Double = 0
    |                `- note: mutation of this property is only permitted within the actor
100 |     public enum ScrubState {
101 |         /// The scrubber is not active and reflects the video's current playback time.
    :
543 |                 switch self.scrubState {
544 |                 case .notScrubbing:
545 |                     self.currentTime = time.seconds
    |                          `- warning: main actor-isolated property 'currentTime' can not be mutated from a Sendable closure
546 |                     break
547 |                 case .scrubStarted: return
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:560:27: warning: main actor-isolated property 'duration' can not be mutated from a Sendable closure
 39 |     private(set) public var error: Error?
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    |                             `- note: mutation of this property is only permitted within the actor
 42 |     /// `true` if playback is currently paused, or if playback has completed.
 43 |     private(set) public var paused: Bool = false
    :
558 |                 let duration = CMTimeGetSeconds(item.duration)
559 |                 if !duration.isNaN {
560 |                     self?.duration = duration
    |                           `- warning: main actor-isolated property 'duration' can not be mutated from a Sendable closure
561 |                 }
562 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:570:23: warning: main actor-isolated property 'loading' can not be mutated from a Sendable closure
 43 |     private(set) public var paused: Bool = false
 44 |     /// `true` if playback is waiting to load the media.
 45 |     private(set) public var loading: Bool = false
    |                             `- note: mutation of this property is only permitted within the actor
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    :
568 |                  options: [.new, .initial]
569 |             ) { [weak self] item, _ in
570 |                 self?.loading = item.status == .unknown
    |                       `- warning: main actor-isolated property 'loading' can not be mutated from a Sendable closure
571 |                 if item.status == .failed, let error = item.error {
572 |                     print("Error: failed to load media: \(error.localizedDescription)")
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:573:27: warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    |                             `- note: mutation of this property is only permitted within the actor
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    :
571 |                 if item.status == .failed, let error = item.error {
572 |                     print("Error: failed to load media: \(error.localizedDescription)")
573 |                     self?.error = error
    |                           `- warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
574 |                 } else {
575 |                     self?.error = nil
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:575:27: warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
 37 |     private(set) public var projection: VideoItem.Projection = .equirectangular(fieldOfView: 180)
 38 |     /// A playback error, if any.
 39 |     private(set) public var error: Error?
    |                             `- note: mutation of this property is only permitted within the actor
 40 |     /// The duration in seconds of the current video (0 if none).
 41 |     private(set) public var duration: Double = 0
    :
573 |                     self?.error = error
574 |                 } else {
575 |                     self?.error = nil
    |                           `- warning: main actor-isolated property 'error' can not be mutated from a Sendable closure
576 |                 }
577 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:585:23: warning: main actor-isolated property 'buffering' can not be mutated from a Sendable closure
 45 |     private(set) public var loading: Bool = false
 46 |     /// `true` if playback is temporarily interrupted due to buffering (HLS only).
 47 |     private(set) public var buffering: Bool = false
    |                             `- note: mutation of this property is only permitted within the actor
 48 |     /// `true` if playback reached the end of the video and is no longer playing.
 49 |     private(set) public var hasReachedEnd: Bool = false
    :
583 |                  options: [.new, .old, .initial]
584 |             ) { [weak self] player, status in
585 |                 self?.buffering = player.timeControlStatus == .waitingToPlayAtSpecifiedRate
    |                       `- warning: main actor-isolated property 'buffering' can not be mutated from a Sendable closure
586 |                 // buffering doesn't bring up the control panel but prevents auto dismiss.
587 |                 // auto dismiss after play resumed.
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:589:27: warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
587 |                 // auto dismiss after play resumed.
588 |                 if (status.oldValue, status.newValue) == (.waitingToPlayAtSpecifiedRate, .playing) {
589 |                     self?.restartControlPanelTask()
    |                           `- warning: call to main actor-isolated instance method 'restartControlPanelTask()' in a synchronous nonisolated context [#ActorIsolatedCall]
590 |                 }
591 |             }
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: calls to instance method 'restartControlPanelTask()' from outside of its actor context are implicitly asynchronous
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:625:35: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
    |                                   |- error: 'Task' is only available in macOS 10.15 or newer
    |                                   `- note: add 'if #available' version check
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:625:35: error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
    |                                   |- error: 'init(name:priority:operation:)' is only available in macOS 10.15 or newer
    |                                   `- note: add 'if #available' version check
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:24: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                        |- error: 'Task' is only available in macOS 10.15 or newer
    |                        `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:29: error: 'sleep(for:tolerance:clock:)' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                             |- error: 'sleep(for:tolerance:clock:)' is only available in macOS 13.0 or newer
    |                             `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:626:41: error: 'seconds' is only available in macOS 13.0 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
    |                                         |- error: 'seconds' is only available in macOS 13.0 or newer
    |                                         `- note: add 'if #available' version check
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:628:17: error: 'Task' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
    |                 |- error: 'Task' is only available in macOS 10.15 or newer
    |                 `- note: add 'if #available' version check
629 |                 hideControlPanel()
630 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:628:22: error: 'isCancelled' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
621 |
622 |     /// Restart a task with a 10-second timer to auto-hide the control panel.
623 |     public func restartControlPanelTask() {
    |                 `- note: add '@available' attribute to enclosing instance method
624 |         cancelControlPanelTask()
625 |         dismissControlPanelTask = Task {
626 |             try? await Task.sleep(for: .seconds(10))
627 |             let videoIsPlaying = error == nil && !loading && !paused && !hasReachedEnd && !buffering
628 |             if !Task.isCancelled, videoIsPlaying {
    |                      |- error: 'isCancelled' is only available in macOS 10.15 or newer
    |                      `- note: add 'if #available' version check
629 |                 hideControlPanel()
630 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift:636:34: error: 'cancel()' is only available in macOS 10.15 or newer
 12 | /// Video Player Controller interfacing the underlying `AVPlayer`, exposing states and controls to the UI.
 13 | @Observable
 14 | public class VideoPlayer: Sendable {
    |              `- note: add '@available' attribute to enclosing class
 15 |     //MARK: Video Player and Video Renderer
 16 |     /// The video player.
    :
633 |
634 |     /// Cancel the current task to dismiss the control panel, if any.
635 |     private func cancelControlPanelTask() {
    |                  `- note: add '@available' attribute to enclosing instance method
636 |         dismissControlPanelTask?.cancel()
    |                                  |- error: 'cancel()' is only available in macOS 10.15 or newer
    |                                  `- note: add 'if #available' version check
637 |         dismissControlPanelTask = nil
638 |     }
/Users/admin/builder/spi-builder-workspace/Sources/Extensions/AVMetadataIdentifier+Codable.swift:11:1: warning: extension declares a conformance of imported type 'AVMetadataIdentifier' to imported protocols 'Decodable', 'Encodable'; this will not behave correctly if the owners of 'AVFoundation' introduce this conformance in the future
 9 |
10 | /// Codable extension of AVMetadataIdentifier so it can be used in VideoItem
11 | extension AVMetadataIdentifier: Codable {
   | |- warning: extension declares a conformance of imported type 'AVMetadataIdentifier' to imported protocols 'Decodable', 'Encodable'; this will not behave correctly if the owners of 'AVFoundation' introduce this conformance in the future
   | `- note: add '@retroactive' to silence this warning
12 |     public typealias RawValue = String
13 |
[#ActorIsolatedCall]: <https://docs.swift.org/compiler/documentation/diagnostics/actor-isolated-call>
BUILD FAILURE 6.3 macosSpm