The Swift Package Index logo.Swift Package Index

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

Build Information

Successful build of DitheringEngine, reference main (897dbf), with Swift 6.1 for macOS (SPM) on 1 May 2025 12:19:07 UTC.

Swift 6 data race errors: 6

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures

Build Log

========================================
RunAll
========================================
Builder version: 4.61.3
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/Eskils/DitheringEngine.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/Eskils/DitheringEngine
 * branch            main       -> FETCH_HEAD
 * [new branch]      main       -> origin/main
HEAD is now at 897dbfe [#14] Dithering Engine 1.9.0
Cloned https://github.com/Eskils/DitheringEngine.git
Revision (git rev-parse @):
897dbfed946ca23ad9c467fdadf8de8260557572
SUCCESS checkout https://github.com/Eskils/DitheringEngine.git at main
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
  "identity": ".resolve-product-dependencies",
  "name": "resolve-dependencies",
  "url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "version": "unspecified",
  "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
  "dependencies": [
    {
      "identity": "ditheringengine",
      "name": "DitheringEngine",
      "url": "https://github.com/Eskils/DitheringEngine.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/DitheringEngine",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/Eskils/DitheringEngine.git
[1/1246] Fetching ditheringengine
Fetched https://github.com/Eskils/DitheringEngine.git from cache (1.52s)
Creating working copy for https://github.com/Eskils/DitheringEngine.git
Working copy of https://github.com/Eskils/DitheringEngine.git resolved at main (897dbfe)
warning: '.resolve-product-dependencies': dependency 'ditheringengine' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/Eskils/DitheringEngine.git
https://github.com/Eskils/DitheringEngine.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "DitheringEngine",
  "name" : "DitheringEngine",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "maccatalyst",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    }
  ],
  "products" : [
    {
      "name" : "DitheringEngine",
      "targets" : [
        "DitheringEngine"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "DitheringEngineTests",
      "module_type" : "SwiftTarget",
      "name" : "DitheringEngineTests",
      "path" : "Tests/DitheringEngineTests",
      "sources" : [
        "DitheringEngineTests.swift",
        "SettingsCodableTests.swift",
        "TestingHelpers.swift",
        "TestsError.swift"
      ],
      "target_dependencies" : [
        "DitheringEngine"
      ],
      "type" : "test"
    },
    {
      "c99name" : "DitheringEngine",
      "module_type" : "SwiftTarget",
      "name" : "DitheringEngine",
      "path" : "Sources/DitheringEngine",
      "product_memberships" : [
        "DitheringEngine"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/PrivacyInfo.xcprivacy",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "DitherMehtod.swift",
        "DitherMethods/Dither-Atkinson.swift",
        "DitherMethods/Dither-Bayer.swift",
        "DitherMethods/Dither-CleanThreshold.swift",
        "DitherMethods/Dither-ErrorDiffusion.swift",
        "DitherMethods/Dither-FloydSteinberg.swift",
        "DitherMethods/Dither-JarvisJudiceNinke.swift",
        "DitherMethods/Dither-Noise.swift",
        "DitherMethods/Dither-None.swift",
        "DitherMethods/Dither-Ordered.swift",
        "DitherMethods/Dither-WhiteNoise.swift",
        "DitherMethods/DitherMethods.swift",
        "DitheringEngine.swift",
        "ErrorDiffusionDitheringCustomization.swift",
        "Extensions/AnyPublisher+Extension.swift",
        "Extensions/Array+Extension.swift",
        "Extensions/Numeric+Extension.swift",
        "Extensions/SIMD3+Extension.swift",
        "Helpers/CGImageDataTransformer.swift",
        "Helpers/WhiteNoiseGenerator.swift",
        "Helpers/clamp.swift",
        "Helpers/convertColorspace.swift",
        "Helpers/equallySpacedColors.swift",
        "ImageColor.swift",
        "ImageDescription.swift",
        "LUT.swift",
        "LUTCollection.swift",
        "LUTPalette.swift",
        "Metal/MetalOrderedDithering.swift",
        "Nameable.swift",
        "OrderedDitheringThresholdConfiguration.swift",
        "Palette.swift",
        "Palettes/Palette-Apple2.swift",
        "Palettes/Palette-BlackAndWhite.swift",
        "Palettes/Palette-CGA.swift",
        "Palettes/Palette-GameBoy.swift",
        "Palettes/Palette-Grayscale.swift",
        "Palettes/Palette-Intellivision.swift",
        "Palettes/Palette-Quantized.swift",
        "Palettes/Palettes.swift",
        "SettingsConfiguration.swift",
        "SettingsConfigurations/Apple2SettingsConfiguration.swift",
        "SettingsConfigurations/BayerSettingsConfiguration.swift",
        "SettingsConfigurations/CGASettingsConfiguration.swift",
        "SettingsConfigurations/CustomPaletteSettingsConfiguration.swift",
        "SettingsConfigurations/DitherMethodSettingsConfiguration.swift",
        "SettingsConfigurations/EmptySettingsConfiguration.swift",
        "SettingsConfigurations/FloydSteinbergSettingsConfiguration.swift",
        "SettingsConfigurations/NoiseDitheringSettingsConfiguration.swift",
        "SettingsConfigurations/PaletteSelectionSettingsConfiguration.swift",
        "SettingsConfigurations/QuantizedColorSettingsConfiguration.swift",
        "SettingsConfigurations/WhiteNoiseSettingsConfiguration.swift",
        "ThresholdMap.swift",
        "Video/VideoAssembler.swift",
        "Video/VideoDescription.swift",
        "Video/VideoDitheringEngine.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.8"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/3] Write sources
[0/3] Copying PrivacyInfo.xcprivacy
[2/3] Write swift-version-2F0A5646E1D333AE.txt
[4/56] Emitting module DitheringEngine
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
[5/61] Compiling DitheringEngine Dither-JarvisJudiceNinke.swift
[6/61] Compiling DitheringEngine Dither-Noise.swift
[7/61] Compiling DitheringEngine Dither-None.swift
[8/61] Compiling DitheringEngine Dither-Ordered.swift
[9/61] Compiling DitheringEngine Dither-WhiteNoise.swift
[10/61] Compiling DitheringEngine DitherMethods.swift
[11/61] Compiling DitheringEngine BayerSettingsConfiguration.swift
[12/61] Compiling DitheringEngine CGASettingsConfiguration.swift
[13/61] Compiling DitheringEngine CustomPaletteSettingsConfiguration.swift
[14/61] Compiling DitheringEngine DitherMethodSettingsConfiguration.swift
[15/61] Compiling DitheringEngine EmptySettingsConfiguration.swift
[16/61] Compiling DitheringEngine OrderedDitheringThresholdConfiguration.swift
[17/61] Compiling DitheringEngine Palette.swift
[18/61] Compiling DitheringEngine Palette-Apple2.swift
[19/61] Compiling DitheringEngine Palette-BlackAndWhite.swift
[20/61] Compiling DitheringEngine Palette-CGA.swift
[21/61] Compiling DitheringEngine Palette-GameBoy.swift
[22/61] Compiling DitheringEngine DitherMehtod.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[23/61] Compiling DitheringEngine Dither-Atkinson.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[24/61] Compiling DitheringEngine Dither-Bayer.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[25/61] Compiling DitheringEngine Dither-CleanThreshold.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[26/61] Compiling DitheringEngine Dither-ErrorDiffusion.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[27/61] Compiling DitheringEngine Dither-FloydSteinberg.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/DitherMehtod.swift:102:23: warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
100 |     }
101 |
102 |     public static var setting = DitherMethodSettingsConfiguration()
    |                       |- warning: static property 'setting' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'setting' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'setting' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
103 | }
104 |
[28/61] Compiling DitheringEngine Palette-Grayscale.swift
[29/61] Compiling DitheringEngine Palette-Intellivision.swift
[30/61] Compiling DitheringEngine Palette-Quantized.swift
[31/61] Compiling DitheringEngine Palettes.swift
[32/61] Compiling DitheringEngine SettingsConfiguration.swift
[33/61] Compiling DitheringEngine Apple2SettingsConfiguration.swift
[34/61] Compiling DitheringEngine DitheringEngine.swift
[35/61] Compiling DitheringEngine ErrorDiffusionDitheringCustomization.swift
[36/61] Compiling DitheringEngine AnyPublisher+Extension.swift
[37/61] Compiling DitheringEngine Array+Extension.swift
[38/61] Compiling DitheringEngine Numeric+Extension.swift
[39/61] Compiling DitheringEngine SIMD3+Extension.swift
[40/61] Compiling DitheringEngine ImageDescription.swift
[41/61] Compiling DitheringEngine LUT.swift
[42/61] Compiling DitheringEngine LUTCollection.swift
[43/61] Compiling DitheringEngine LUTPalette.swift
[44/61] Compiling DitheringEngine MetalOrderedDithering.swift
[45/61] Compiling DitheringEngine Nameable.swift
[46/61] Compiling DitheringEngine CGImageDataTransformer.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[47/61] Compiling DitheringEngine WhiteNoiseGenerator.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[48/61] Compiling DitheringEngine clamp.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[49/61] Compiling DitheringEngine convertColorspace.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[50/61] Compiling DitheringEngine equallySpacedColors.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[51/61] Compiling DitheringEngine ImageColor.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:20:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | extension UInt8: ImageColor {
20 |     public static var one: UInt8 = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |     public func toFloat() -> Float { Float(self) }
22 |     public func toUInt8() -> UInt8 { self }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/ImageColor.swift:27:23: warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 |
26 | extension Float: ImageColor {
27 |     public static var one: Float = 1
   |                       |- warning: static property 'one' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
   |                       |- note: convert 'one' to a 'let' constant to make 'Sendable' shared state immutable
   |                       |- note: add '@MainActor' to make static property 'one' part of global actor 'MainActor'
   |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 |     public func toFloat() -> Float { self }
29 |     public func toUInt8() -> UInt8 { UInt8(self) }
[52/61] Compiling DitheringEngine ThresholdMap.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:38: warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                      `- warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
    :
273 |
274 | extension VideoDitheringEngine {
275 |     struct WorkItemContext {
    |            `- note: consider making struct 'WorkItemContext' conform to the 'Sendable' protocol
276 |         private let ditheringEngine: DitheringEngine
277 |         private let context: CIContext
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:74: warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                                                          `- warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:264:21: warning: mutation of captured var 'results' in concurrently-executing code
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
264 |                     results[i] = result
    |                     `- warning: mutation of captured var 'results' in concurrently-executing code
265 |                 } catch {
266 |                     print("Failed to scale and dither frame: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                 |- 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
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:60: warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                            |- warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
    |                                                            `- note: task-isolated 'workItemContexts' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:86: warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                                                      |- warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                                      `- note: task-isolated 'frames' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:158:28: warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
158 |                     if let progressHandler {
    |                            |- warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                            `- note: task-isolated 'progressHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
160 |                         return progressHandler(progress)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:167:25: warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
165 |                     if wasCanceled {
166 |                         frames.cancel()
167 |                         audioSamples?.cancel()
    |                         |- warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'audioSamples' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:169:25: warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
167 |                         audioSamples?.cancel()
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
    |                         |- warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'completionHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
170 |                         return
171 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:174:43: warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
172 |
173 |                     print("Finished adding all frames")
174 |                     if let audioSamples, !options.contains(.removeAudio) {
    |                                           |- warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
    |                                           `- note: task-isolated 'options' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                         transferAudio(audioSamples: audioSamples, videoAssembler: videoAssembler)
176 |                         print("Finished adding audio")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:254:25: warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
252 |                 defer {
253 |                     DispatchQueue.main.async {
254 |                         responses += 1
    |                         |- warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'responses' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
255 |                         if responses == numThreads {
256 |                             responses += 1
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
    |                             `- note: task-isolated 'completion' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     |- warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: task-isolated 'results' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
[53/61] Compiling DitheringEngine VideoAssembler.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:38: warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                      `- warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
    :
273 |
274 | extension VideoDitheringEngine {
275 |     struct WorkItemContext {
    |            `- note: consider making struct 'WorkItemContext' conform to the 'Sendable' protocol
276 |         private let ditheringEngine: DitheringEngine
277 |         private let context: CIContext
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:74: warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                                                          `- warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:264:21: warning: mutation of captured var 'results' in concurrently-executing code
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
264 |                     results[i] = result
    |                     `- warning: mutation of captured var 'results' in concurrently-executing code
265 |                 } catch {
266 |                     print("Failed to scale and dither frame: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                 |- 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
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:60: warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                            |- warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
    |                                                            `- note: task-isolated 'workItemContexts' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:86: warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                                                      |- warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                                      `- note: task-isolated 'frames' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:158:28: warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
158 |                     if let progressHandler {
    |                            |- warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                            `- note: task-isolated 'progressHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
160 |                         return progressHandler(progress)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:167:25: warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
165 |                     if wasCanceled {
166 |                         frames.cancel()
167 |                         audioSamples?.cancel()
    |                         |- warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'audioSamples' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:169:25: warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
167 |                         audioSamples?.cancel()
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
    |                         |- warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'completionHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
170 |                         return
171 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:174:43: warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
172 |
173 |                     print("Finished adding all frames")
174 |                     if let audioSamples, !options.contains(.removeAudio) {
    |                                           |- warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
    |                                           `- note: task-isolated 'options' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                         transferAudio(audioSamples: audioSamples, videoAssembler: videoAssembler)
176 |                         print("Finished adding audio")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:254:25: warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
252 |                 defer {
253 |                     DispatchQueue.main.async {
254 |                         responses += 1
    |                         |- warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'responses' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
255 |                         if responses == numThreads {
256 |                             responses += 1
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
    |                             `- note: task-isolated 'completion' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     |- warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: task-isolated 'results' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
[54/61] Compiling DitheringEngine VideoDescription.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:38: warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                      `- warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
    :
273 |
274 | extension VideoDitheringEngine {
275 |     struct WorkItemContext {
    |            `- note: consider making struct 'WorkItemContext' conform to the 'Sendable' protocol
276 |         private let ditheringEngine: DitheringEngine
277 |         private let context: CIContext
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:74: warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                                                          `- warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:264:21: warning: mutation of captured var 'results' in concurrently-executing code
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
264 |                     results[i] = result
    |                     `- warning: mutation of captured var 'results' in concurrently-executing code
265 |                 } catch {
266 |                     print("Failed to scale and dither frame: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                 |- 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
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:60: warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                            |- warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
    |                                                            `- note: task-isolated 'workItemContexts' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:86: warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                                                      |- warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                                      `- note: task-isolated 'frames' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:158:28: warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
158 |                     if let progressHandler {
    |                            |- warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                            `- note: task-isolated 'progressHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
160 |                         return progressHandler(progress)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:167:25: warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
165 |                     if wasCanceled {
166 |                         frames.cancel()
167 |                         audioSamples?.cancel()
    |                         |- warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'audioSamples' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:169:25: warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
167 |                         audioSamples?.cancel()
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
    |                         |- warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'completionHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
170 |                         return
171 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:174:43: warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
172 |
173 |                     print("Finished adding all frames")
174 |                     if let audioSamples, !options.contains(.removeAudio) {
    |                                           |- warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
    |                                           `- note: task-isolated 'options' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                         transferAudio(audioSamples: audioSamples, videoAssembler: videoAssembler)
176 |                         print("Finished adding audio")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:254:25: warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
252 |                 defer {
253 |                     DispatchQueue.main.async {
254 |                         responses += 1
    |                         |- warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'responses' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
255 |                         if responses == numThreads {
256 |                             responses += 1
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
    |                             `- note: task-isolated 'completion' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     |- warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: task-isolated 'results' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
[55/61] Compiling DitheringEngine VideoDitheringEngine.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:38: warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                      `- warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
    :
273 |
274 | extension VideoDitheringEngine {
275 |     struct WorkItemContext {
    |            `- note: consider making struct 'WorkItemContext' conform to the 'Sendable' protocol
276 |         private let ditheringEngine: DitheringEngine
277 |         private let context: CIContext
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:74: warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                                                          `- warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:264:21: warning: mutation of captured var 'results' in concurrently-executing code
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
264 |                     results[i] = result
    |                     `- warning: mutation of captured var 'results' in concurrently-executing code
265 |                 } catch {
266 |                     print("Failed to scale and dither frame: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                 |- 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
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:60: warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                            |- warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
    |                                                            `- note: task-isolated 'workItemContexts' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:86: warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                                                      |- warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                                      `- note: task-isolated 'frames' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:158:28: warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
158 |                     if let progressHandler {
    |                            |- warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                            `- note: task-isolated 'progressHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
160 |                         return progressHandler(progress)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:167:25: warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
165 |                     if wasCanceled {
166 |                         frames.cancel()
167 |                         audioSamples?.cancel()
    |                         |- warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'audioSamples' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:169:25: warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
167 |                         audioSamples?.cancel()
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
    |                         |- warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'completionHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
170 |                         return
171 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:174:43: warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
172 |
173 |                     print("Finished adding all frames")
174 |                     if let audioSamples, !options.contains(.removeAudio) {
    |                                           |- warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
    |                                           `- note: task-isolated 'options' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                         transferAudio(audioSamples: audioSamples, videoAssembler: videoAssembler)
176 |                         print("Finished adding audio")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:254:25: warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
252 |                 defer {
253 |                     DispatchQueue.main.async {
254 |                         responses += 1
    |                         |- warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'responses' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
255 |                         if responses == numThreads {
256 |                             responses += 1
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
    |                             `- note: task-isolated 'completion' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     |- warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: task-isolated 'results' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
[56/61] Compiling DitheringEngine resource_bundle_accessor.swift
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:366:23: warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
364 |
365 |     /// Default video dithering.
366 |     public static let none = Self([])
    |                       |- warning: static property 'none' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'none' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
367 |
368 |     /// Makes an indexed map of all colors to dithered color.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:371:23: warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
369 |     /// Adds an increased wait time in the begining.
370 |     /// Might be faster with large LUTCollections. Do not use with LUT which is already index based.
371 |     public static let precalculateDitheredColorForAllColors = Self(rawValue: 1 << 0)
    |                       |- warning: static property 'precalculateDitheredColorForAllColors' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'precalculateDitheredColorForAllColors' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 |     /// Does not transfer audio from the original video file.
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:374:23: warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
356 | }
357 |
358 | public struct VideoDitherOptions: OptionSet {
    |               `- note: consider making struct 'VideoDitherOptions' conform to the 'Sendable' protocol
359 |     public let rawValue: Int
360 |
    :
372 |
373 |     /// Does not transfer audio from the original video file.
374 |     public static let removeAudio = Self(rawValue: 1 << 1)
    |                       |- warning: static property 'removeAudio' is not concurrency-safe because non-'Sendable' type 'VideoDitherOptions' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'removeAudio' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
375 |
376 |
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in a '@Sendable' closure
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in a '@Sendable' closure
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:38: warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                      `- warning: capture of 'context' with non-sendable type 'VideoDitheringEngine.WorkItemContext' in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
    :
273 |
274 | extension VideoDitheringEngine {
275 |     struct WorkItemContext {
    |            `- note: consider making struct 'WorkItemContext' conform to the 'Sendable' protocol
276 |         private let ditheringEngine: DitheringEngine
277 |         private let context: CIContext
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:263:74: warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
261 |
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
    |                                                                          `- warning: capture of 'pixelBuffer' with non-sendable type 'CVPixelBuffer' (aka 'CVBuffer') in a '@Sendable' closure
264 |                     results[i] = result
265 |                 } catch {
CoreVideo.CVBuffer:1:14: note: class 'CVBuffer' does not conform to the 'Sendable' protocol
1 | public class CVBuffer : _CFObject {
  |              `- note: class 'CVBuffer' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: capture of 'completion' with non-sendable type '(Int, [CVPixelBuffer?]) -> Void' (aka '(Int, Array<Optional<CVBuffer>>) -> ()') in an isolated local function; this is an error in the Swift 6 language mode
    |                             `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     `- warning: capture of 'results' with non-sendable type '[CVPixelBuffer?]' (aka 'Array<Optional<CVBuffer>>') in an isolated local function; this is an error in the Swift 6 language mode
258 |                         }
259 |                     }
Swift.Array:1:23: note: generic struct 'Array' does not conform to the 'Sendable' protocol
1 | @frozen public struct Array<Element> : _DestructorSafeContainer {
  |                       `- note: generic struct 'Array' does not conform to the 'Sendable' protocol
2 | }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:264:21: warning: mutation of captured var 'results' in concurrently-executing code
262 |                 do {
263 |                     let result = try context.scaleAndDither(pixelBuffer: pixelBuffer)
264 |                     results[i] = result
    |                     `- warning: mutation of captured var 'results' in concurrently-executing code
265 |                 } catch {
266 |                     print("Failed to scale and dither frame: \(error)")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                 |- 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
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:60: warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                            |- warning: sending 'workItemContexts' risks causing data races; this is an error in the Swift 6 language mode
    |                                                            `- note: task-isolated 'workItemContexts' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:157:86: warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
155 |
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
    |                                                                                      |- warning: sending 'frames' risks causing data races; this is an error in the Swift 6 language mode
    |                                                                                      `- note: task-isolated 'frames' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
158 |                     if let progressHandler {
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:158:28: warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
156 |             DispatchQueue.main.async {
157 |                 dispatchUntilEmpty(queue: queue, contexts: workItemContexts, frames: frames, videoAssembler: videoAssembler) { batchNumber in
158 |                     if let progressHandler {
    |                            |- warning: sending 'progressHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                            `- note: task-isolated 'progressHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
159 |                         let progress = min(1, Float(batchNumber) / Float(numberOfBatches))
160 |                         return progressHandler(progress)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:167:25: warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
165 |                     if wasCanceled {
166 |                         frames.cancel()
167 |                         audioSamples?.cancel()
    |                         |- warning: sending 'audioSamples' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'audioSamples' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:169:25: warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
167 |                         audioSamples?.cancel()
168 |                         videoAssembler.cancelVideoGeneration()
169 |                         completionHandler(VideoDitheringError.cancelled)
    |                         |- warning: sending 'completionHandler' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'completionHandler' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
170 |                         return
171 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:174:43: warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
172 |
173 |                     print("Finished adding all frames")
174 |                     if let audioSamples, !options.contains(.removeAudio) {
    |                                           |- warning: sending 'options' risks causing data races; this is an error in the Swift 6 language mode
    |                                           `- note: task-isolated 'options' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
175 |                         transferAudio(audioSamples: audioSamples, videoAssembler: videoAssembler)
176 |                         print("Finished adding audio")
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:254:25: warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
252 |                 defer {
253 |                     DispatchQueue.main.async {
254 |                         responses += 1
    |                         |- warning: sending 'responses' risks causing data races; this is an error in the Swift 6 language mode
    |                         `- note: task-isolated 'responses' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
255 |                         if responses == numThreads {
256 |                             responses += 1
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:29: warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                             |- warning: sending 'completion' risks causing data races; this is an error in the Swift 6 language mode
    |                             `- note: task-isolated 'completion' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Video/VideoDitheringEngine.swift:257:53: warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
255 |                         if responses == numThreads {
256 |                             responses += 1
257 |                             completion(idempotency, results)
    |                                                     |- warning: sending 'results' risks causing data races; this is an error in the Swift 6 language mode
    |                                                     `- note: task-isolated 'results' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |                         }
259 |                     }
[57/61] Compiling DitheringEngine FloydSteinbergSettingsConfiguration.swift
[58/61] Compiling DitheringEngine NoiseDitheringSettingsConfiguration.swift
[59/61] Compiling DitheringEngine PaletteSelectionSettingsConfiguration.swift
[60/61] Compiling DitheringEngine QuantizedColorSettingsConfiguration.swift
[61/61] Compiling DitheringEngine WhiteNoiseSettingsConfiguration.swift
Build complete! (8.60s)
warning: 'spi-builder-workspace': found 1 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
    /Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/Metal/OrderedDithering.metal
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "DitheringEngine",
  "name" : "DitheringEngine",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "ios",
      "version" : "13.0"
    },
    {
      "name" : "maccatalyst",
      "version" : "13.0"
    },
    {
      "name" : "macos",
      "version" : "10.15"
    }
  ],
  "products" : [
    {
      "name" : "DitheringEngine",
      "targets" : [
        "DitheringEngine"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "DitheringEngineTests",
      "module_type" : "SwiftTarget",
      "name" : "DitheringEngineTests",
      "path" : "Tests/DitheringEngineTests",
      "sources" : [
        "DitheringEngineTests.swift",
        "SettingsCodableTests.swift",
        "TestingHelpers.swift",
        "TestsError.swift"
      ],
      "target_dependencies" : [
        "DitheringEngine"
      ],
      "type" : "test"
    },
    {
      "c99name" : "DitheringEngine",
      "module_type" : "SwiftTarget",
      "name" : "DitheringEngine",
      "path" : "Sources/DitheringEngine",
      "product_memberships" : [
        "DitheringEngine"
      ],
      "resources" : [
        {
          "path" : "/Users/admin/builder/spi-builder-workspace/Sources/DitheringEngine/PrivacyInfo.xcprivacy",
          "rule" : {
            "process" : {
            }
          }
        }
      ],
      "sources" : [
        "DitherMehtod.swift",
        "DitherMethods/Dither-Atkinson.swift",
        "DitherMethods/Dither-Bayer.swift",
        "DitherMethods/Dither-CleanThreshold.swift",
        "DitherMethods/Dither-ErrorDiffusion.swift",
        "DitherMethods/Dither-FloydSteinberg.swift",
        "DitherMethods/Dither-JarvisJudiceNinke.swift",
        "DitherMethods/Dither-Noise.swift",
        "DitherMethods/Dither-None.swift",
        "DitherMethods/Dither-Ordered.swift",
        "DitherMethods/Dither-WhiteNoise.swift",
        "DitherMethods/DitherMethods.swift",
        "DitheringEngine.swift",
        "ErrorDiffusionDitheringCustomization.swift",
        "Extensions/AnyPublisher+Extension.swift",
        "Extensions/Array+Extension.swift",
        "Extensions/Numeric+Extension.swift",
        "Extensions/SIMD3+Extension.swift",
        "Helpers/CGImageDataTransformer.swift",
        "Helpers/WhiteNoiseGenerator.swift",
        "Helpers/clamp.swift",
        "Helpers/convertColorspace.swift",
        "Helpers/equallySpacedColors.swift",
        "ImageColor.swift",
        "ImageDescription.swift",
        "LUT.swift",
        "LUTCollection.swift",
        "LUTPalette.swift",
        "Metal/MetalOrderedDithering.swift",
        "Nameable.swift",
        "OrderedDitheringThresholdConfiguration.swift",
        "Palette.swift",
        "Palettes/Palette-Apple2.swift",
        "Palettes/Palette-BlackAndWhite.swift",
        "Palettes/Palette-CGA.swift",
        "Palettes/Palette-GameBoy.swift",
        "Palettes/Palette-Grayscale.swift",
        "Palettes/Palette-Intellivision.swift",
        "Palettes/Palette-Quantized.swift",
        "Palettes/Palettes.swift",
        "SettingsConfiguration.swift",
        "SettingsConfigurations/Apple2SettingsConfiguration.swift",
        "SettingsConfigurations/BayerSettingsConfiguration.swift",
        "SettingsConfigurations/CGASettingsConfiguration.swift",
        "SettingsConfigurations/CustomPaletteSettingsConfiguration.swift",
        "SettingsConfigurations/DitherMethodSettingsConfiguration.swift",
        "SettingsConfigurations/EmptySettingsConfiguration.swift",
        "SettingsConfigurations/FloydSteinbergSettingsConfiguration.swift",
        "SettingsConfigurations/NoiseDitheringSettingsConfiguration.swift",
        "SettingsConfigurations/PaletteSelectionSettingsConfiguration.swift",
        "SettingsConfigurations/QuantizedColorSettingsConfiguration.swift",
        "SettingsConfigurations/WhiteNoiseSettingsConfiguration.swift",
        "ThresholdMap.swift",
        "Video/VideoAssembler.swift",
        "Video/VideoDescription.swift",
        "Video/VideoDitheringEngine.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.8"
}
Done.