The Swift Package Index logo.Swift Package Index

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

Build Information

Successful build of KSPlayer, reference main (101cce), with Swift 6.0 for macOS (SPM) on 13 Dec 2025 00:01:52 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

    |                         `- note: did you mean 'iOS'?
407 |                 Button {
408 |                     dismiss()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:421:28: warning: unknown operating system for build configuration 'os'
419 |                 if let audioTracks = config.playerLayer?.player.tracks(mediaType: .audio), !audioTracks.isEmpty {
420 |                     audioButton(audioTracks: audioTracks)
421 |                     #if os(xrOS)
    |                            |- warning: unknown operating system for build configuration 'os'
    |                            |- note: did you mean 'tvOS'?
    |                            `- note: did you mean 'iOS'?
422 |                         .aspectRatio(1, contentMode: .fit)
423 |                         .glassBackgroundEffect()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:427:25: warning: unknown operating system for build configuration 'os'
425 |                 }
426 |                 muteButton
427 |                 #if !os(xrOS)
    |                         |- warning: unknown operating system for build configuration 'os'
    |                         |- note: did you mean 'tvOS'?
    |                         `- note: did you mean 'iOS'?
428 |                 contentModeButton
429 |                 subtitleButton
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:433:21: warning: unknown operating system for build configuration 'os'
431 |             }
432 |             Spacer()
433 |             #if !os(xrOS)
    |                     |- warning: unknown operating system for build configuration 'os'
    |                     |- note: did you mean 'tvOS'?
    |                     `- note: did you mean 'iOS'?
434 |             KSVideoPlayerViewBuilder.playbackControlView(config: config)
435 |             Spacer()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:456:16: warning: unknown operating system for build configuration 'os'
454 |
455 |     private var muteButton: some View {
456 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
457 |         HStack {
458 |             Slider(value: $config.playbackVolume, in: 0 ... 1)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:491:20: warning: unknown operating system for build configuration 'os'
489 |         } label: {
490 |             Image(systemName: "waveform.circle.fill")
491 |             #if os(xrOS)
    |                    |- warning: unknown operating system for build configuration 'os'
    |                    |- note: did you mean 'tvOS'?
    |                    `- note: did you mean 'iOS'?
492 |                 .padding()
493 |                 .clipShape(Circle())
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:577:24: warning: unknown operating system for build configuration 'os'
575 |                 }
576 |                 .frame(maxHeight: 20)
577 |                 #if os(xrOS)
    |                        |- warning: unknown operating system for build configuration 'os'
    |                        |- note: did you mean 'tvOS'?
    |                        `- note: did you mean 'iOS'?
578 |                     .tint(.white.opacity(0.8))
579 |                 #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:709:63: warning: unknown operating system for build configuration 'os'
707 |             }
708 |         }
709 |         #if os(macOS) || targetEnvironment(macCatalyst) || os(xrOS)
    |                                                               |- warning: unknown operating system for build configuration 'os'
    |                                                               |- note: did you mean 'tvOS'?
    |                                                               `- note: did you mean 'iOS'?
710 |         .toolbar {
711 |             Button("Done") {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:16:20: warning: unknown operating system for build configuration 'os'
 14 |         HStack(spacing: spacing) {
 15 |             // Playback controls don't need spacers for visionOS, since the controls are laid out in a HStack.
 16 |             #if os(xrOS)
    |                    |- warning: unknown operating system for build configuration 'os'
    |                    |- note: did you mean 'tvOS'?
    |                    `- note: did you mean 'iOS'?
 17 |             backwardButton(config: config)
 18 |             playButton(config: config)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:111:16: warning: unknown operating system for build configuration 'os'
