The Swift Package Index logo.Swift Package Index

Build Information

Failed to build OpenImmersive, reference main (670e0b), with Swift 6.4 for macOS (Xcode) using Xcode 27.0 on 9 Oct 2026 06:38:14 UTC.

Build Command

env DEVELOPER_DIR=/Applications/Xcode-27.0.0-Release.Candidate.app xcrun xcodebuild -IDEClonedSourcePackagesDirPathOverride=$PWD/.dependencies -skipMacroValidation -skipPackagePluginValidation -derivedDataPath $PWD/.derivedData build -scheme OpenImmersive -destination platform=macOS,arch=arm64

Build Log

 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: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/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 |
/Users/admin/builder/spi-builder-workspace/Sources/Models/SpatialVideoTransferable.swift:19:52: error: 'TransferRepresentation' is only available in macOS 13.0 or newer
10 |
11 | /// A representation for a spatial or immersive video selected from the Photos API or dragged and dropped onto the app
12 | public struct SpatialVideo: Transferable {
   |               `- note: add '@available' attribute to enclosing struct
13 |     public enum Status: Sendable {
14 |         case failed, ready
   :
17 |     public let url: URL
18 |
19 |     public static var transferRepresentation: some TransferRepresentation {
   |                       |                            `- error: 'TransferRepresentation' is only available in macOS 13.0 or newer
   |                       `- note: add '@available' attribute to enclosing static property
20 |         FileRepresentation(contentType: .audiovisualContent) { file in
21 |             SentTransferredFile(file.url)
/Users/admin/builder/spi-builder-workspace/Sources/Models/VideoScreen.swift:91:20: error: 'VideoPlayerComponent' is only available in macOS 15.0 or newer
 76 | }
 77 |
 78 | public extension VideoPlayer {
    |        `- note: add '@available' attribute to enclosing extension
 79 |     /// A RealityKit video material created from the underlying AVPlayer or AVSampleBufferVideoRenderer,
 80 |     /// depending on whether the media has frame packing or not.
    :
 89 |     /// A RealityKit video player component created from the underlying AVPlayer or AVSampleBufferVideoRenderer,
 90 |     /// depending on whether the media has frame packing or not.
 91 |     var component: VideoPlayerComponent {
    |         |          `- error: 'VideoPlayerComponent' is only available in macOS 15.0 or newer
    |         `- note: add '@available' attribute to enclosing property
 92 |         var component: VideoPlayerComponent
 93 |         if let renderer {
/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/Utils/Closures.swift:19:29: error: cannot find type 'simd_quatf' in scope
17 |     public var body: CustomViewBuilder
18 |     public var position: SIMD3<Float>
19 |     public var orientation: simd_quatf
   |                             `- error: cannot find type 'simd_quatf' in scope
20 |     public var relativeToControlPanel: Bool
21 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift:22:101: error: cannot find type 'simd_quatf' in scope
20 |     public var relativeToControlPanel: Bool
21 |
22 |     public init(id: String, body: @escaping CustomViewBuilder, position: SIMD3<Float>, orientation: simd_quatf, relativeToControlPanel: Bool) {
   |                                                                                                     `- error: cannot find type 'simd_quatf' in scope
23 |         self.id = id
24 |         self.body = body
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:498:9: error: cannot find 'Attachment' in scope
496 |         }
497 |     } attachments: {
498 |         Attachment(id: "ControlPanel") {
    |         `- error: cannot find 'Attachment' in scope
499 |             ControlPanel(videoPlayer: .constant(VideoPlayer()))
500 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:497:20: error: extra trailing closure passed in call
495 |             content.add(entity)
496 |         }
497 |     } attachments: {
    |                    `- error: extra trailing closure passed in call
498 |         Attachment(id: "ControlPanel") {
499 |             ControlPanel(videoPlayer: .constant(VideoPlayer()))
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:493:19: error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
491 |
492 | #Preview {
493 |     RealityView { content, attachments in
    |                   `- error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
494 |         if let entity = attachments.entity(for: "ControlPanel") {
495 |             content.add(entity)
/Users/admin/builder/spi-builder-workspace/Sources/Views/DropTarget.swift:74:9: error: extraneous argument label 'windowStyle:' in macro expansion
72 | }
73 |
74 | #Preview(windowStyle: .automatic) {
   |         `- error: extraneous argument label 'windowStyle:' in macro expansion
75 |     DropTarget() {
76 |         Color.clear
/Users/admin/builder/spi-builder-workspace/Sources/Views/DropTarget.swift:74:24: error: type 'String?' has no member 'automatic'
72 | }
73 |
74 | #Preview(windowStyle: .automatic) {
   |                        `- error: type 'String?' has no member 'automatic'
75 |     DropTarget() {
76 |         Color.clear
/Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:14:38: error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   |                        |             `- error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
   |                        `- note: add '@available' attribute to enclosing property
15 |
16 |     /// Whether the picker should show spatial videos only.
macro expansion @State:2:24: error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:14:55: note: expanded code originates here
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   |     `- note: in expansion of macro 'State' on property 'selectedItem' here
   +--- macro expansion @State -----------------------------------------
   | 1 | private var __selectedItem = SwiftUICore.State._makeStorage(({
   | 2 |             let value: PhotosPickerItem? = nil
   |   |                        `- error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
   | 3 |             return value
   | 4 |         }))
   +--------------------------------------------------------------------
15 |
16 |     /// Whether the picker should show spatial videos only.
macro expansion @State:8:27: error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:14:55: note: expanded code originates here
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   |     `- note: in expansion of macro 'State' on property 'selectedItem' here
   +--- macro expansion @State -----------------------------------------
   | 6 | @SwiftUICore._StatePropertyWrapperStorage(initialValue: "JHMxM09wZW5JbW1lcnNpdmUxOEdhbGxlcnlWaWRlb1BpY2tlclYxMnNlbGVjdGVkSXRlbTMzXzVERDM3RDgzNjlBNUQwMzJCOTE4NTk3MDAxRTQxMEJBTEw1U3RhdGVmTXBfMjBfaW5pdGlhbFN0b3JlZFZhbHVlX2ZNdV8=")
   | 7 | private var _selectedItem: SwiftUICore.State<_>! = SwiftUICore._stateNil(of: {
   | 8 |         SwiftUICore.State<PhotosPickerItem?>(initialValue: nil)
   |   |                           `- error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
   | 9 |     })
   |10 |
   +--------------------------------------------------------------------
15 |
16 |     /// Whether the picker should show spatial videos only.
macro expansion @State:12:47: error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:14:55: note: expanded code originates here
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   |     `- note: in expansion of macro 'State' on property 'selectedItem' here
   +--- macro expansion @State -----------------------------------------
   |10 |
   |11 | @SwiftUICore._StateProjectedValue
   |12 | private var $selectedItem = SwiftUICore.State<PhotosPickerItem?>(initialValue: nil).projectedValue
   |   |                                               `- error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
   |13 |
   |14 | @SwiftUICore._StateInitialStoredValue("U3dpZnRVSUNvcmUuU3RhdGUuX21ha2VTdG9yYWdlKGluaXRpYWxWYWx1ZTogeyBsZXQgeDogUGhvdG9zUGlja2VySXRlbT8gPSBuaWwKcmV0dXJuIHggfSgpKQ==")
   +--------------------------------------------------------------------
15 |
16 |     /// Whether the picker should show spatial videos only.
macro expansion @State:16:20: error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
`- /Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:14:55: note: expanded code originates here
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   |     `- note: in expansion of macro 'State' on property 'selectedItem' here
   +--- macro expansion @State -----------------------------------------
   |14 | @SwiftUICore._StateInitialStoredValue("U3dpZnRVSUNvcmUuU3RhdGUuX21ha2VTdG9yYWdlKGluaXRpYWxWYWx1ZTogeyBsZXQgeDogUGhvdG9zUGlja2VySXRlbT8gPSBuaWwKcmV0dXJuIHggfSgpKQ==")
   |15 | private static var $s13OpenImmersive18GalleryVideoPickerV12selectedItem33_5DD37D8369A5D032B918597001E410BALL5StatefMp_20_initialStoredValue_fMu_ = (SwiftUICore.State._makeStorage(initialValue: {
   |16 |             let x: PhotosPickerItem? = nil
   |   |                    `- error: 'PhotosPickerItem' is only available in macOS 13.0 or newer
   |17 |             return x
   |18 |         }()))
   +--------------------------------------------------------------------
15 |
16 |     /// Whether the picker should show spatial videos only.
/Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift:23:24: error: 'PHPickerFilter' is only available in macOS 13.0 or newer
10 |
11 | /// A button revealing a `PhotosPicker` configured to only show videos or spatial videos.
12 | public struct GalleryVideoPicker: View {
   |               `- note: add '@available' attribute to enclosing struct
13 |     /// The currently selected item, if any.
14 |     @State private var selectedItem: PhotosPickerItem?
   :
21 |
22 |     /// The Photos picker filter to use based on `spatialVideosOnly`.
23 |     public var filter: PHPickerFilter {
   |                |       `- error: 'PHPickerFilter' is only available in macOS 13.0 or newer
   |                `- note: add '@available' attribute to enclosing property
24 |         spatialVideosOnly ? .all(of: [.spatialMedia, .not(.images)]) : .videos
25 |     }
[#ActorIsolatedCall]: <https://docs.swift.org/compiler/documentation/diagnostics/actor-isolated-call>
Failed frontend command:
/Applications/Xcode-27.0.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-frontend -frontend -emit-module -experimental-skip-non-inlinable-function-bodies-without-types /Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift /Users/admin/builder/spi-builder-workspace/Sources/Extensions/AVMetadataIdentifier+Codable.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/AudioOption.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/BitrateRung.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/SpatialVideoTransferable.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/VideoItem.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/VideoScreen.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/APMPInjector.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistLoaderDelegate.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistReader.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistWriter.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/VideoTools.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/DropTarget.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/FilePicker.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/GalleryVideoPicker.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/StreamUrlInput.swift -target arm64-apple-macos12.0 -disable-cross-import-overlay-search -swift-module-cross-import ARKit /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/ARKit.framework/Modules/ARKit.swiftcrossimport/SwiftUI.swiftoverlay -swift-module-cross-import PhotosUI /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PhotosUI.framework/Modules/PhotosUI.swiftcrossimport/SwiftUI.swiftoverlay -swift-module-cross-import PhotosUI /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PhotosUI.framework/Modules/PhotosUI.swiftcrossimport/WidgetKit.swiftoverlay -swift-module-cross-import PhotosUI /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/PhotosUI.framework/Modules/PhotosUI.swiftcrossimport/SwiftUI.swiftoverlay -swift-module-cross-import PhotosUI /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/PhotosUI.framework/Modules/PhotosUI.swiftcrossimport/WidgetKit.swiftoverlay -swift-module-cross-import RealityKit /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/RealityKit.framework/Modules/RealityKit.swiftcrossimport/ComputeGraph.swiftoverlay -swift-module-cross-import RealityKit /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/RealityKit.framework/Modules/RealityKit.swiftcrossimport/SwiftUI.swiftoverlay -load-resolved-plugin /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins/libFoundationMacros.dylib\#/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server\#FoundationMacros -load-resolved-plugin /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins/libObservationMacros.dylib\#/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server\#ObservationMacros -load-resolved-plugin /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins/libPreviewsMacros.dylib\#/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server\#PreviewsMacros -load-resolved-plugin /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins/libSwiftMacros.dylib\#/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server\#SwiftMacros -load-resolved-plugin /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib/swift/host/plugins/libSwiftUIMacros.dylib\#/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/bin/swift-plugin-server\#SwiftUIMacros -disable-implicit-swift-modules -Xcc -fno-implicit-modules -Xcc -fno-implicit-module-maps -explicit-swift-module-map-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive-dependencies-1.json -Xllvm -aarch64-use-tbi -enable-objc-interop -stack-check -sdk /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk -I /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug -Isystem /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/usr/lib -F /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug -F /Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks -module-cache-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules -no-color-diagnostics -Xcc -fno-color-diagnostics -enable-testing -g -debug-info-format\=dwarf -dwarf-version\=4 -swift-version 6 -Onone -D SWIFT_PACKAGE -D DEBUG -D SWIFT_MODULE_RESOURCE_BUNDLE_UNAVAILABLE -D Xcode -serialize-debugging-options -enable-experimental-feature DebugDescriptionMacro -default-isolation MainActor -empty-abi-descriptor -validate-clang-modules-once -clang-build-session-file /Users/admin/builder/spi-builder-workspace/.derivedData/ModuleCache.noindex/Session.modulevalidation -Xcc -working-directory -Xcc /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -enable-anonymous-context-mangled-names -file-compilation-dir /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode -Xcc -D_LIBCPP_HARDENING_MODE\=_LIBCPP_HARDENING_MODE_DEBUG -Xcc -ivfsstatcache -Xcc /Users/admin/builder/spi-builder-workspace/.derivedData/SDKStatCaches.noindex/macosx27.0-26A425-e829b21a6f8c9b70876ba0858053c04489db99fe7804849a4777d653a8cfc1be.sdkstatcache -Xcc -fmodules-prune-interval\=86400 -Xcc -fmodules-prune-after\=345600 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Products/Debug/include -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/DerivedSources-normal/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/DerivedSources/arm64 -Xcc -I/Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/DerivedSources -Xcc -DSWIFT_PACKAGE -Xcc -DDEBUG\=1 -no-auto-bridging-header-chaining -module-name OpenImmersive -package-name spi_builder_workspace -const-gather-protocols-file /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive_const_extract_protocols.json -disable-clang-spi -clang-target arm64-apple-macos27.0 -target-sdk-version 27.0 -target-sdk-name macosx27.0 -in-process-plugin-server-path /Applications/Xcode-27.0.0.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/host/libSwiftInProcPluginServer.dylib -emit-module-doc-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive.swiftdoc -emit-module-source-info-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive.swiftsourceinfo -emit-objc-header-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive-Swift.h -serialize-diagnostics-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive-primary-emit-module.dia -emit-dependencies-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive-primary-emit-module.d -parse-as-library -o /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive.swiftmodule -emit-abi-descriptor-path /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/OpenImmersive.build/Debug/OpenImmersive-t.build/Objects-normal/arm64/OpenImmersive.abi.json
SwiftCompile normal arm64 (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode

SwiftCompile normal arm64 Compiling\ ImmersivePlayer.swift,\ StreamUrlInput.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift /Users/admin/builder/spi-builder-workspace/Sources/Views/StreamUrlInput.swift (in target 'OpenImmersive' from project 'OpenImmersive')
/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
/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 |
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?
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:120:13: error: cannot find 'Attachment' in scope
118 |             ProgressView()
119 |         } attachments: {
120 |             Attachment(id: "ControlPanel") {
    |             `- error: cannot find 'Attachment' in scope
121 |                 ControlPanel(videoPlayer: $videoPlayer, closeAction: closeAction, customButtons: customButtons)
122 |                     .animation(.easeInOut(duration: 0.3), value: videoPlayer.shouldShowControlPanel)
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:125:13: error: cannot find 'Attachment' in scope
123 |             }
124 |
125 |             Attachment(id: "ProgressView") {
    |             `- error: cannot find 'Attachment' in scope
126 |                 ProgressView()
127 |             }
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:129:13: error: cannot find 'Attachment' in scope
127 |             }
128 |
129 |             Attachment(id: "ErrorView") {
    |             `- error: cannot find 'Attachment' in scope
130 |                 VStack {
131 |                     Image(systemName: "play.slash")
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:145:17: error: cannot find 'Attachment' in scope
143 |
144 |             ForEach(customAttachments) { attachment in
145 |                 Attachment(id: attachment.id) {
    |                 `- error: cannot find 'Attachment' in scope
146 |                     AnyView(attachment.body($videoPlayer))
147 |                         .animation(.easeInOut(duration: 0.3))
/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/Views/ImmersivePlayer.swift:119:24: error: extra trailing closure passed in call
117 |         } placeholder: {
118 |             ProgressView()
119 |         } attachments: {
    |                        `- error: extra trailing closure passed in call
120 |             Attachment(id: "ControlPanel") {
121 |                 ControlPanel(videoPlayer: $videoPlayer, closeAction: closeAction, customButtons: customButtons)
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:54:23: error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
 52 |
 53 |     public var body: some View {
 54 |         RealityView { content, attachments in
    |                       `- error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
 55 |             let config = Config.shared
 56 |
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:109:21: error: contextual closure type '@MainActor (inout RealityViewCameraContent) -> Void' expects 1 argument, but 2 were used in closure body
107 |             let tapCatcher = makeTapCatcher()
108 |             root.addChild(tapCatcher)
109 |         } update: { content, attachments in
    |                     `- error: contextual closure type '@MainActor (inout RealityViewCameraContent) -> Void' expects 1 argument, but 2 were used in closure body
110 |             if let progressView = attachments.entity(for: "ProgressView") {
111 |                 progressView.isEnabled = videoPlayer.buffering || videoPlayer.loading
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:190:19: error: 'init(shape:)' is only available in macOS 15.0 or newer
 11 |
 12 | /// An immersive video player, complete with UI controls
 13 | public struct ImmersivePlayer: View {
    |               `- note: add '@available' attribute to enclosing struct
 14 |     /// The singleton video player control interface.
 15 |     @State var videoPlayer: VideoPlayer = VideoPlayer()
    :
181 |     /// Taps captured by this invisible shape will toggle the control panel on and off.
182 |     /// - Returns: a new tap catcher entity.
183 |     private func makeTapCatcher() -> some Entity {
    |                  `- note: add '@available' attribute to enclosing instance method
184 |         let collisionShape: ShapeResource =
185 |             .generateBox(width: 100, height: 100, depth: 1)
    :
188 |         let entity = Config.shared.tapCatcherShowDebug ?
189 |         ModelEntity(
190 |             mesh: MeshResource(shape: collisionShape),
    |                   |- error: 'init(shape:)' is only available in macOS 15.0 or newer
    |                   `- note: add 'if #available' version check
191 |             materials: [UnlitMaterial(color: .red)]
192 |         ) : Entity()
/Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift:196:31: error: 'InputTargetComponent' is only available in macOS 15.0 or newer
 11 |
 12 | /// An immersive video player, complete with UI controls
 13 | public struct ImmersivePlayer: View {
    |               `- note: add '@available' attribute to enclosing struct
 14 |     /// The singleton video player control interface.
 15 |     @State var videoPlayer: VideoPlayer = VideoPlayer()
    :
181 |     /// Taps captured by this invisible shape will toggle the control panel on and off.
182 |     /// - Returns: a new tap catcher entity.
183 |     private func makeTapCatcher() -> some Entity {
    |                  `- note: add '@available' attribute to enclosing instance method
184 |         let collisionShape: ShapeResource =
185 |             .generateBox(width: 100, height: 100, depth: 1)
    :
194 |         entity.name = "TapCatcher"
195 |         entity.components.set(CollisionComponent(shapes: [collisionShape], mode: .trigger, filter: .default))
196 |         entity.components.set(InputTargetComponent())
    |                               |- error: 'InputTargetComponent' is only available in macOS 15.0 or newer
    |                               `- note: add 'if #available' version check
197 |
198 |         return entity
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:498:9: error: cannot find 'Attachment' in scope
496 |         }
497 |     } attachments: {
498 |         Attachment(id: "ControlPanel") {
    |         `- error: cannot find 'Attachment' in scope
499 |             ControlPanel(videoPlayer: .constant(VideoPlayer()))
500 |         }
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:497:20: error: extra trailing closure passed in call
495 |             content.add(entity)
496 |         }
497 |     } attachments: {
    |                    `- error: extra trailing closure passed in call
498 |         Attachment(id: "ControlPanel") {
499 |             ControlPanel(videoPlayer: .constant(VideoPlayer()))
/Users/admin/builder/spi-builder-workspace/Sources/Views/ControlPanel.swift:493:19: error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
491 |
492 | #Preview {
493 |     RealityView { content, attachments in
    |                   `- error: contextual closure type '@MainActor @Sendable (inout RealityViewCameraContent) async -> Void' expects 1 argument, but 2 were used in closure body
494 |         if let entity = attachments.entity(for: "ControlPanel") {
495 |             content.add(entity)
/Users/admin/builder/spi-builder-workspace/Sources/Views/DropTarget.swift:74:9: error: extraneous argument label 'windowStyle:' in macro expansion
72 | }
73 |
74 | #Preview(windowStyle: .automatic) {
   |         `- error: extraneous argument label 'windowStyle:' in macro expansion
75 |     DropTarget() {
76 |         Color.clear
/Users/admin/builder/spi-builder-workspace/Sources/Views/DropTarget.swift:74:24: error: type 'String?' has no member 'automatic'
72 | }
73 |
74 | #Preview(windowStyle: .automatic) {
   |                        `- error: type 'String?' has no member 'automatic'
75 |     DropTarget() {
76 |         Color.clear
/Users/admin/builder/spi-builder-workspace/Sources/Views/StreamUrlInput.swift:71:38: error: cannot find 'UIPasteboard' in scope
 69 |
 70 |                     Button {
 71 |                         if let str = UIPasteboard.general.string {
    |                                      `- error: cannot find 'UIPasteboard' in scope
 72 |                             textfieldRawVal = str
 73 |                         }
/Users/admin/builder/spi-builder-workspace/Sources/Views/StreamUrlInput.swift:65:26: error: value of type 'some View' has no member 'textInputAutocapitalization'
 63 |                         .textFieldStyle(.roundedBorder)
 64 |                         .autocorrectionDisabled()
 65 |                         .textInputAutocapitalization(.never)
    |                          `- error: value of type 'some View' has no member 'textInputAutocapitalization'
 66 |                         .onSubmit {
 67 |                             loadStream()
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Views/ImmersivePlayer.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile ImmersivePlayer.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Views/StreamUrlInput.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile StreamUrlInput.swift
SwiftCompile normal arm64 Compiling\ HeadTracker.swift,\ VideoPlayer.swift,\ AVMetadataIdentifier+Codable.swift /Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift /Users/admin/builder/spi-builder-workspace/Sources/Extensions/AVMetadataIdentifier+Codable.swift (in target 'OpenImmersive' from project 'OpenImmersive')
/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/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: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: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-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h:32:12: note: 'AVAudioSession' has been explicitly marked unavailable here
 30 | NS_SWIFT_SENDABLE
 31 | API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos)
 32 | @interface AVAudioSession : NSObject {
    |            `- note: 'AVAudioSession' has been explicitly marked unavailable here
 33 | @private
 34 | 	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(
/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h:38:1: note: 'sharedInstance()' has been explicitly marked unavailable here
 36 |
 37 | /// Return singleton instance.
 38 | + (AVAudioSession *)sharedInstance API_AVAILABLE(ios(3.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos);
    | `- note: 'sharedInstance()' has been explicitly marked unavailable here
 39 |
 40 | /// Get the list of categories available on the device.  Certain categories may be unavailable on
/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)
/Applications/Xcode-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h:73:1: note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
 71 | 	however.
 72 | */
 73 | - (BOOL)setCategory:(AVAudioSessionCategory)category
    | `- note: 'setCategory(_:mode:policy:options:)' has been explicitly marked unavailable here
 74 | 				  mode:(AVAudioSessionMode)mode
 75 | 	routeSharingPolicy:(AVAudioSessionRouteSharingPolicy)policy
/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-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:103:40: note: 'playback' has been explicitly marked unavailable here
 101 |
 102 | /*! Use this category for music tracks.*/
 103 | 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
 104 |
 105 | /*! 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-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h:168:36: note: 'moviePlayback' has been explicitly marked unavailable here
 166 |  Setting this mode engages appropriate output signal processing for movie playback scenarios.
 167 |  Content using this mode is eligible for Enhance Dialogue processing on supported routes with capable hardware */
 168 | 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
 169 |
 170 | /*! 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: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: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-27.0.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX27.0.sdk/System/Library/Frameworks/QuartzCore.framework/Headers/CADisplayLink.h:33:1: note: 'init(target:selector:)' has been explicitly marked unavailable here
 31 |  * For iOS, see UIScene.displayLink(target:selector:) */
 32 |
 33 | + (CADisplayLink *)displayLinkWithTarget:(id)target selector:(SEL)sel
    | `- note: 'init(target:selector:)' has been explicitly marked unavailable here
 34 |     API_UNAVAILABLE(macos);
 35 |
/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 [#NoUsage]
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 [#NoUsage]
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: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 {
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Controllers/HeadTracker.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile HeadTracker.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Controllers/VideoPlayer.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile VideoPlayer.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Extensions/AVMetadataIdentifier+Codable.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile AVMetadataIdentifier+Codable.swift
SwiftCompile normal arm64 Compiling\ Closures.swift,\ Config.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift (in target 'OpenImmersive' from project 'OpenImmersive')
/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
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift:19:29: error: cannot find type 'simd_quatf' in scope
17 |     public var body: CustomViewBuilder
18 |     public var position: SIMD3<Float>
19 |     public var orientation: simd_quatf
   |                             `- error: cannot find type 'simd_quatf' in scope
20 |     public var relativeToControlPanel: Bool
21 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift:22:101: error: cannot find type 'simd_quatf' in scope
20 |     public var relativeToControlPanel: Bool
21 |
22 |     public init(id: String, body: @escaping CustomViewBuilder, position: SIMD3<Float>, orientation: simd_quatf, relativeToControlPanel: Bool) {
   |                                                                                                     `- error: cannot find type 'simd_quatf' in scope
23 |         self.id = id
24 |         self.body = body
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift:91:27: error: 'Regex' is only available in macOS 13.0 or newer
 10 |
 11 | /// Fetches custom values in the application's openimmersive.plist
 12 | public final class Config: Sendable {
    |                    `- note: add '@available' attribute to enclosing class
 13 |     /// URL scheme to substitute to http/https for loading HLS playlists (String): this is needed for selecting bandwidth or audio.
 14 |     public let customHttpUrlScheme: String
    :
 87 |     ///   - colorString: text to be parsed, expected to be a hex color literal in the #RRGGBB or #RRGGBBAA format.
 88 |     /// - Returns: the corresponding Color, if the string is well formatted, otherwise nil.
 89 |     private static func color(from colorString: String) -> Color? {
    |                         `- note: add '@available' attribute to enclosing static method
 90 |         let trimmedString = colorString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 91 |         let colorSearch = /#(?<red>[0-9A-F]{2})(?<green>[0-9A-F]{2})(?<blue>[0-9A-F]{2})(?<alpha>[0-9A-F]{2})?/
    |                           |- error: 'Regex' is only available in macOS 13.0 or newer
    |                           `- note: add 'if #available' version check
 92 |
 93 |         guard let color = try? colorSearch.firstMatch(in: trimmedString),
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift:93:44: error: 'firstMatch(in:)' is only available in macOS 13.0 or newer
 10 |
 11 | /// Fetches custom values in the application's openimmersive.plist
 12 | public final class Config: Sendable {
    |                    `- note: add '@available' attribute to enclosing class
 13 |     /// URL scheme to substitute to http/https for loading HLS playlists (String): this is needed for selecting bandwidth or audio.
 14 |     public let customHttpUrlScheme: String
    :
 87 |     ///   - colorString: text to be parsed, expected to be a hex color literal in the #RRGGBB or #RRGGBBAA format.
 88 |     /// - Returns: the corresponding Color, if the string is well formatted, otherwise nil.
 89 |     private static func color(from colorString: String) -> Color? {
    |                         `- note: add '@available' attribute to enclosing static method
 90 |         let trimmedString = colorString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 91 |         let colorSearch = /#(?<red>[0-9A-F]{2})(?<green>[0-9A-F]{2})(?<blue>[0-9A-F]{2})(?<alpha>[0-9A-F]{2})?/
 92 |
 93 |         guard let color = try? colorSearch.firstMatch(in: trimmedString),
    |                                            |- error: 'firstMatch(in:)' is only available in macOS 13.0 or newer
    |                                            `- note: add 'if #available' version check
 94 |               let red256 = Int(color.red, radix: 16),
 95 |               let green256 = Int(color.green, radix: 16),
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift:94:32: error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
 10 |
 11 | /// Fetches custom values in the application's openimmersive.plist
 12 | public final class Config: Sendable {
    |                    `- note: add '@available' attribute to enclosing class
 13 |     /// URL scheme to substitute to http/https for loading HLS playlists (String): this is needed for selecting bandwidth or audio.
 14 |     public let customHttpUrlScheme: String
    :
 87 |     ///   - colorString: text to be parsed, expected to be a hex color literal in the #RRGGBB or #RRGGBBAA format.
 88 |     /// - Returns: the corresponding Color, if the string is well formatted, otherwise nil.
 89 |     private static func color(from colorString: String) -> Color? {
    |                         `- note: add '@available' attribute to enclosing static method
 90 |         let trimmedString = colorString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 91 |         let colorSearch = /#(?<red>[0-9A-F]{2})(?<green>[0-9A-F]{2})(?<blue>[0-9A-F]{2})(?<alpha>[0-9A-F]{2})?/
 92 |
 93 |         guard let color = try? colorSearch.firstMatch(in: trimmedString),
 94 |               let red256 = Int(color.red, radix: 16),
    |                                |- error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
    |                                `- note: add 'if #available' version check
 95 |               let green256 = Int(color.green, radix: 16),
 96 |               let blue256 = Int(color.blue, radix: 16) else {
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift:95:34: error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
 10 |
 11 | /// Fetches custom values in the application's openimmersive.plist
 12 | public final class Config: Sendable {
    |                    `- note: add '@available' attribute to enclosing class
 13 |     /// URL scheme to substitute to http/https for loading HLS playlists (String): this is needed for selecting bandwidth or audio.
 14 |     public let customHttpUrlScheme: String
    :
 87 |     ///   - colorString: text to be parsed, expected to be a hex color literal in the #RRGGBB or #RRGGBBAA format.
 88 |     /// - Returns: the corresponding Color, if the string is well formatted, otherwise nil.
 89 |     private static func color(from colorString: String) -> Color? {
    |                         `- note: add '@available' attribute to enclosing static method
 90 |         let trimmedString = colorString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 91 |         let colorSearch = /#(?<red>[0-9A-F]{2})(?<green>[0-9A-F]{2})(?<blue>[0-9A-F]{2})(?<alpha>[0-9A-F]{2})?/
    :
 93 |         guard let color = try? colorSearch.firstMatch(in: trimmedString),
 94 |               let red256 = Int(color.red, radix: 16),
 95 |               let green256 = Int(color.green, radix: 16),
    |                                  |- error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
    |                                  `- note: add 'if #available' version check
 96 |               let blue256 = Int(color.blue, radix: 16) else {
 97 |             print("OpenImmersive could not parse the color: \(colorString). Accepted formats: #RRGGBB or #RRGGBBAA")
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift:96:33: error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
 10 |
 11 | /// Fetches custom values in the application's openimmersive.plist
 12 | public final class Config: Sendable {
    |                    `- note: add '@available' attribute to enclosing class
 13 |     /// URL scheme to substitute to http/https for loading HLS playlists (String): this is needed for selecting bandwidth or audio.
 14 |     public let customHttpUrlScheme: String
    :
 87 |     ///   - colorString: text to be parsed, expected to be a hex color literal in the #RRGGBB or #RRGGBBAA format.
 88 |     /// - Returns: the corresponding Color, if the string is well formatted, otherwise nil.
 89 |     private static func color(from colorString: String) -> Color? {
    |                         `- note: add '@available' attribute to enclosing static method
 90 |         let trimmedString = colorString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()
 91 |         let colorSearch = /#(?<red>[0-9A-F]{2})(?<green>[0-9A-F]{2})(?<blue>[0-9A-F]{2})(?<alpha>[0-9A-F]{2})?/
    :
 94 |               let red256 = Int(color.red, radix: 16),
 95 |               let green256 = Int(color.green, radix: 16),
 96 |               let blue256 = Int(color.blue, radix: 16) else {
    |                                 |- error: 'subscript(dynamicMember:)' is only available in macOS 13.0 or newer
    |                                 `- note: add 'if #available' version check
 97 |             print("OpenImmersive could not parse the color: \(colorString). Accepted formats: #RRGGBB or #RRGGBBAA")
 98 |             return nil
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Utils/Closures.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile Closures.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Utils/Config.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile Config.swift
SwiftCompile normal arm64 Compiling\ AudioOption.swift,\ BitrateRung.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/AudioOption.swift /Users/admin/builder/spi-builder-workspace/Sources/Models/BitrateRung.swift (in target 'OpenImmersive' from project 'OpenImmersive')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Models/AudioOption.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile AudioOption.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Models/BitrateRung.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile BitrateRung.swift
SwiftCompile normal arm64 Compiling\ PlaylistLoaderDelegate.swift,\ PlaylistReader.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistLoaderDelegate.swift /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistReader.swift (in target 'OpenImmersive' from project 'OpenImmersive')
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistLoaderDelegate.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile PlaylistLoaderDelegate.swift
SwiftCompile normal arm64 /Users/admin/builder/spi-builder-workspace/Sources/Utils/PlaylistReader.swift (in target 'OpenImmersive' from project 'OpenImmersive')
    cd /Users/admin/builder/spi-builder-workspace/.swiftpm/xcode
    builtin-SwiftPerFileCompile PlaylistReader.swift
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/SDKExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/ExplicitPrecompiledModules
PruneExplicitPrecompiledModules /Users/admin/builder/spi-builder-workspace/.derivedData/Build/Intermediates.noindex/SwiftExplicitPrecompiledModules
2026-10-09 02:38:11.970 xcodebuild[781:4601] [MT] IDERunDestination: Supported platforms for the buildables in the current scheme is empty.
--- xcodebuild: WARNING: Using the first of multiple matching destinations:
{ platform:macOS, arch:arm64, id:75a884be00d72de9fc04ac7fdc2b299e9b4e4ea9, name:My Mac }
{ platform:macOS, arch:arm64, variant:Mac Catalyst, id:75a884be00d72de9fc04ac7fdc2b299e9b4e4ea9, name:My Mac }
{ platform:macOS, arch:arm64, variant:DriverKit, id:75a884be00d72de9fc04ac7fdc2b299e9b4e4ea9, name:My Mac }
{ platform:macOS, arch:arm64, variant:Designed for [iPad,iPhone], id:75a884be00d72de9fc04ac7fdc2b299e9b4e4ea9, name:My Mac }
** BUILD FAILED **
The following build commands failed:
	SwiftEmitModule normal arm64 Emitting\ module\ for\ OpenImmersive (in target 'OpenImmersive' from project 'OpenImmersive')
	SwiftCompile normal arm64 (in target 'OpenImmersive' from project 'OpenImmersive')
	Building workspace OpenImmersive with scheme OpenImmersive
(3 failures)
BUILD FAILURE 6.4 macosXcodebuild