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.