109 | private extension KSVideoPlayerViewBuilder {
110 |     static var playSystemName: String {
111 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
112 |         "play.fill"
113 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:119:16: warning: unknown operating system for build configuration 'os'
117 |
118 |     static var pauseSystemName: String {
119 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
120 |         "pause.fill"
121 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:127:16: warning: unknown operating system for build configuration 'os'
125 |
126 |     static var speakerSystemName: String {
127 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
128 |         "speaker.fill"
129 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:135:16: warning: unknown operating system for build configuration 'os'
133 |
134 |     static var speakerDisabledSystemName: String {
135 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
136 |         "speaker.slash.fill"
137 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:186:16: warning: unknown operating system for build configuration 'os'
184 |                 .font(.largeTitle)
185 |         }
186 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
187 |         .contentTransition(.symbolEffect(.replace))
188 |         #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:80:16: warning: static property 'subtitleDataSouces' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 78 |
 79 | public extension KSOptions {
 80 |     static var subtitleDataSouces: [SubtitleDataSouce] = [DirectorySubtitleDataSouce()]
    |                |- warning: static property 'subtitleDataSouces' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'subtitleDataSouces' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'subtitleDataSouces' 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
 81 | }
 82 |
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:84:23: warning: static property 'singleton' is not concurrency-safe because non-'Sendable' type 'PlistCacheSubtitleDataSouce' may have shared mutable state; this is an error in the Swift 6 language mode
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
    |                       |- warning: static property 'singleton' is not concurrency-safe because non-'Sendable' type 'PlistCacheSubtitleDataSouce' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: annotate 'singleton' 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
 85 |     public var infos = [any SubtitleInfo]()
 86 |     private let srtCacheInfoPath: String
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:97:23: warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
 85 |     public var infos = [any SubtitleInfo]()
    :
 95 |         srtInfoCaches = [String: [String]]()
 96 |         DispatchQueue.global().async { [weak self] in
 97 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 98 |                 return
 99 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:127:27: warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
 85 |     public var infos = [any SubtitleInfo]()
    :
125 |             srtInfoCaches[file] = array
126 |             DispatchQueue.global().async { [weak self] in
127 |                 guard let self else {
    |                           `- warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
128 |                     return
129 |                 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:218:25: warning: call to main actor-isolated instance method 'openURL' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
216 |                 providers.first?.loadDataRepresentation(forTypeIdentifier: "public.file-url") { data, _ in
217 |                     if let data, let path = NSString(data: data, encoding: 4), let url = URL(string: path as String) {
218 |                         openURL(url)
    |                         `- warning: call to main actor-isolated instance method 'openURL' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
219 |                     }
220 |                 }
    :
302 |     }
303 |
304 |     public func openURL(_ url: URL) {
    |                 `- note: calls to instance method 'openURL' from outside of its actor context are implicitly asynchronous
305 |         runOnMainThread {
306 |             if url.isSubtitle {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:289:23: warning: static property 'textPosition' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
287 |     public static var textBold = false
288 |     public static var textItalic = false
289 |     public static var textPosition = TextPosition()
    |                       |- warning: static property 'textPosition' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textPosition' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textPosition' 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
290 |     public static var audioRecognizes = [any AudioRecognize]()
291 |     private var subtitleDataSouces: [SubtitleDataSouce] = KSOptions.subtitleDataSouces
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:280:23: warning: static property 'textColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
278 |     }
279 |
280 |     public static var textColor: Color = .white
    |                       |- warning: static property 'textColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textColor' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textColor' 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
281 |     public static var textBackgroundColor: Color = .clear
282 |     public static var textFont: UIFont {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:288:23: warning: static property 'textItalic' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
286 |     public static var textFontSize = SubtitleModel.Size.standard.rawValue
287 |     public static var textBold = false
288 |     public static var textItalic = false
    |                       |- warning: static property 'textItalic' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textItalic' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textItalic' 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
289 |     public static var textPosition = TextPosition()
290 |     public static var audioRecognizes = [any AudioRecognize]()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:281:23: warning: static property 'textBackgroundColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
279 |
280 |     public static var textColor: Color = .white
281 |     public static var textBackgroundColor: Color = .clear
    |                       |- warning: static property 'textBackgroundColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textBackgroundColor' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textBackgroundColor' 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
282 |     public static var textFont: UIFont {
283 |         textBold ? .boldSystemFont(ofSize: textFontSize) : .systemFont(ofSize: textFontSize)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/LiveTextImage.swift:58:51: warning: non-sendable type 'ImageAnalysis' returned by implicitly asynchronous call to nonisolated function cannot cross actor boundary; this is an error in the Swift 6 language mode
56 |             do {
57 |                 let configuration = ImageAnalyzer.Configuration([.text])
58 |                 let analysis = try await analyzer.analyze(image, orientation: .up, configuration: configuration)
   |                                                   `- warning: non-sendable type 'ImageAnalysis' returned by implicitly asynchronous call to nonisolated function cannot cross actor boundary; this is an error in the Swift 6 language mode
59 |                 interaction.preferredInteractionTypes = .textSelection
60 |                 interaction.analysis = analysis
VisionKit.ImageAnalysis:2:20: note: class 'ImageAnalysis' does not conform to the 'Sendable' protocol
1 | @available(iOS 16.0, macOS 13.0, macCatalyst 17.0, *)
2 | final public class ImageAnalysis {
  |                    `- note: class 'ImageAnalysis' does not conform to the 'Sendable' protocol
3 |     final public var transcript: String { get }
4 |     final public func hasResults(for analysisTypes: ImageAnalyzer.AnalysisTypes) -> Bool
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/LiveTextImage.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'VisionKit'
 8 | import SwiftUI
 9 | #if canImport(VisionKit)
10 | import VisionKit
   | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'VisionKit'
11 |
12 | @available(iOS 16.0, macOS 13.0, macCatalyst 17.0, *)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:23:22: 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
 21 |         didSet {
 22 |             if isEnabled, parts.isEmpty {
 23 |                 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
 24 |                     try? await parse(url: downloadURL, userAgent: userAgent)
    |                                `- note: closure captures 'self' which is accessible to code in the current task
 25 |                 }
 26 |             }
[85/91] Compiling KSPlayer Slider.swift
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/AirPlayView.swift:11:9: warning: unknown operating system for build configuration 'os'
 9 | import SwiftUI
10 |
11 | #if !os(xrOS)
   |         |- warning: unknown operating system for build configuration 'os'
   |         |- note: did you mean 'tvOS'?
   |         `- note: did you mean 'iOS'?
12 | public struct AirPlayView: UIViewRepresentable {
13 |     public init() {}
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:143:27: warning: unknown operating system for build configuration 'os'
141 |             }
142 |
143 |         #if os(iOS) || os(xrOS)
    |                           |- warning: unknown operating system for build configuration 'os'
    |                           |- note: did you mean 'tvOS'?
    |                           `- note: did you mean 'iOS'?
144 |             .navigationBarTitleDisplayMode(.inline)
145 |         #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:150:17: warning: unknown operating system for build configuration 'os'
148 |         .focused($focusableField, equals: .play)
149 |         #endif
150 |         #if !os(xrOS)
    |                 |- warning: unknown operating system for build configuration 'os'
    |                 |- note: did you mean 'tvOS'?
    |                 `- note: did you mean 'iOS'?
151 |             .onKeyPressLeftArrow {
152 |             playerCoordinator.skip(interval: -15)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:229:21: warning: unknown operating system for build configuration 'os'
227 |         VStack {
228 |             VideoControllerView(config: playerCoordinator, subtitleModel: playerCoordinator.subtitleModel, title: $title, volumeSliderSize: playerWidth / 4)
229 |             #if !os(xrOS)
    |                     |- warning: unknown operating system for build configuration 'os'
    |                     |- note: did you mean 'tvOS'?
    |                     `- note: did you mean 'iOS'?
230 |             // 设置opacity为0,还是会去更新View。所以只能这样了
231 |             if playerCoordinator.isMaskShow {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:242:16: warning: unknown operating system for build configuration 'os'
240 |             #endif
241 |         }
242 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
243 |         .ornament(visibility: playerCoordinator.isMaskShow ? .visible : .hidden, attachmentAnchor: .scene(.bottom)) {
244 |             ornamentView(playerWidth: playerWidth)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:279:16: warning: unknown operating system for build configuration 'os'
277 |         .padding(.vertical, 24)
278 |         .padding(.horizontal, 36)
279 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
280 |             .glassBackgroundEffect()
281 |         #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:406:25: warning: unknown operating system for build configuration 'os'
404 |             #else
405 |             HStack {
406 |                 #if !os(xrOS)
    |                         |- warning: unknown operating system for build configuration 'os'
    |                         |- note: did you mean 'tvOS'?
    |                         `- note: did you mean 'iOS'?
407 |                 Button {
408 |                     dismiss()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:421:28: warning: unknown operating system for build configuration 'os'
419 |                 if let audioTracks = config.playerLayer?.player.tracks(mediaType: .audio), !audioTracks.isEmpty {
420 |                     audioButton(audioTracks: audioTracks)
421 |                     #if os(xrOS)
    |                            |- warning: unknown operating system for build configuration 'os'
    |                            |- note: did you mean 'tvOS'?
    |                            `- note: did you mean 'iOS'?
422 |                         .aspectRatio(1, contentMode: .fit)
423 |                         .glassBackgroundEffect()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:427:25: warning: unknown operating system for build configuration 'os'
425 |                 }
426 |                 muteButton
427 |                 #if !os(xrOS)
    |                         |- warning: unknown operating system for build configuration 'os'
    |                         |- note: did you mean 'tvOS'?
    |                         `- note: did you mean 'iOS'?
428 |                 contentModeButton
429 |                 subtitleButton
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:433:21: warning: unknown operating system for build configuration 'os'
431 |             }
432 |             Spacer()
433 |             #if !os(xrOS)
    |                     |- warning: unknown operating system for build configuration 'os'
    |                     |- note: did you mean 'tvOS'?
    |                     `- note: did you mean 'iOS'?
434 |             KSVideoPlayerViewBuilder.playbackControlView(config: config)
435 |             Spacer()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:456:16: warning: unknown operating system for build configuration 'os'
454 |
455 |     private var muteButton: some View {
456 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
457 |         HStack {
458 |             Slider(value: $config.playbackVolume, in: 0 ... 1)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:491:20: warning: unknown operating system for build configuration 'os'
489 |         } label: {
490 |             Image(systemName: "waveform.circle.fill")
491 |             #if os(xrOS)
    |                    |- warning: unknown operating system for build configuration 'os'
    |                    |- note: did you mean 'tvOS'?
    |                    `- note: did you mean 'iOS'?
492 |                 .padding()
493 |                 .clipShape(Circle())
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:577:24: warning: unknown operating system for build configuration 'os'
575 |                 }
576 |                 .frame(maxHeight: 20)
577 |                 #if os(xrOS)
    |                        |- warning: unknown operating system for build configuration 'os'
    |                        |- note: did you mean 'tvOS'?
    |                        `- note: did you mean 'iOS'?
578 |                     .tint(.white.opacity(0.8))
579 |                 #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:709:63: warning: unknown operating system for build configuration 'os'
707 |             }
708 |         }
709 |         #if os(macOS) || targetEnvironment(macCatalyst) || os(xrOS)
    |                                                               |- warning: unknown operating system for build configuration 'os'
    |                                                               |- note: did you mean 'tvOS'?
    |                                                               `- note: did you mean 'iOS'?
710 |         .toolbar {
711 |             Button("Done") {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:16:20: warning: unknown operating system for build configuration 'os'
 14 |         HStack(spacing: spacing) {
 15 |             // Playback controls don't need spacers for visionOS, since the controls are laid out in a HStack.
 16 |             #if os(xrOS)
    |                    |- warning: unknown operating system for build configuration 'os'
    |                    |- note: did you mean 'tvOS'?
    |                    `- note: did you mean 'iOS'?
 17 |             backwardButton(config: config)
 18 |             playButton(config: config)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:111:16: warning: unknown operating system for build configuration 'os'
109 | private extension KSVideoPlayerViewBuilder {
110 |     static var playSystemName: String {
111 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
112 |         "play.fill"
113 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:119:16: warning: unknown operating system for build configuration 'os'
117 |
118 |     static var pauseSystemName: String {
119 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
120 |         "pause.fill"
121 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:127:16: warning: unknown operating system for build configuration 'os'
125 |
126 |     static var speakerSystemName: String {
127 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
128 |         "speaker.fill"
129 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:135:16: warning: unknown operating system for build configuration 'os'
133 |
134 |     static var speakerDisabledSystemName: String {
135 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
136 |         "speaker.slash.fill"
137 |         #else
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerViewBuilder.swift:186:16: warning: unknown operating system for build configuration 'os'
184 |                 .font(.largeTitle)
185 |         }
186 |         #if os(xrOS)
    |                |- warning: unknown operating system for build configuration 'os'
    |                |- note: did you mean 'tvOS'?
    |                `- note: did you mean 'iOS'?
187 |         .contentTransition(.symbolEffect(.replace))
188 |         #endif
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:80:16: warning: static property 'subtitleDataSouces' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 78 |
 79 | public extension KSOptions {
 80 |     static var subtitleDataSouces: [SubtitleDataSouce] = [DirectorySubtitleDataSouce()]
    |                |- warning: static property 'subtitleDataSouces' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: convert 'subtitleDataSouces' to a 'let' constant to make 'Sendable' shared state immutable
    |                |- note: annotate 'subtitleDataSouces' 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
 81 | }
 82 |
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:84:23: warning: static property 'singleton' is not concurrency-safe because non-'Sendable' type 'PlistCacheSubtitleDataSouce' may have shared mutable state; this is an error in the Swift 6 language mode
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
    |                       |- warning: static property 'singleton' is not concurrency-safe because non-'Sendable' type 'PlistCacheSubtitleDataSouce' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: annotate 'singleton' 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
 85 |     public var infos = [any SubtitleInfo]()
 86 |     private let srtCacheInfoPath: String
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:97:23: warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
 85 |     public var infos = [any SubtitleInfo]()
    :
 95 |         srtInfoCaches = [String: [String]]()
 96 |         DispatchQueue.global().async { [weak self] in
 97 |             guard let self else {
    |                       `- warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 98 |                 return
 99 |             }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:127:27: warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
 81 | }
 82 |
 83 | public class PlistCacheSubtitleDataSouce: CacheSubtitleDataSouce {
    |              `- note: class 'PlistCacheSubtitleDataSouce' does not conform to the 'Sendable' protocol
 84 |     public static let singleton = PlistCacheSubtitleDataSouce()
 85 |     public var infos = [any SubtitleInfo]()
    :
125 |             srtInfoCaches[file] = array
126 |             DispatchQueue.global().async { [weak self] in
127 |                 guard let self else {
    |                           `- warning: capture of 'self' with non-sendable type 'PlistCacheSubtitleDataSouce?' in a `@Sendable` closure
128 |                     return
129 |                 }
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/KSVideoPlayerView.swift:218:25: warning: call to main actor-isolated instance method 'openURL' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
216 |                 providers.first?.loadDataRepresentation(forTypeIdentifier: "public.file-url") { data, _ in
217 |                     if let data, let path = NSString(data: data, encoding: 4), let url = URL(string: path as String) {
218 |                         openURL(url)
    |                         `- warning: call to main actor-isolated instance method 'openURL' in a synchronous nonisolated context; this is an error in the Swift 6 language mode
219 |                     }
220 |                 }
    :
302 |     }
303 |
304 |     public func openURL(_ url: URL) {
    |                 `- note: calls to instance method 'openURL' from outside of its actor context are implicitly asynchronous
305 |         runOnMainThread {
306 |             if url.isSubtitle {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:289:23: warning: static property 'textPosition' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
287 |     public static var textBold = false
288 |     public static var textItalic = false
289 |     public static var textPosition = TextPosition()
    |                       |- warning: static property 'textPosition' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textPosition' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textPosition' 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
290 |     public static var audioRecognizes = [any AudioRecognize]()
291 |     private var subtitleDataSouces: [SubtitleDataSouce] = KSOptions.subtitleDataSouces
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:280:23: warning: static property 'textColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
278 |     }
279 |
280 |     public static var textColor: Color = .white
    |                       |- warning: static property 'textColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textColor' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textColor' 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
281 |     public static var textBackgroundColor: Color = .clear
282 |     public static var textFont: UIFont {
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:288:23: warning: static property 'textItalic' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
286 |     public static var textFontSize = SubtitleModel.Size.standard.rawValue
287 |     public static var textBold = false
288 |     public static var textItalic = false
    |                       |- warning: static property 'textItalic' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textItalic' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textItalic' 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
289 |     public static var textPosition = TextPosition()
290 |     public static var audioRecognizes = [any AudioRecognize]()
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/KSSubtitle.swift:281:23: warning: static property 'textBackgroundColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
279 |
280 |     public static var textColor: Color = .white
281 |     public static var textBackgroundColor: Color = .clear
    |                       |- warning: static property 'textBackgroundColor' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'textBackgroundColor' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: annotate 'textBackgroundColor' 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
282 |     public static var textFont: UIFont {
283 |         textBold ? .boldSystemFont(ofSize: textFontSize) : .systemFont(ofSize: textFontSize)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/LiveTextImage.swift:58:51: warning: non-sendable type 'ImageAnalysis' returned by implicitly asynchronous call to nonisolated function cannot cross actor boundary; this is an error in the Swift 6 language mode
56 |             do {
57 |                 let configuration = ImageAnalyzer.Configuration([.text])
58 |                 let analysis = try await analyzer.analyze(image, orientation: .up, configuration: configuration)
   |                                                   `- warning: non-sendable type 'ImageAnalysis' returned by implicitly asynchronous call to nonisolated function cannot cross actor boundary; this is an error in the Swift 6 language mode
59 |                 interaction.preferredInteractionTypes = .textSelection
60 |                 interaction.analysis = analysis
VisionKit.ImageAnalysis:2:20: note: class 'ImageAnalysis' does not conform to the 'Sendable' protocol
1 | @available(iOS 16.0, macOS 13.0, macCatalyst 17.0, *)
2 | final public class ImageAnalysis {
  |                    `- note: class 'ImageAnalysis' does not conform to the 'Sendable' protocol
3 |     final public var transcript: String { get }
4 |     final public func hasResults(for analysisTypes: ImageAnalyzer.AnalysisTypes) -> Bool
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/SwiftUI/LiveTextImage.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'VisionKit'
 8 | import SwiftUI
 9 | #if canImport(VisionKit)
10 | import VisionKit
   | `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'VisionKit'
11 |
12 | @available(iOS 16.0, macOS 13.0, macCatalyst 17.0, *)
/Users/admin/builder/spi-builder-workspace/Sources/KSPlayer/Subtitle/SubtitleDataSouce.swift:23:22: 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
 21 |         didSet {
 22 |             if isEnabled, parts.isEmpty {
 23 |                 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
 24 |                     try? await parse(url: downloadURL, userAgent: userAgent)
    |                                `- note: closure captures 'self' which is accessible to code in the current task
 25 |                 }
 26 |             }
[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! (143.97s)
Fetching https://github.com/kingslay/FFmpegKit.git
[1/9921] Fetching ffmpegkit
Fetched https://github.com/kingslay/FFmpegKit.git from cache (122.18s)
Computing version for https://github.com/kingslay/FFmpegKit.git
Computed https://github.com/kingslay/FFmpegKit.git at 6.1.3 (0.52s)
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.