The Swift Package Index logo.Swift Package Index

Has it really been five years since Swift Package Index launched? Read our anniversary blog post!

Build Information

Successful build of KSPlayer, reference main (ca6b60), with Swift 6.0 for macOS (SPM) on 23 Jun 2025 02:50:12 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

Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:36:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 34 |     private lazy var colorConversion601VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.videoRange.buffer
 35 |
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:38:77: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
    |                                                                             `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:40:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 41 |
 42 |     private lazy var colorConversionSMPTE240MVideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_SMPTE_240M_1995.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:24: 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
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await 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
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
    |                 `- note: closure captures 'self' which is accessible to code in the current task
 34 |         }.value
 35 |     }
[84/91] Compiling KSPlayer DisplayModel.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Resample.swift:175:25: warning: variable 'source' was never mutated; consider changing to 'let' constant
173 |                     let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(pbuf, i)
174 |                     var contents = pbuf.baseAddressOfPlane(at: i)
175 |                     var source = data[i]!
    |                         `- warning: variable 'source' was never mutated; consider changing to 'let' constant
176 |                     if bufferPlaneCount < planeCount, i + 2 == planeCount {
177 |                         var sourceU = data[i]!
/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/Model.swift:85:16: warning: static property 'audioPlayerType' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 83 |     static var stackSize = 65536
 84 |     static var isClearVideoWhereReplace = true
 85 |     static var audioPlayerType: AudioOutput.Type = AudioEnginePlayer.self
    |                |- warning: static property 'audioPlayerType' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'audioPlayerType' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'audioPlayerType' 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
 86 |     static var videoPlayerType: (VideoOutput & UIView).Type = MetalPlayView.self
 87 |     static var yadifMode = 1
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:19: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await Task {
    |                   `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:19: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await Task {
    |                   `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:34:11: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 32 |         try await Task {
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
    |           `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 35 |     }
 36 |
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:72:13: warning: variable 'codecContext' was never mutated; consider changing to 'let' constant
 70 |             throw NSError(description: "Avg frame rate = 0, ignore")
 71 |         }
 72 |         var codecContext = try videoStream.pointee.codecpar.pointee.createContext(options: nil)
    |             `- warning: variable 'codecContext' was never mutated; consider changing to 'let' constant
 73 |         defer {
 74 |             avcodec_close(codecContext)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:51:27: warning: capture of 'self' with non-sendable type 'VideoToolboxDecode?' in a `@Sendable` closure
 11 | import VideoToolbox
 12 |
 13 | class VideoToolboxDecode: DecodeProtocol {
    |       `- note: class 'VideoToolboxDecode' does not conform to the 'Sendable' protocol
 14 |     private var session: DecompressionSession {
 15 |         didSet {
    :
 49 |             let size = corePacket.size
 50 |             let status = VTDecompressionSessionDecodeFrame(session.decompressionSession, sampleBuffer: sampleBuffer, flags: flags, infoFlagsOut: &flagOut) { [weak self] status, infoFlags, imageBuffer, _, _ in
 51 |                 guard let self, !infoFlags.contains(.frameDropped) else {
    |                           `- warning: capture of 'self' with non-sendable type 'VideoToolboxDecode?' in a `@Sendable` closure
 52 |                     return
 53 |                 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:56:28: warning: capture of 'packet' with non-sendable type 'Packet' in a `@Sendable` closure
 54 |                 guard status == noErr else {
 55 |                     if status == kVTInvalidSessionErr || status == kVTVideoDecoderMalfunctionErr || status == kVTVideoDecoderBadDataErr {
 56 |                         if packet.isKeyFrame {
    |                            `- warning: capture of 'packet' with non-sendable type 'Packet' in a `@Sendable` closure
 57 |                             completionHandler(.failure(NSError(errorCode: .codecVideoReceiveFrame, avErrorCode: status)))
 58 |                         } else {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:195:13: note: class 'Packet' does not conform to the 'Sendable' protocol
193 | }
194 |
195 | final class Packet: ObjectQueueItem {
    |             `- note: class 'Packet' does not conform to the 'Sendable' protocol
196 |     var duration: Int64 = 0
197 |     var timestamp: Int64 = 0
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:57:29: warning: capture of 'completionHandler' with non-sendable type '(Result<any MEFrame, any Error>) -> Void' in a `@Sendable` closure
 55 |                     if status == kVTInvalidSessionErr || status == kVTVideoDecoderMalfunctionErr || status == kVTVideoDecoderBadDataErr {
 56 |                         if packet.isKeyFrame {
 57 |                             completionHandler(.failure(NSError(errorCode: .codecVideoReceiveFrame, avErrorCode: status)))
    |                             |- warning: capture of 'completionHandler' with non-sendable type '(Result<any MEFrame, any Error>) -> Void' in a `@Sendable` closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
 58 |                         } else {
 59 |                             // 解决从后台切换到前台,解码失败的问题
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:15:16: warning: static property 'device' is not concurrency-safe because non-'Sendable' type 'any MTLDevice' may have shared mutable state; this is an error in the Swift 6 language mode
 13 |
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
    |                `- warning: static property 'device' is not concurrency-safe because non-'Sendable' type 'any MTLDevice' may have shared mutable state; this is an error in the Swift 6 language mode
 16 |     static let library: MTLLibrary = {
 17 |         var library: MTLLibrary!
Metal.MTLDevice:2:17: note: protocol 'MTLDevice' does not conform to the 'Sendable' protocol
  1 | @available(macOS 10.11, *)
  2 | public protocol MTLDevice : NSObjectProtocol {
    |                 `- note: protocol 'MTLDevice' does not conform to the 'Sendable' protocol
  3 |     var name: String { get }
  4 |     @available(macOS 10.13, *)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Metal'
  8 | import CoreVideo
  9 | import Foundation
 10 | import Metal
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Metal'
 11 | import QuartzCore
 12 | import simd
 13 |
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
    |                |- note: annotate 'device' 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
 16 |     static let library: MTLLibrary = {
 17 |         var library: MTLLibrary!
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:16:16: warning: static property 'library' is not concurrency-safe because non-'Sendable' type 'any MTLLibrary' may have shared mutable state; this is an error in the Swift 6 language mode
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
 16 |     static let library: MTLLibrary = {
    |                |- warning: static property 'library' is not concurrency-safe because non-'Sendable' type 'any MTLLibrary' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'library' 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
 17 |         var library: MTLLibrary!
 18 |         library = device.makeDefaultLibrary()
Metal.MTLLibrary:2:17: note: protocol 'MTLLibrary' does not conform to the 'Sendable' protocol
 1 | @available(macOS 10.11, *)
 2 | public protocol MTLLibrary : NSObjectProtocol {
   |                 `- note: protocol 'MTLLibrary' does not conform to the 'Sendable' protocol
 3 |     var label: String? { get set }
 4 |     var device: any MTLDevice { get }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:34:77: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 32 |     }()
 33 |
 34 |     private lazy var colorConversion601VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.videoRange.buffer
    |                                                                             `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 35 |
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:36:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 34 |     private lazy var colorConversion601VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.videoRange.buffer
 35 |
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:38:77: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
    |                                                                             `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:40:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 41 |
 42 |     private lazy var colorConversionSMPTE240MVideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_SMPTE_240M_1995.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:24: 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
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await 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
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
    |                 `- note: closure captures 'self' which is accessible to code in the current task
 34 |         }.value
 35 |     }
[85/91] Compiling KSPlayer MetalRender.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Resample.swift:175:25: warning: variable 'source' was never mutated; consider changing to 'let' constant
173 |                     let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(pbuf, i)
174 |                     var contents = pbuf.baseAddressOfPlane(at: i)
175 |                     var source = data[i]!
    |                         `- warning: variable 'source' was never mutated; consider changing to 'let' constant
176 |                     if bufferPlaneCount < planeCount, i + 2 == planeCount {
177 |                         var sourceU = data[i]!
/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/Model.swift:85:16: warning: static property 'audioPlayerType' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 83 |     static var stackSize = 65536
 84 |     static var isClearVideoWhereReplace = true
 85 |     static var audioPlayerType: AudioOutput.Type = AudioEnginePlayer.self
    |                |- warning: static property 'audioPlayerType' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'audioPlayerType' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'audioPlayerType' 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
 86 |     static var videoPlayerType: (VideoOutput & UIView).Type = MetalPlayView.self
 87 |     static var yadifMode = 1
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:19: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await Task {
    |                   `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:19: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await Task {
    |                   `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:34:11: warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 13 | import UIKit
 14 | #endif
 15 | public struct FFThumbnail {
    |               `- note: consider making struct 'FFThumbnail' conform to the 'Sendable' protocol
 16 |     public let image: UIImage
 17 |     public let time: TimeInterval
    :
 32 |         try await Task {
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
 34 |         }.value
    |           `- warning: type 'FFThumbnail' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 35 |     }
 36 |
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:72:13: warning: variable 'codecContext' was never mutated; consider changing to 'let' constant
 70 |             throw NSError(description: "Avg frame rate = 0, ignore")
 71 |         }
 72 |         var codecContext = try videoStream.pointee.codecpar.pointee.createContext(options: nil)
    |             `- warning: variable 'codecContext' was never mutated; consider changing to 'let' constant
 73 |         defer {
 74 |             avcodec_close(codecContext)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:51:27: warning: capture of 'self' with non-sendable type 'VideoToolboxDecode?' in a `@Sendable` closure
 11 | import VideoToolbox
 12 |
 13 | class VideoToolboxDecode: DecodeProtocol {
    |       `- note: class 'VideoToolboxDecode' does not conform to the 'Sendable' protocol
 14 |     private var session: DecompressionSession {
 15 |         didSet {
    :
 49 |             let size = corePacket.size
 50 |             let status = VTDecompressionSessionDecodeFrame(session.decompressionSession, sampleBuffer: sampleBuffer, flags: flags, infoFlagsOut: &flagOut) { [weak self] status, infoFlags, imageBuffer, _, _ in
 51 |                 guard let self, !infoFlags.contains(.frameDropped) else {
    |                           `- warning: capture of 'self' with non-sendable type 'VideoToolboxDecode?' in a `@Sendable` closure
 52 |                     return
 53 |                 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:56:28: warning: capture of 'packet' with non-sendable type 'Packet' in a `@Sendable` closure
 54 |                 guard status == noErr else {
 55 |                     if status == kVTInvalidSessionErr || status == kVTVideoDecoderMalfunctionErr || status == kVTVideoDecoderBadDataErr {
 56 |                         if packet.isKeyFrame {
    |                            `- warning: capture of 'packet' with non-sendable type 'Packet' in a `@Sendable` closure
 57 |                             completionHandler(.failure(NSError(errorCode: .codecVideoReceiveFrame, avErrorCode: status)))
 58 |                         } else {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/Model.swift:195:13: note: class 'Packet' does not conform to the 'Sendable' protocol
193 | }
194 |
195 | final class Packet: ObjectQueueItem {
    |             `- note: class 'Packet' does not conform to the 'Sendable' protocol
196 |     var duration: Int64 = 0
197 |     var timestamp: Int64 = 0
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/VideoToolboxDecode.swift:57:29: warning: capture of 'completionHandler' with non-sendable type '(Result<any MEFrame, any Error>) -> Void' in a `@Sendable` closure
 55 |                     if status == kVTInvalidSessionErr || status == kVTVideoDecoderMalfunctionErr || status == kVTVideoDecoderBadDataErr {
 56 |                         if packet.isKeyFrame {
 57 |                             completionHandler(.failure(NSError(errorCode: .codecVideoReceiveFrame, avErrorCode: status)))
    |                             |- warning: capture of 'completionHandler' with non-sendable type '(Result<any MEFrame, any Error>) -> Void' in a `@Sendable` closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
 58 |                         } else {
 59 |                             // 解决从后台切换到前台,解码失败的问题
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:15:16: warning: static property 'device' is not concurrency-safe because non-'Sendable' type 'any MTLDevice' may have shared mutable state; this is an error in the Swift 6 language mode
 13 |
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
    |                `- warning: static property 'device' is not concurrency-safe because non-'Sendable' type 'any MTLDevice' may have shared mutable state; this is an error in the Swift 6 language mode
 16 |     static let library: MTLLibrary = {
 17 |         var library: MTLLibrary!
Metal.MTLDevice:2:17: note: protocol 'MTLDevice' does not conform to the 'Sendable' protocol
  1 | @available(macOS 10.11, *)
  2 | public protocol MTLDevice : NSObjectProtocol {
    |                 `- note: protocol 'MTLDevice' does not conform to the 'Sendable' protocol
  3 |     var name: String { get }
  4 |     @available(macOS 10.13, *)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Metal'
  8 | import CoreVideo
  9 | import Foundation
 10 | import Metal
    | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'Metal'
 11 | import QuartzCore
 12 | import simd
 13 |
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
    |                |- note: annotate 'device' 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
 16 |     static let library: MTLLibrary = {
 17 |         var library: MTLLibrary!
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:16:16: warning: static property 'library' is not concurrency-safe because non-'Sendable' type 'any MTLLibrary' may have shared mutable state; this is an error in the Swift 6 language mode
 14 | class MetalRender {
 15 |     static let device = MTLCreateSystemDefaultDevice()!
 16 |     static let library: MTLLibrary = {
    |                |- warning: static property 'library' is not concurrency-safe because non-'Sendable' type 'any MTLLibrary' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'library' 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
 17 |         var library: MTLLibrary!
 18 |         library = device.makeDefaultLibrary()
Metal.MTLLibrary:2:17: note: protocol 'MTLLibrary' does not conform to the 'Sendable' protocol
 1 | @available(macOS 10.11, *)
 2 | public protocol MTLLibrary : NSObjectProtocol {
   |                 `- note: protocol 'MTLLibrary' does not conform to the 'Sendable' protocol
 3 |     var label: String? { get set }
 4 |     var device: any MTLDevice { get }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:34:77: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 32 |     }()
 33 |
 34 |     private lazy var colorConversion601VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.videoRange.buffer
    |                                                                             `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 35 |
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:36:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 34 |     private lazy var colorConversion601VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.videoRange.buffer
 35 |
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_601_4' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_601_4:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_601_4: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:38:77: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 36 |     private lazy var colorConversion601FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_601_4.pointee.buffer
 37 |
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
    |                                                                             `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Metal/MetalRender.swift:40:76: warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 38 |     private lazy var colorConversion709VideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.videoRange.buffer
 39 |
 40 |     private lazy var colorConversion709FullRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_ITU_R_709_2.pointee.buffer
    |                                                                            `- warning: reference to var 'kvImage_YpCbCrToARGBMatrix_ITU_R_709_2' is not concurrency-safe because it involves shared mutable state; this is an error in the Swift 6 language mode
 41 |
 42 |     private lazy var colorConversionSMPTE240MVideoRangeMatrixBuffer: MTLBuffer? = kvImage_YpCbCrToARGBMatrix_SMPTE_240M_1995.videoRange.buffer
Accelerate.kvImage_YpCbCrToARGBMatrix_ITU_R_709_2:2:12: note: var declared here
1 | @available(macOS 10.10, *)
2 | public var kvImage_YpCbCrToARGBMatrix_ITU_R_709_2: UnsafePointer<vImage_YpCbCrToARGBMatrix>!
  |            `- note: var declared here
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/MEPlayer/ThumbnailController.swift:32:24: 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
 30 |
 31 |     public func generateThumbnail(for url: URL, thumbWidth: Int32 = 240) async throws -> [FFThumbnail] {
 32 |         try await 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
 33 |             try getPeeks(for: url, thumbWidth: thumbWidth)
    |                 `- note: closure captures 'self' which is accessible to code in the current task
 34 |         }.value
 35 |     }
[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! (149.84s)
Fetching https://github.com/kingslay/FFmpegKit.git
[1/8612] Fetching ffmpegkit
Fetched https://github.com/kingslay/FFmpegKit.git from cache (127.54s)
Computing version for https://github.com/kingslay/FFmpegKit.git
Computed https://github.com/kingslay/FFmpegKit.git at 6.1.3 (0.71s)
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.