The Swift Package Index logo.Swift Package Index

Track the adoption of Swift 6 strict concurrency checks for data race safety. How many packages are Ready for Swift 6?

Build Information

Successful build of KSPlayer, reference main (9613f7), with Swift 6.0 for macOS (SPM) on 26 Apr 2025 11:31:25 UTC.

Swift 6 data race errors: 0

Build Command

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

Build Log

103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[81/91] Compiling KSPlayer AudioUnitPlayer.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:88:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 86 |         renderSource?.setAudio(time: time, position: -1)
 87 |         renderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in
 88 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 89 |                 return
 90 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:94:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 92 |         }
 93 |         periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in
 94 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 95 |                 return
 96 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:178:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
175 | }
176 |
177 | public struct Timebase {
    |               `- note: consider making struct 'Timebase' conform to the 'Sendable' protocol
178 |     static let defaultValue = Timebase(num: 1, den: 1)
    |                |- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
179 |     public let num: Int32
180 |     public let den: Int32
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:95:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 93 |                                 }
 94 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_RPU_BUFFER {
 95 |                                 let data = sideData.data.withMemoryRebound(to: [UInt8].self, capacity: 1) { $0 }
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:98:37: warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
    |                                     `- warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:99:37: warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
    |                                     `- warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
100 |                                 let color = av_dovi_get_color(data)
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:100:37: warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
    |                                     `- warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:103:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[82/91] Compiling KSPlayer CircularBuffer.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:88:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 86 |         renderSource?.setAudio(time: time, position: -1)
 87 |         renderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in
 88 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 89 |                 return
 90 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:94:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 92 |         }
 93 |         periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in
 94 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 95 |                 return
 96 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:178:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
175 | }
176 |
177 | public struct Timebase {
    |               `- note: consider making struct 'Timebase' conform to the 'Sendable' protocol
178 |     static let defaultValue = Timebase(num: 1, den: 1)
    |                |- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
179 |     public let num: Int32
180 |     public let den: Int32
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:95:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 93 |                                 }
 94 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_RPU_BUFFER {
 95 |                                 let data = sideData.data.withMemoryRebound(to: [UInt8].self, capacity: 1) { $0 }
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:98:37: warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
    |                                     `- warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:99:37: warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
    |                                     `- warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
100 |                                 let color = av_dovi_get_color(data)
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:100:37: warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
    |                                     `- warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:103:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[83/91] Compiling KSPlayer EmbedDataSouce.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:88:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 86 |         renderSource?.setAudio(time: time, position: -1)
 87 |         renderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in
 88 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 89 |                 return
 90 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:94:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 92 |         }
 93 |         periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in
 94 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 95 |                 return
 96 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:178:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
175 | }
176 |
177 | public struct Timebase {
    |               `- note: consider making struct 'Timebase' conform to the 'Sendable' protocol
178 |     static let defaultValue = Timebase(num: 1, den: 1)
    |                |- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
179 |     public let num: Int32
180 |     public let den: Int32
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:95:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 93 |                                 }
 94 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_RPU_BUFFER {
 95 |                                 let data = sideData.data.withMemoryRebound(to: [UInt8].self, capacity: 1) { $0 }
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:98:37: warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
    |                                     `- warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:99:37: warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
    |                                     `- warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
100 |                                 let color = av_dovi_get_color(data)
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:100:37: warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
    |                                     `- warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:103:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[84/91] Compiling KSPlayer FFmpegAssetTrack.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:88:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 86 |         renderSource?.setAudio(time: time, position: -1)
 87 |         renderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in
 88 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 89 |                 return
 90 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:94:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 92 |         }
 93 |         periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in
 94 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 95 |                 return
 96 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:178:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
