Build Information
Failed to build MosaicKit, reference main (cd1cf3), with Swift 6.2 for macOS (SPM) on 3 Oct 2026 16:22:56 UTC.
Build Command
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.1.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/fdenis75/MosaicKit.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/fdenis75/MosaicKit
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at cd1cf36 Merge pull request #49 from fdenis75/claude/f2-ffmpeg-args-i2-i3
Cloned https://github.com/fdenis75/MosaicKit.git
Revision (git rev-parse @):
cd1cf36776d9af71d33f2578a6ba1e42ba6463c8
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/fdenis75/MosaicKit.git at main
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.2
Building package at path: $PWD
https://github.com/fdenis75/MosaicKit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64
Building for debugging...
[0/14] Write sources
[4/14] Copying libwebp.a
[5/14] Copying MetalShaders.metal
[5/14] Copying libwebpmux.a
[5/14] Copying libsharpyuv.a
[9/14] Copying libwebpdemux.a
[10/14] Write swift-version--3CB7CFEC50E0D141.txt
[11/54] Compiling webpbridge WebpIncrementalDecoder.mm
[12/54] Compiling webpbridge WebpIncrementalDecoderResult.mm
[13/54] Compiling webpbridge WebpRGBAMultiplier.mm
[15/66] Emitting module DominantColors
[16/69] Compiling DominantColors ColorShade.swift
[17/69] Compiling DominantColors HSL.swift
[18/69] Compiling DominantColors Hex.swift
[19/69] Compiling DominantColors Lab.swift
[20/69] Compiling DominantColors UIImageExtension.swift
[21/69] Compiling DominantColors GradientColors.swift
[22/69] Compiling DominantColors ImageColorError.swift
[23/69] Compiling webp CGImage+Util.swift
[24/69] Compiling webp InternalRawRepresentable.swift
[25/69] Compiling webp WebPAnimatedEncoder.swift
[26/69] Compiling webp WebPDecoder+Platform.swift
[27/69] Compiling DominantColors RGB.swift
[28/69] Compiling DominantColors RGB255.swift
[29/69] Compiling DominantColors XYZ.swift
[30/69] Compiling DominantColors ComplementaryColor.swift
[31/69] Compiling DominantColors ContrastRatio.swift
[32/69] Compiling DominantColors DeltaEFormula.swift
[33/69] Compiling DominantColors Difference.swift
[34/69] Compiling DominantColors DominantColorAlgorithm.swift
[35/69] Compiling webp WebPError.swift
[36/70] Compiling SJSAssetExportSession ExportSession.swift
[37/70] Compiling SJSAssetExportSession SampleWriter.swift
[38/70] Compiling SJSAssetExportSession AudioOutputSettings.swift
[39/70] Emitting module SJSAssetExportSession
[40/70] Compiling SJSAssetExportSession ExportSession+Error.swift
[41/70] Compiling SJSAssetExportSession Array+Extensions.swift
[42/70] Compiling SJSAssetExportSession VideoOutputSettings.swift
[43/70] Compiling SJSAssetExportSession CMTime+seconds.swift
[44/70] Compiling DominantColors DominantColors+UIColor.swift
[45/70] Compiling DominantColors DominantColors.swift
[46/70] Compiling DominantColors CGFloatExtensions.swift
[47/70] Compiling DominantColors CGImageExtensions.swift
[48/70] Compiling DominantColors CGSizeExtensions.swift
[49/70] Compiling DominantColors NSImageExtension.swift
[50/70] Compiling DominantColors ImageFIlter.swift
[51/70] Compiling DominantColors ImageTrimAlpha.swift
[52/70] Compiling DominantColors RelativeLuminance.swift
[53/70] Compiling DominantColors DominantColorQuality.swift
[54/70] Compiling DominantColors DominantColors+CIAreaAverage.swift
[55/70] Compiling DominantColors DominantColors+CIE.swift
[56/70] Compiling DominantColors DominantColors+CIKMeans.swift
[57/70] Compiling DominantColors DominantColors+ColorResolved.swift
[58/70] Compiling DominantColors DominantColors+NSColor.swift
[59/103] Compiling webp WebPImageInspector.swift
[60/103] Compiling webp WebPEncoder+CGImage.swift
[61/103] Compiling webp WebPEncoder+Platform.swift
[62/103] Compiling webp WebPEncoder.swift
[63/103] Compiling webp WebPDecoder.swift
[64/103] Compiling webp WebPEncoderConfig.swift
[65/103] Compiling webp WebPDecoderConfig.swift
[66/103] Compiling MosaicKit ConfigurationValidation.swift
[67/103] Compiling MosaicKit DensityConfig.swift
[68/103] Emitting module webp
[69/103] Compiling MosaicKit FFmpegEncodingOptions.swift
[70/103] Compiling MosaicKit LayoutConfiguration.swift
[71/103] Compiling MosaicKit ExportWatchdog.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:288:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
286 | // Reference types so they can be safely captured across concurrency boundaries
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
289 | nonisolated(unsafe) let pipeRef = stderrPipe
290 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:289:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
289 | nonisolated(unsafe) let pipeRef = stderrPipe
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
290 |
291 | // Mutable stderr state: only accessed from Foundation's serial readability queue.
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:240:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
238 | var exportError: Error?
239 | do {
240 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
241 | try await sessionRef.export(to: outputURL, as: .mov)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
242 | }.value
243 | } catch {
[72/103] Compiling MosaicKit FFmpegEncoder.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:288:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
286 | // Reference types so they can be safely captured across concurrency boundaries
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
289 | nonisolated(unsafe) let pipeRef = stderrPipe
290 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:289:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
289 | nonisolated(unsafe) let pipeRef = stderrPipe
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
290 |
291 | // Mutable stderr state: only accessed from Foundation's serial readability queue.
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:240:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
238 | var exportError: Error?
239 | do {
240 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
241 | try await sessionRef.export(to: outputURL, as: .mov)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
242 | }.value
243 | } catch {
[73/103] Compiling MosaicKit PreviewError.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:288:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
286 | // Reference types so they can be safely captured across concurrency boundaries
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Process', consider removing it
289 | nonisolated(unsafe) let pipeRef = stderrPipe
290 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:289:9: warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
287 | // without triggering Swift 6 Sendable errors (Process and Pipe are not Sendable).
288 | nonisolated(unsafe) let processRef = process
289 | nonisolated(unsafe) let pipeRef = stderrPipe
| `- warning: 'nonisolated(unsafe)' is unnecessary for a constant with 'Sendable' type 'Pipe', consider removing it
290 |
291 | // Mutable stderr state: only accessed from Foundation's serial readability queue.
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/FFmpegEncoder.swift:240:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
238 | var exportError: Error?
239 | do {
240 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
241 | try await sessionRef.export(to: outputURL, as: .mov)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
242 | }.value
243 | } catch {
[74/106] Emitting module MosaicKit
[75/106] Compiling MosaicKit WebPSupport.swift
[76/106] Compiling MosaicKit VideoInputScanner.swift
[77/106] Compiling MosaicKit resource_bundle_accessor.swift
[82/106] Compiling MosaicKit MosaicConfiguration.swift
[83/106] Compiling MosaicKit MosaicLayout.swift
[84/106] Compiling MosaicKit OverlayConfiguration.swift
[85/106] Compiling MosaicKit PreviewConfiguration.swift
[86/106] Compiling MosaicKit PreviewGeneratorCoordinator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:874:27: warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
872 | nominalFrameRate: Float
873 | ) -> AVVideoComposition {
874 | let instruction = AVMutableVideoCompositionInstruction()
| `- warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:877:32: warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
877 | let layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: compositionVideoTrack)
| `- warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
878 | layerInstruction.setTransform(finalTransform, at: .zero)
879 | instruction.layerInstructions = [layerInstruction]
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:881:32: warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
879 | instruction.layerInstructions = [layerInstruction]
880 |
881 | let videoComposition = AVMutableVideoComposition()
| `- warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
882 | videoComposition.instructions = [instruction]
883 | videoComposition.renderSize = renderSize
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1521:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1519 | var exportError: Error?
1520 | do {
1521 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1522 | try await sessionRef.export(to: outputURL, as: config.format.avFileType)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
1523 | }.value
1524 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1227:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1225 | if let vc = videoComposition {
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1228 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1239:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1237 | }
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1240 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[87/106] Compiling MosaicKit PreviewVideoGenerator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:874:27: warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
872 | nominalFrameRate: Float
873 | ) -> AVVideoComposition {
874 | let instruction = AVMutableVideoCompositionInstruction()
| `- warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:877:32: warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
877 | let layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: compositionVideoTrack)
| `- warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
878 | layerInstruction.setTransform(finalTransform, at: .zero)
879 | instruction.layerInstructions = [layerInstruction]
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:881:32: warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
879 | instruction.layerInstructions = [layerInstruction]
880 |
881 | let videoComposition = AVMutableVideoComposition()
| `- warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
882 | videoComposition.instructions = [instruction]
883 | videoComposition.renderSize = renderSize
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1521:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1519 | var exportError: Error?
1520 | do {
1521 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1522 | try await sessionRef.export(to: outputURL, as: config.format.avFileType)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
1523 | }.value
1524 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1227:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1225 | if let vc = videoComposition {
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1228 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1239:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1237 | }
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1240 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[88/106] Compiling MosaicKit ProcessingError.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:874:27: warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
872 | nominalFrameRate: Float
873 | ) -> AVVideoComposition {
874 | let instruction = AVMutableVideoCompositionInstruction()
| `- warning: 'AVMutableVideoCompositionInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:877:32: warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
875 | instruction.timeRange = CMTimeRange(start: .zero, duration: composition.duration)
876 |
877 | let layerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: compositionVideoTrack)
| `- warning: 'AVMutableVideoCompositionLayerInstruction' was deprecated in macOS 26.0: Use AVVideoCompositionLayerInstruction.Configuration instead [#DeprecatedDeclaration]
878 | layerInstruction.setTransform(finalTransform, at: .zero)
879 | instruction.layerInstructions = [layerInstruction]
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:881:32: warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
879 | instruction.layerInstructions = [layerInstruction]
880 |
881 | let videoComposition = AVMutableVideoComposition()
| `- warning: 'AVMutableVideoComposition' was deprecated in macOS 26.0: Use AVVideoComposition.Configuration instead [#DeprecatedDeclaration]
882 | videoComposition.instructions = [instruction]
883 | videoComposition.renderSize = renderSize
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1521:28: error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1519 | var exportError: Error?
1520 | do {
1521 | try await Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between main actor-isolated code and concurrent execution of the closure
1522 | try await sessionRef.export(to: outputURL, as: config.format.avFileType)
| `- note: closure captures 'sessionRef' which is accessible to main actor-isolated code
1523 | }.value
1524 | } catch {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1227:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1225 | if let vc = videoComposition {
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1228 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1239:35: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1237 | }
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
1240 | try await exporter.export(
| |- note: closure captures non-Sendable 'compositionAsset'
| `- note: closure captures non-Sendable 'exportAudioMix'
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1228:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1226 | // Use the raw-settings overload so we can pass our custom video composition for scaling.
1227 | exportTask = Task.detached(priority: .userInitiated) {
1228 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1229 | asset: compositionAsset,
1230 | audioOutputSettings: AudioOutputSettings.default.settingsDictionary,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'compositionAsset' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'compositionAsset' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
/Users/admin/builder/spi-builder-workspace/Sources/Processing/Preview/PreviewVideoGenerator.swift:1240:40: error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
1238 | } else {
1239 | exportTask = Task.detached(priority: .userInitiated) {
1240 | try await exporter.export(
| |- error: sending 'exportAudioMix' risks causing data races [#SendingRisksDataRace]
| `- note: task-isolated 'exportAudioMix' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
1241 | asset: compositionAsset,
1242 | audio: .default,
[#DeprecatedDeclaration]: <https://docs.swift.org/compiler/documentation/diagnostics/deprecated-declaration>
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[89/106] Compiling MosaicKit OutputTransaction.swift
[90/106] Compiling MosaicKit OverlayProcessor.swift
[91/106] Compiling MosaicKit AppLifecycleMonitor.swift
[92/106] Compiling MosaicKit VideoSource.swift
[93/106] Compiling MosaicKit AnimatedGifGenerator.swift
[94/106] Compiling MosaicKit GenerationJobs.swift
[95/106] Compiling MosaicKit LayoutProcessor.swift
[96/106] Compiling MosaicKit ThumbnailProcessor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:208:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
206 | nonisolated(unsafe) let generatorRef = generator
207 | let (stream, continuation) = AsyncThrowingStream<(index: Int, image: CGImage, timestamp: String), Error>.makeStream()
208 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
209 | do {
210 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
211 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
212 | var index = 0
213 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
214 | try Task.checkCancellation()
215 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:155:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
153 | nonisolated(unsafe) let assetRef = asset
154 | nonisolated(unsafe) let generatorRef = generator
155 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
156 | do {
157 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
158 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
159 | var index = 0
160 | try await withThrowingTaskGroup(of: (Int, CGImage).self) { group in
161 | var pending = 0
162 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
163 | try Task.checkCancellation()
164 | guard case .success(_, let image, let actualTime) = result else {
[97/106] Compiling MosaicKit VideoError.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:208:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
206 | nonisolated(unsafe) let generatorRef = generator
207 | let (stream, continuation) = AsyncThrowingStream<(index: Int, image: CGImage, timestamp: String), Error>.makeStream()
208 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
209 | do {
210 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
211 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
212 | var index = 0
213 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
214 | try Task.checkCancellation()
215 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:155:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
153 | nonisolated(unsafe) let assetRef = asset
154 | nonisolated(unsafe) let generatorRef = generator
155 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
156 | do {
157 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
158 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
159 | var index = 0
160 | try await withThrowingTaskGroup(of: (Int, CGImage).self) { group in
161 | var pending = 0
162 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
163 | try Task.checkCancellation()
164 | guard case .success(_, let image, let actualTime) = result else {
[98/106] Compiling MosaicKit VideoMetadataExtractor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:208:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
206 | nonisolated(unsafe) let generatorRef = generator
207 | let (stream, continuation) = AsyncThrowingStream<(index: Int, image: CGImage, timestamp: String), Error>.makeStream()
208 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
209 | do {
210 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
211 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
212 | var index = 0
213 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
214 | try Task.checkCancellation()
215 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/Processing/ThumbnailProcessor.swift:155:24: error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
153 | nonisolated(unsafe) let assetRef = asset
154 | nonisolated(unsafe) let generatorRef = generator
155 | let producer = Task {
| `- error: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure
156 | do {
157 | let duration = try await assetRef.load(.duration).seconds
| `- note: closure captures non-Sendable 'assetRef'
158 | let times = calculateExtractionTimes(duration: duration, count: layout.positions.count)
159 | var index = 0
160 | try await withThrowingTaskGroup(of: (Int, CGImage).self) { group in
161 | var pending = 0
162 | for try await result in generatorRef.images(for: times) {
| `- note: closure captures non-Sendable 'generatorRef'
163 | try Task.checkCancellation()
164 | guard case .success(_, let image, let actualTime) = result else {
[99/106] Compiling MosaicKit PreviewExportDescription.swift
[100/106] Compiling MosaicKit PreviewGenerationProgress.swift
[101/106] Compiling MosaicKit VideoFormat.swift
[102/106] Compiling MosaicKit VideoInput.swift
[103/106] Compiling MosaicKit MetalImageProcessor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/MosaicGeneratorCoordinator.swift:669:41: error: sending 'describe' risks causing data races [#SendingRisksDataRace]
638 |
639 | let total = items.count
640 | return try await withThrowingTaskGroup(of: MosaicGenerationResult.self) { group in
| `- note: access can happen concurrently
641 | var results: [MosaicGenerationResult] = []
642 | var successCount = 0
:
667 | }
668 |
669 | let name = describe(item)
| |- error: sending 'describe' risks causing data races [#SendingRisksDataRace]
| `- note: 'self'-isolated 'describe' is captured by a actor-isolated closure. actor-isolated uses in closure may race against later actor-isolated uses
670 | // Stop dequeuing if cancelAllGenerations() arrived after this batch started
671 | if batchEpoch != epoch {
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[104/106] Compiling MosaicKit MetalMosaicGenerator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/MosaicGeneratorCoordinator.swift:669:41: error: sending 'describe' risks causing data races [#SendingRisksDataRace]
638 |
639 | let total = items.count
640 | return try await withThrowingTaskGroup(of: MosaicGenerationResult.self) { group in
| `- note: access can happen concurrently
641 | var results: [MosaicGenerationResult] = []
642 | var successCount = 0
:
667 | }
668 |
669 | let name = describe(item)
| |- error: sending 'describe' risks causing data races [#SendingRisksDataRace]
| `- note: 'self'-isolated 'describe' is captured by a actor-isolated closure. actor-isolated uses in closure may race against later actor-isolated uses
670 | // Stop dequeuing if cancelAllGenerations() arrived after this batch started
671 | if batchEpoch != epoch {
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[105/106] Compiling MosaicKit MosaicGeneratorCoordinator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/MosaicGeneratorCoordinator.swift:669:41: error: sending 'describe' risks causing data races [#SendingRisksDataRace]
638 |
639 | let total = items.count
640 | return try await withThrowingTaskGroup(of: MosaicGenerationResult.self) { group in
| `- note: access can happen concurrently
641 | var results: [MosaicGenerationResult] = []
642 | var successCount = 0
:
667 | }
668 |
669 | let name = describe(item)
| |- error: sending 'describe' risks causing data races [#SendingRisksDataRace]
| `- note: 'self'-isolated 'describe' is captured by a actor-isolated closure. actor-isolated uses in closure may race against later actor-isolated uses
670 | // Stop dequeuing if cancelAllGenerations() arrived after this batch started
671 | if batchEpoch != epoch {
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
[106/106] Compiling MosaicKit MosaicGeneratorProtocol.swift
/Users/admin/builder/spi-builder-workspace/Sources/Processing/MosaicGeneratorCoordinator.swift:669:41: error: sending 'describe' risks causing data races [#SendingRisksDataRace]
638 |
639 | let total = items.count
640 | return try await withThrowingTaskGroup(of: MosaicGenerationResult.self) { group in
| `- note: access can happen concurrently
641 | var results: [MosaicGenerationResult] = []
642 | var successCount = 0
:
667 | }
668 |
669 | let name = describe(item)
| |- error: sending 'describe' risks causing data races [#SendingRisksDataRace]
| `- note: 'self'-isolated 'describe' is captured by a actor-isolated closure. actor-isolated uses in closure may race against later actor-isolated uses
670 | // Stop dequeuing if cancelAllGenerations() arrived after this batch started
671 | if batchEpoch != epoch {
[#SendingRisksDataRace]: <https://docs.swift.org/compiler/documentation/diagnostics/sending-risks-data-race>
Fetching https://github.com/DenDmitriev/DominantColors.git
Fetching https://github.com/samsonjs/SJSAssetExportSession.git
Fetching https://github.com/awxkee/webp.swift.git
[1/440] Fetching sjsassetexportsession
[2/613] Fetching sjsassetexportsession, webp.swift
[175/1624] Fetching sjsassetexportsession, webp.swift, dominantcolors
Fetched https://github.com/samsonjs/SJSAssetExportSession.git from cache (2.55s)
Fetched https://github.com/awxkee/webp.swift.git from cache (2.56s)
Fetched https://github.com/DenDmitriev/DominantColors.git from cache (2.56s)
Computing version for https://github.com/awxkee/webp.swift.git
Computed https://github.com/awxkee/webp.swift.git at 1.1.2 (5.59s)
Fetching https://github.com/awxkee/libwebp-ios.git
[1/556] Fetching libwebp-ios
Fetched https://github.com/awxkee/libwebp-ios.git from cache (2.11s)
Computing version for https://github.com/samsonjs/SJSAssetExportSession.git
Computed https://github.com/samsonjs/SJSAssetExportSession.git at 0.4.0 (2.69s)
Computing version for https://github.com/awxkee/libwebp-ios.git
Computed https://github.com/awxkee/libwebp-ios.git at 1.1.1 (0.74s)
Computing version for https://github.com/DenDmitriev/DominantColors.git
Computed https://github.com/DenDmitriev/DominantColors.git at 1.2.2 (0.54s)
Creating working copy for https://github.com/awxkee/libwebp-ios.git
Working copy of https://github.com/awxkee/libwebp-ios.git resolved at 1.1.1
Creating working copy for https://github.com/samsonjs/SJSAssetExportSession.git
Working copy of https://github.com/samsonjs/SJSAssetExportSession.git resolved at 0.4.0
Creating working copy for https://github.com/DenDmitriev/DominantColors.git
Working copy of https://github.com/DenDmitriev/DominantColors.git resolved at 1.2.2
Creating working copy for https://github.com/awxkee/webp.swift.git
Working copy of https://github.com/awxkee/webp.swift.git resolved at 1.1.2
BUILD FAILURE 6.2 macosSpm