175 | }
176 |
177 | public struct Timebase {
    |               `- note: consider making struct 'Timebase' conform to the 'Sendable' protocol
178 |     static let defaultValue = Timebase(num: 1, den: 1)
    |                |- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
179 |     public let num: Int32
180 |     public let den: Int32
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:95:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 93 |                                 }
 94 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_RPU_BUFFER {
 95 |                                 let data = sideData.data.withMemoryRebound(to: [UInt8].self, capacity: 1) { $0 }
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:98:37: warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
    |                                     `- warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:99:37: warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
    |                                     `- warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
100 |                                 let color = av_dovi_get_color(data)
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:100:37: warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
    |                                     `- warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:103:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[85/91] Compiling KSPlayer FFmpegDecode.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:88:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 86 |         renderSource?.setAudio(time: time, position: -1)
 87 |         renderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in
 88 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 89 |                 return
 90 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioRendererPlayer.swift:94:23: warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
  9 | import Foundation
 10 |
 11 | public class AudioRendererPlayer: AudioOutput {
    |              `- note: class 'AudioRendererPlayer' does not conform to the 'Sendable' protocol
 12 |     public var playbackRate: Float = 1 {
 13 |         didSet {
    :
 92 |         }
 93 |         periodicTimeObserver = synchronizer.addPeriodicTimeObserver(forInterval: CMTime(seconds: 0.01), queue: .main) { [weak self] time in
 94 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'AudioRendererPlayer?' in a `@Sendable` closure
 95 |                 return
 96 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:178:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
175 | }
176 |
177 | public struct Timebase {
    |               `- note: consider making struct 'Timebase' conform to the 'Sendable' protocol
178 |     static let defaultValue = Timebase(num: 1, den: 1)
    |                |- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'Timebase' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
179 |     public let num: Int32
180 |     public let den: Int32
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:95:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 93 |                                 }
 94 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_RPU_BUFFER {
 95 |                                 let data = sideData.data.withMemoryRebound(to: [UInt8].self, capacity: 1) { $0 }
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:98:37: warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 96 |                             } else if sideData.type == AV_FRAME_DATA_DOVI_METADATA { // AVDOVIMetadata
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
    |                                     `- warning: initialization of immutable value 'header' was never used; consider replacing with assignment to '_' or removing it
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:99:37: warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
 97 |                                 let data = sideData.data.withMemoryRebound(to: AVDOVIMetadata.self, capacity: 1) { $0 }
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
    |                                     `- warning: initialization of immutable value 'mapping' was never used; consider replacing with assignment to '_' or removing it
100 |                                 let color = av_dovi_get_color(data)
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:100:37: warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
 98 |                                 let header = av_dovi_get_header(data)
 99 |                                 let mapping = av_dovi_get_mapping(data)
100 |                                 let color = av_dovi_get_color(data)
    |                                     `- warning: initialization of immutable value 'color' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:103:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
101 | //                                frame.corePixelBuffer?.transferFunction = kCVImageBufferTransferFunction_ITU_R_2020
102 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_PLUS { // AVDynamicHDRPlus
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/FFmpegDecode.swift:105:37: warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
103 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRPlus.self, capacity: 1) { $0 }.pointee
104 |                             } else if sideData.type == AV_FRAME_DATA_DYNAMIC_HDR_VIVID { // AVDynamicHDRVivid
105 |                                 let data = sideData.data.withMemoryRebound(to: AVDynamicHDRVivid.self, capacity: 1) { $0 }.pointee
    |                                     `- warning: initialization of immutable value 'data' was never used; consider replacing with assignment to '_' or removing it
106 |                             } else if sideData.type == AV_FRAME_DATA_MASTERING_DISPLAY_METADATA {
107 |                                 let data = sideData.data.withMemoryRebound(to: AVMasteringDisplayMetadata.self, capacity: 1) { $0 }.pointee
[86/91] Compiling KSPlayer UXKit.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
[87/91] Compiling KSPlayer Utility.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
[88/91] Compiling KSPlayer AVFFmpegExtension.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
[89/91] Compiling KSPlayer AVFoundationExtension.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
[90/91] Compiling KSPlayer AudioEnginePlayer.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
[91/91] Compiling KSPlayer AudioGraphPlayer.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:197:16: warning: unknown operating system for build configuration 'os'
195 |         let videoTrackM = compositionM.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
196 |         let cutRange = CMTimeRange(start: beginTime, end: endTime)
197 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
198 |         if let assetAudioTrack = try await loadTracks(withMediaType: .audio).first {
199 |             try audioTrackM?.insertTimeRange(cutRange, of: assetAudioTrack, at: .zero)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:531:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
529 | }
530 |
531 | extension TextAlignment: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
532 |     public typealias RawValue = String
533 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:557:1: warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
555 | }
556 |
557 | extension TextAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'TextAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
558 |     public var id: Self { self }
559 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:561:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
559 | }
560 |
561 | extension HorizontalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
562 |     public typealias RawValue = String
563 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:589:1: warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
587 | }
588 |
589 | extension HorizontalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'HorizontalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
590 |     public var id: Self { self }
591 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:593:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
591 | }
592 |
593 | extension VerticalAlignment: Hashable, RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocols 'Hashable', 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
594 |     public typealias RawValue = String
595 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:621:1: warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
619 | }
620 |
621 | extension VerticalAlignment: Identifiable {
    | |- warning: extension declares a conformance of imported type 'VerticalAlignment' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
622 |     public var id: Self { self }
623 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:625:1: warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
623 | }
624 |
625 | extension Color: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Color' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'SwiftUICore' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
626 |     public typealias RawValue = String
627 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:655:1: warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
653 | }
654 |
655 | extension Array: RawRepresentable where Element: Codable {
    | |- warning: extension declares a conformance of imported type 'Array' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
656 |     public init?(rawValue: String) {
657 |         guard let data = rawValue.data(using: .utf8),
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:673:1: warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
671 | }
672 |
673 | extension Date: RawRepresentable {
    | |- warning: extension declares a conformance of imported type 'Date' to imported protocol 'RawRepresentable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
674 |     public typealias RawValue = String
675 |     public init?(rawValue: RawValue) {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:757:1: warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
755 | }
756 |
757 | extension URL: Identifiable {
    | |- warning: extension declares a conformance of imported type 'URL' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Foundation' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
758 |     public var id: Self { self }
759 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:761:1: warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
759 | }
760 |
761 | extension String: Identifiable {
    | |- warning: extension declares a conformance of imported type 'String' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
762 |     public var id: Self { self }
763 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:765:1: warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
763 | }
764 |
765 | extension Float: Identifiable {
    | |- warning: extension declares a conformance of imported type 'Float' to imported protocol 'Identifiable'; this will not behave correctly if the owners of 'Swift' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
766 |     public var id: Self { self }
767 | }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:171:17: warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
 41 | }
 42 |
 43 | class GIFCreator {
    |       `- note: class 'GIFCreator' does not conform to the 'Sendable' protocol
 44 |     private let destination: CGImageDestination
 45 |     private let frameProperties: CFDictionary
    :
169 |                 guard let imageRef else { return }
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
    |                 `- warning: capture of 'gifCreator' with non-sendable type 'GIFCreator' in a `@Sendable` closure
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:17: warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                 |- warning: capture of 'progress' with non-sendable type '(Double) -> Void' in a `@Sendable` closure
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:175:21: warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
    |                     |- warning: capture of 'completion' with non-sendable type '((any Error)?) -> Void' in a `@Sendable` closure
    |                     `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
176 |                 } else {
177 |                     let error = NSError(domain: AVFoundationErrorDomain, code: -1, userInfo: [NSLocalizedDescriptionKey: "Generate Gif Failed!"])
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:170:17: warning: mutation of captured var 'i' in concurrently-executing code
168 |             case .succeeded:
169 |                 guard let imageRef else { return }
170 |                 i += 1
    |                 `- warning: mutation of captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:172:33: warning: reference to captured var 'i' in concurrently-executing code
170 |                 i += 1
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
    |                                 `- warning: reference to captured var 'i' in concurrently-executing code
173 |                 guard i == count else { return }
174 |                 if gifCreator.finalize() {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:173:23: warning: reference to captured var 'i' in concurrently-executing code
171 |                 gifCreator.add(image: imageRef)
172 |                 progress(Double(i) / Double(count))
173 |                 guard i == count else { return }
    |                       `- warning: reference to captured var 'i' in concurrently-executing code
174 |                 if gifCreator.finalize() {
175 |                     completion(nil)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:269:30: warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
267 |             DispatchQueue.main.async { [weak self] in
268 |                 guard let self else { return }
269 |                 self.image = image
    |                              `- warning: capture of 'image' with non-sendable type 'UIImage?' (aka 'Optional<NSImage>') in a `@Sendable` closure
270 |             }
271 |         }
Swift.Optional:1:21: note: generic enum 'Optional' does not conform to the 'Sendable' protocol
1 | @frozen public enum Optional<Wrapped> : ~Copyable where Wrapped : ~Copyable {
  |                     `- note: generic enum 'Optional' does not conform to the 'Sendable' protocol
2 |     case none
3 |     case some(Wrapped)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:360:39: warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
353 | @preconcurrency
354 | // @MainActor
355 | public func runOnMainThread(block: @escaping () -> Void) {
    |                             `- note: parameter 'block' is implicitly non-sendable
356 |     if Thread.isMainThread {
357 |         block()
358 |     } else {
359 |         Task {
360 |             await MainActor.run(body: block)
    |                                       `- warning: passing non-sendable parameter 'block' to function expecting a @Sendable closure
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:424:13: warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
422 |             }
423 |             // 下载的临时文件要马上就用。不然可能会马上被清空
424 |             completion(response.suggestedFilename ?? url.lastPathComponent, url)
    |             |- warning: capture of 'completion' with non-sendable type '(String, URL) -> Void' in a `@Sendable` closure
    |             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
425 |         }
426 |         task.resume()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:385:1: warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
383 | }
384 |
385 | extension AVBufferSrcParameters: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVBufferSrcParameters' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavfilter' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
386 |     public static func == (lhs: AVBufferSrcParameters, rhs: AVBufferSrcParameters) -> Bool {
387 |         lhs.format == rhs.format && lhs.width == rhs.width && lhs.height == rhs.height && lhs.sample_aspect_ratio == rhs.sample_aspect_ratio && lhs.sample_rate == rhs.sample_rate && lhs.ch_layout == rhs.ch_layout
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:400:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
398 | }
399 |
400 | extension AVChannelLayout: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
401 |     public static func == (lhs: AVChannelLayout, rhs: AVChannelLayout) -> Bool {
402 |         var lhs = lhs
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:408:1: warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
406 | }
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AVChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
410 |     var layoutTag: AudioChannelLayoutTag? {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:409:16: warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                `- warning: static property 'defaultValue' is not concurrency-safe because non-'Sendable' type 'AVChannelLayout' may have shared mutable state; this is an error in the Swift 6 language mode
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
Libavutil.AVChannelLayout:1:15: note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 1 | public struct AVChannelLayout {
   |               `- note: struct 'AVChannelLayout' does not conform to the 'Sendable' protocol
 2 |     public init()
 3 |     public init(order: AVChannelOrder, nb_channels: Int32, u: AVChannelLayout.__Unnamed_union_u, opaque: UnsafeMutableRawPointer!)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:2:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  1 | import CoreMedia
  2 | import FFmpegKit
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Libavutil'
  3 | import Libavcodec
  4 | import Libavfilter
    :
407 |
408 | extension AVChannelLayout: CustomStringConvertible {
409 |     static let defaultValue = AVChannelLayout(order: AV_CHANNEL_ORDER_NATIVE, nb_channels: 2, u: AVChannelLayout.__Unnamed_union_u(mask: swift_AV_CH_LAYOUT_STEREO), opaque: nil)
    |                |- note: annotate 'defaultValue' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
410 |     var layoutTag: AudioChannelLayoutTag? {
411 |         KSLog("[audio] FFmepg AVChannelLayout: \(self) order: \(order) mask: \(u.mask)")
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFFmpegExtension.swift:431:1: warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
429 | }
430 |
431 | extension AVRational: Equatable {
    | |- warning: extension declares a conformance of imported type 'AVRational' to imported protocol 'Equatable'; this will not behave correctly if the owners of 'Libavutil' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
432 |     public static func == (lhs: AVRational, rhs: AVRational) -> Bool {
433 |         lhs.num == rhs.num && rhs.den == rhs.den
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AVFoundationExtension.swift:108:1: warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
106 | }
107 |
108 | extension AudioChannelLayout: CustomStringConvertible {
    | |- warning: extension declares a conformance of imported type 'AudioChannelLayout' to imported protocol 'CustomStringConvertible'; this will not behave correctly if the owners of 'CoreAudioTypes' introduce this conformance in the future
    | `- note: add '@retroactive' to silence this warning
109 |     public var description: String {
110 |         "AudioChannelLayoutTag: \(mChannelLayoutTag), mNumberChannelDescriptions: \(mNumberChannelDescriptions)"
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
101 | }
102 |
103 | public class AudioEnginePlayer: AudioOutput {
    |              `- note: class 'AudioEnginePlayer' does not conform to the 'Sendable' protocol
104 |     public let engine = AVAudioEngine()
105 |     private var sourceNode: AVAudioSourceNode?
    :
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 `- warning: capture of 'self' with non-sendable type 'AudioEnginePlayer?' in a `@Sendable` closure
204 |             }
205 |         }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:227:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
225 |     func exportMp4(beginTime: TimeInterval, endTime: TimeInterval, outputURL: URL, progress: @escaping (Double) -> Void, completion: @escaping (Result<URL, Error>) -> Void) throws {
226 |         try FileManager.default.removeItem(at: outputURL)
227 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
228 |             guard let exportSession = try await createExportSession(beginTime: beginTime, endTime: endTime) else { return }
    |                                                 `- note: closure captures 'self' which is accessible to code in the current task
229 |             exportSession.outputURL = outputURL
230 |             await exportSession.export()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Core/Utility.swift:359:14: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
357 |         block()
358 |     } else {
359 |         Task {
    |              `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
360 |             await MainActor.run(body: block)
    |                                       `- note: closure captures 'block' which is accessible to code in the current task
361 |         }
362 |     }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/AudioEnginePlayer.swift:203:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
201 |             // 从多声道切换到2声道马上调用start会不生效。需要异步主线程才可以
202 |             DispatchQueue.main.async { [weak self] in
203 |                 self?.play()
    |                 |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |                 `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
204 |             }
205 |         }
Build complete! (89.21s)
Fetching https://github.com/kingslay/FFmpegKit.git
[1/8612] Fetching ffmpegkit
Fetched https://github.com/kingslay/FFmpegKit.git from cache (67.12s)
Computing version for https://github.com/kingslay/FFmpegKit.git
Computed https://github.com/kingslay/FFmpegKit.git at 6.1.3 (0.73s)
Creating working copy for https://github.com/kingslay/FFmpegKit.git
Working copy of https://github.com/kingslay/FFmpegKit.git resolved at 6.1.3
warning: failed to retrieve search paths with pkg-config; maybe pkg-config is not installed
warning: you may be able to install sdl2 using your system-packager:
    brew install sdl2
Build complete.
{
  "default_localization" : "en",
  "dependencies" : [
    {
      "identity" : "ffmpegkit",
      "requirement" : {
        "range" : [
          {
            "lower_bound" : "6.1.3",
            "upper_bound" : "7.0.0"
          }
        ]
      },
      "type" : "sourceControl",
      "url" : "https://github.com/kingslay/FFmpegKit.git"
    }
  ],
  "manifest_display_name" : "KSPlayer",
  "name" : "KSPlayer",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "10.15"
    },
    {
      "name" : "maccatalyst",
      "version" : "13.0"
    },
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "tvos",
      "version" : "13.0"
    },
    {
      "name" : "visionos",
      "version" : "1.0"
    }
  ],
  "products" : [
    {
      "name" : "KSPlayer",
      "targets" : [
        "KSPlayer"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "KSPlayerTests",
      "module_type" : "SwiftTarget",
      "name" : "KSPlayerTests",
      "path" : "Tests/KSPlayerTests",
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Tests/KSPlayerTests/Resources/test.m3u",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "AudioTest.swift",
        "KSAVPlayerTest.swift",
        "KSMEPlayerTest.swift",
        "KSPlayerLayerTest.swift",
        "M3UParseTest.swift",
        "SubtitleTest.swift",
        "VideoPlayerControllerTest.swift",
        "VideoPlayerViewTest.swift"
      ],
      "target_dependencies" : [
        "KSPlayer"
      ],
      "type" : "test"
    },
    {
      "c99name" : "KSPlayer",
      "module_type" : "SwiftTarget",
      "name" : "KSPlayer",
      "path" : "Sources/KSPlayer",
      "product_dependencies" : [
        "FFmpegKit"
      ],
      "product_memberships" : [
        "KSPlayer"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/Shaders.metal",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "AVPlayer/KSAVPlayer.swift",
        "AVPlayer/KSOptions.swift",
        "AVPlayer/KSPictureInPictureController.swift",
        "AVPlayer/KSPlayerLayer.swift",
        "AVPlayer/KSVideoPlayer.swift",
        "AVPlayer/MediaPlayerProtocol.swift",
        "AVPlayer/PlayerDefines.swift",
        "Audio/AudioPlayerView.swift",
        "Core/AppKitExtend.swift",
        "Core/PlayerToolBar.swift",
        "Core/PlayerView.swift",
        "Core/UIKitExtend.swift",
        "Core/UXKit.swift",
        "Core/Utility.swift",
        "MEPlayer/AVFFmpegExtension.swift",
        "MEPlayer/AVFoundationExtension.swift",
        "MEPlayer/AudioEnginePlayer.swift",
        "MEPlayer/AudioGraphPlayer.swift",
        "MEPlayer/AudioRendererPlayer.swift",
        "MEPlayer/AudioUnitPlayer.swift",
        "MEPlayer/CircularBuffer.swift",
        "MEPlayer/EmbedDataSouce.swift",
        "MEPlayer/FFmpegAssetTrack.swift",
        "MEPlayer/FFmpegDecode.swift",
        "MEPlayer/Filter.swift",
        "MEPlayer/KSMEPlayer.swift",
        "MEPlayer/MEPlayerItem.swift",
        "MEPlayer/MEPlayerItemTrack.swift",
        "MEPlayer/MetalPlayView.swift",
        "MEPlayer/Model.swift",
        "MEPlayer/Resample.swift",
        "MEPlayer/SubtitleDecode.swift",
        "MEPlayer/ThumbnailController.swift",
        "MEPlayer/VideoToolboxDecode.swift",
        "Metal/DisplayModel.swift",
        "Metal/MetalRender.swift",
        "Metal/MotionSensor.swift",
        "Metal/PixelBufferProtocol.swift",
        "Metal/Transforms.swift",
        "Subtitle/AudioRecognize.swift",
        "Subtitle/KSParseProtocol.swift",
        "Subtitle/KSSubtitle.swift",
        "Subtitle/SubtitleDataSouce.swift",
        "SwiftUI/AirPlayView.swift",
        "SwiftUI/KSVideoPlayerView.swift",
        "SwiftUI/KSVideoPlayerViewBuilder.swift",
        "SwiftUI/LiveTextImage.swift",
        "SwiftUI/Slider.swift",
        "Video/BrightnessVolume.swift",
        "Video/IOSVideoPlayerView.swift",
        "Video/KSMenu.swift",
        "Video/KSPlayerItem.swift",
        "Video/MacVideoPlayerView.swift",
        "Video/PlayerFullScreenViewController.swift",
        "Video/PlayerTransitionAnimator.swift",
        "Video/SeekView.swift",
        "Video/VideoPlayerView.swift"
      ],
      "target_dependencies" : [
        "DisplayCriteria"
      ],
      "type" : "library"
    },
    {
      "c99name" : "DisplayCriteria",
      "module_type" : "ClangTarget",
      "name" : "DisplayCriteria",
      "path" : "Sources/DisplayCriteria",
      "product_memberships" : [
        "KSPlayer"
      ],
      "sources" : [
        "DisplayCriteria.m"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.9"
}
Done.