Build Information
Successful build of KadrUI, reference v0.21.0 (32e974), with Swift 6.2 for macOS (SPM) on 31 Aug 2026 17:01:04 UTC.
Swift 6 data race errors: 0
Build Command
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 5.0.2
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/SteliyanH/kadr-ui.git
Reference: v0.21.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/SteliyanH/kadr-ui
* tag v0.21.0 -> FETCH_HEAD
HEAD is now at 32e974b Merge pull request #143 from SteliyanH/develop
Cloned https://github.com/SteliyanH/kadr-ui.git
Revision (git rev-parse @):
32e974b57783100174adb88f31066fe10c8f54f7
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/SteliyanH/kadr-ui.git at v0.21.0
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.2
Building package at path: $PWD
https://github.com/SteliyanH/kadr-ui.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-26.3.0.app xcrun swift build --arch arm64
Building for debugging...
[0/3] Write sources
[2/3] Write swift-version--3CB7CFEC50E0D141.txt
[4/67] Emitting module Kadr
[5/74] Compiling Kadr FilterID.swift
[6/74] Compiling Kadr Frame.swift
[7/74] Compiling Kadr LayerID.swift
[8/74] Compiling Kadr Layout.swift
[9/74] Compiling Kadr Position.swift
[10/74] Compiling Kadr Size.swift
[11/74] Compiling Kadr Transform.swift
[12/74] Compiling Kadr Animatable.swift
[13/74] Compiling Kadr Animation.swift
[14/74] Compiling Kadr TimingFunction.swift
[15/74] Compiling Kadr AudioBuilder.swift
[16/74] Compiling Kadr AudioTimePitchAlgorithm.swift
[17/74] Compiling Kadr AudioTrack.swift
[18/74] Compiling Kadr BackgroundMusic.swift
[19/74] Compiling Kadr TextOverlay.swift
[20/74] Compiling Kadr TextShadow.swift
[21/74] Compiling Kadr TextStroke.swift
[22/74] Compiling Kadr TextStyle.swift
[23/74] Compiling Kadr Watermark.swift
[24/74] Compiling Kadr PlatformTypes.swift
[25/74] Compiling Kadr Timecode.swift
[26/74] Compiling Kadr Clip+AnimationClearing.swift
[27/74] Compiling Kadr Clip+FilterID.swift
[28/74] Compiling Kadr Clip+Speed.swift
[29/74] Compiling Kadr ImageOverlay.swift
[30/74] Compiling Kadr Overlay.swift
[31/74] Compiling Kadr StickerOverlay.swift
[32/74] Compiling Kadr TextAnimation.swift
[33/74] Compiling Kadr ChromaKey.swift
[34/74] Compiling Kadr Filter.swift
[35/74] Compiling Kadr FilterKind.swift
[36/74] Compiling Kadr LUT.swift
[37/74] Compiling Kadr Anchor.swift
[38/74] Compiling Kadr ClipID.swift
[39/74] Compiling Kadr CropRegion.swift
[40/74] Compiling Kadr CancellationToken.swift
[41/74] Compiling Kadr CompositionBuilder.swift
[42/74] Compiling Kadr Compositor.swift
[43/74] Compiling Kadr CropCompositor.swift
[44/74] Compiling Kadr ExportEngine.swift
[45/74] Compiling Kadr FilterProcessor.swift
[46/74] Compiling Kadr ImageEncoder.swift
[47/74] Compiling Kadr Caption.swift
[48/74] Compiling Kadr Clip.swift
[49/74] Compiling Kadr ImageClip+Color.swift
[50/74] Compiling Kadr ImageClip.swift
[51/74] Compiling Kadr SampleMedia.swift
[52/74] Compiling Kadr TitleSequence.swift
[53/74] Compiling Kadr Track.swift
[54/74] Compiling Kadr KadrVideoCompositor.swift
[55/74] Compiling Kadr MaskCompositor.swift
[56/74] Compiling Kadr MultiInputCompositor.swift
[57/74] Compiling Kadr OverlayRenderer.swift
[58/74] Compiling Kadr PlaybackComposer.swift
[59/74] Compiling Kadr ReverseProcessor.swift
[60/74] Compiling Kadr SpeedCurveSampler.swift
[61/74] Compiling Kadr ThumbnailGenerator.swift
[62/74] Compiling Kadr KadrError+LocalizedError.swift
[63/74] Compiling Kadr KadrError.swift
[64/74] Compiling Kadr ExportProgress.swift
[65/74] Compiling Kadr ExportSettings.swift
[66/74] Compiling Kadr Exporter.swift
[67/74] Compiling Kadr Preset.swift
[68/74] Compiling Kadr Transition.swift
[69/74] Compiling Kadr Video.swift
[70/74] Compiling Kadr VideoBuilder.swift
[71/74] Compiling Kadr VideoClip.swift
[72/74] Compiling Kadr AssetWriterExporter.swift
[73/74] Compiling Kadr AudioWaveform.swift
[74/74] Compiling Kadr AudioWaveformLoader.swift
[75/96] Emitting module KadrUI
[76/98] Compiling KadrUI VideoSampling.swift
[77/98] Compiling KadrUI ZoomSnapThreshold.swift
[78/98] Compiling KadrUI ClipSplitter.swift
[79/98] Compiling KadrUI InspectorPanel.swift
[80/98] Compiling KadrUI KadrAppearance.swift
[81/98] Compiling KadrUI TimelineZoom.swift
[82/98] Compiling KadrUI TransitionPicker.swift
[83/98] Compiling KadrUI ThumbnailStrip.swift
[84/98] Compiling KadrUI TimelineEvents.swift
[85/98] Compiling KadrUI OverlayInspector.swift
[86/98] Compiling KadrUI OverlayKeyframeEditor.swift
[87/98] Compiling KadrUI KadrUI.swift
[88/98] Compiling KadrUI KeyframeEditor.swift
[89/98] Compiling KadrUI OverlayHost.swift
[90/98] Compiling KadrUI AnimatedTextLayerView.swift
[91/98] Compiling KadrUI AudioWaveform.swift
[92/98] Compiling KadrUI CaptionEditor.swift
[93/98] Compiling KadrUI PlatformBridge.swift
[94/98] Compiling KadrUI SpeedCurveEditor.swift
[95/98] Compiling KadrUI TransportBand.swift
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:179:17: warning: main actor-isolated property 'isSeekingFromBinding' can not be mutated from a Sendable closure
79 | /// Guards the feedback loop between `currentTime` and the observer: without
80 | /// it, every tick writes the binding, which seeks, which ticks.
81 | @State private var isSeekingFromBinding = false
| `- note: mutation of this property is only permitted within the actor
82 |
83 | /// Create a preview for `video`.
:
177 | isSeekingFromBinding = true
178 | player.seek(to: time, toleranceBefore: .zero, toleranceAfter: .zero) { _ in
179 | isSeekingFromBinding = false
| `- warning: main actor-isolated property 'isSeekingFromBinding' can not be mutated from a Sendable closure
180 | }
181 | }
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:217:20: warning: main actor-isolated property 'isSeekingFromBinding' can not be referenced from a Sendable closure
79 | /// Guards the feedback loop between `currentTime` and the observer: without
80 | /// it, every tick writes the binding, which seeks, which ticks.
81 | @State private var isSeekingFromBinding = false
| `- note: property declared here
82 |
83 | /// Create a preview for `video`.
:
215 | // Skip the tick that our own seek produced, or the binding would
216 | // fight the observer.
217 | guard !isSeekingFromBinding else { return }
| `- warning: main actor-isolated property 'isSeekingFromBinding' can not be referenced from a Sendable closure
218 |
219 | if let currentTime, currentTime.wrappedValue != time {
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:220:17: warning: main actor-isolated property 'lastPushedTime' can not be mutated from a Sendable closure
66 | /// which is what allows the seek threshold below to be frame-scale instead
67 | /// of a blunt 0.05s — see `seekEpsilon`.
68 | @State private var lastPushedTime: CMTime?
| `- note: mutation of this property is only permitted within the actor
69 |
70 | /// Attached only when sampling is requested. An `AVPlayerItemVideoOutput`
:
218 |
219 | if let currentTime, currentTime.wrappedValue != time {
220 | lastPushedTime = time
| `- warning: main actor-isolated property 'lastPushedTime' can not be mutated from a Sendable closure
221 | currentTime.wrappedValue = time
222 | }
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:227:20: warning: main actor-isolated property 'loopBox' can not be referenced from a Sendable closure
58 | /// binding a loop toggle to `loops:` saw it do nothing until something else
59 | /// happened to rebuild the player.
60 | @State private var loopBox = LoopBox()
| `- note: property declared here
61 |
62 | /// The last position this view pushed into `currentTime` itself.
:
225 | let atEnd = time >= item.duration
226 | if atEnd {
227 | if loopBox.loops {
| `- warning: main actor-isolated property 'loopBox' can not be referenced from a Sendable closure
228 | player.seek(to: .zero)
229 | player.play()
[96/98] Compiling KadrUI VideoPreview.swift
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:179:17: warning: main actor-isolated property 'isSeekingFromBinding' can not be mutated from a Sendable closure
79 | /// Guards the feedback loop between `currentTime` and the observer: without
80 | /// it, every tick writes the binding, which seeks, which ticks.
81 | @State private var isSeekingFromBinding = false
| `- note: mutation of this property is only permitted within the actor
82 |
83 | /// Create a preview for `video`.
:
177 | isSeekingFromBinding = true
178 | player.seek(to: time, toleranceBefore: .zero, toleranceAfter: .zero) { _ in
179 | isSeekingFromBinding = false
| `- warning: main actor-isolated property 'isSeekingFromBinding' can not be mutated from a Sendable closure
180 | }
181 | }
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:217:20: warning: main actor-isolated property 'isSeekingFromBinding' can not be referenced from a Sendable closure
79 | /// Guards the feedback loop between `currentTime` and the observer: without
80 | /// it, every tick writes the binding, which seeks, which ticks.
81 | @State private var isSeekingFromBinding = false
| `- note: property declared here
82 |
83 | /// Create a preview for `video`.
:
215 | // Skip the tick that our own seek produced, or the binding would
216 | // fight the observer.
217 | guard !isSeekingFromBinding else { return }
| `- warning: main actor-isolated property 'isSeekingFromBinding' can not be referenced from a Sendable closure
218 |
219 | if let currentTime, currentTime.wrappedValue != time {
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:220:17: warning: main actor-isolated property 'lastPushedTime' can not be mutated from a Sendable closure
66 | /// which is what allows the seek threshold below to be frame-scale instead
67 | /// of a blunt 0.05s — see `seekEpsilon`.
68 | @State private var lastPushedTime: CMTime?
| `- note: mutation of this property is only permitted within the actor
69 |
70 | /// Attached only when sampling is requested. An `AVPlayerItemVideoOutput`
:
218 |
219 | if let currentTime, currentTime.wrappedValue != time {
220 | lastPushedTime = time
| `- warning: main actor-isolated property 'lastPushedTime' can not be mutated from a Sendable closure
221 | currentTime.wrappedValue = time
222 | }
/Users/admin/builder/spi-builder-workspace/Sources/KadrUI/VideoPreview.swift:227:20: warning: main actor-isolated property 'loopBox' can not be referenced from a Sendable closure
58 | /// binding a loop toggle to `loops:` saw it do nothing until something else
59 | /// happened to rebuild the player.
60 | @State private var loopBox = LoopBox()
| `- note: property declared here
61 |
62 | /// The last position this view pushed into `currentTime` itself.
:
225 | let atEnd = time >= item.duration
226 | if atEnd {
227 | if loopBox.loops {
| `- warning: main actor-isolated property 'loopBox' can not be referenced from a Sendable closure
228 | player.seek(to: .zero)
229 | player.play()
[97/98] Compiling KadrUI TimelineLanes.swift
[98/98] Compiling KadrUI TimelineView.swift
Build complete! (54.17s)
Fetching https://github.com/nalexn/ViewInspector
Fetching https://github.com/SteliyanH/kadr.git
Fetching https://github.com/pointfreeco/swift-snapshot-testing
[1/2034] Fetching kadr
[998/15028] Fetching kadr, viewinspector
[1722/31420] Fetching kadr, viewinspector, swift-snapshot-testing
Fetched https://github.com/pointfreeco/swift-snapshot-testing from cache (17.57s)
Fetched https://github.com/nalexn/ViewInspector from cache (17.57s)
Fetched https://github.com/SteliyanH/kadr.git from cache (17.57s)
Computing version for https://github.com/SteliyanH/kadr.git
Computed https://github.com/SteliyanH/kadr.git at 1.1.0 (18.14s)
Computing version for https://github.com/nalexn/ViewInspector
Computed https://github.com/nalexn/ViewInspector at 0.10.3 (0.55s)
Computing version for https://github.com/pointfreeco/swift-snapshot-testing
Computed https://github.com/pointfreeco/swift-snapshot-testing at 1.19.4 (0.56s)
Fetching https://github.com/swiftlang/swift-syntax
Fetching https://github.com/pointfreeco/swift-custom-dump
[1/5701] Fetching swift-custom-dump
[5702/85074] Fetching swift-custom-dump, swift-syntax
Fetched https://github.com/pointfreeco/swift-custom-dump from cache (6.38s)
Fetched https://github.com/swiftlang/swift-syntax from cache (6.38s)
Computing version for https://github.com/pointfreeco/swift-custom-dump
Computed https://github.com/pointfreeco/swift-custom-dump at 1.7.3 (6.98s)
Fetching https://github.com/pointfreeco/xctest-dynamic-overlay
[1/2727] Fetching xctest-dynamic-overlay
Fetched https://github.com/pointfreeco/xctest-dynamic-overlay from cache (1.49s)
Computing version for https://github.com/pointfreeco/xctest-dynamic-overlay
Computed https://github.com/pointfreeco/xctest-dynamic-overlay at 1.13.1 (4.44s)
Computing version for https://github.com/swiftlang/swift-syntax
Computed https://github.com/swiftlang/swift-syntax at 603.0.2 (2.19s)
Creating working copy for https://github.com/SteliyanH/kadr.git
Working copy of https://github.com/SteliyanH/kadr.git resolved at 1.1.0
Creating working copy for https://github.com/swiftlang/swift-syntax
Working copy of https://github.com/swiftlang/swift-syntax resolved at 603.0.2
Creating working copy for https://github.com/pointfreeco/xctest-dynamic-overlay
Working copy of https://github.com/pointfreeco/xctest-dynamic-overlay resolved at 1.13.1
Creating working copy for https://github.com/pointfreeco/swift-snapshot-testing
Working copy of https://github.com/pointfreeco/swift-snapshot-testing resolved at 1.19.4
Creating working copy for https://github.com/nalexn/ViewInspector
Working copy of https://github.com/nalexn/ViewInspector resolved at 0.10.3
Creating working copy for https://github.com/pointfreeco/swift-custom-dump
Working copy of https://github.com/pointfreeco/swift-custom-dump resolved at 1.7.3
Build complete.
{
"dependencies" : [
{
"identity" : "kadr",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/SteliyanH/kadr.git"
},
{
"identity" : "swift-snapshot-testing",
"requirement" : {
"range" : [
{
"lower_bound" : "1.18.0",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/pointfreeco/swift-snapshot-testing"
},
{
"identity" : "viewinspector",
"requirement" : {
"range" : [
{
"lower_bound" : "0.10.0",
"upper_bound" : "1.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/nalexn/ViewInspector"
}
],
"manifest_display_name" : "KadrUI",
"name" : "KadrUI",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "17.0"
},
{
"name" : "macos",
"version" : "14.0"
},
{
"name" : "tvos",
"version" : "17.0"
},
{
"name" : "visionos",
"version" : "1.0"
}
],
"products" : [
{
"name" : "KadrUI",
"targets" : [
"KadrUI"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "KadrUITests",
"module_type" : "SwiftTarget",
"name" : "KadrUITests",
"path" : "Tests/KadrUITests",
"product_dependencies" : [
"SnapshotTesting",
"ViewInspector"
],
"sources" : [
"AccessibilityTests.swift",
"AnimatedTextLayerViewTests.swift",
"AudioWaveformShapeTests.swift",
"AuthoringSurfaceTests.swift",
"CallbackEventStructsTests.swift",
"CaptionEditorTests.swift",
"ClipSplitterTests.swift",
"CrossfadeBoundariesTests.swift",
"FixedCenterPlayheadTests.swift",
"GestureWiringTests.swift",
"InspectorPanelTests.swift",
"InspectorSectionsAndTextEffectsTests.swift",
"KadrAppearanceTests.swift",
"KadrUITests.swift",
"KeyframeEditorTests.swift",
"MultiSelectAndLongPressTests.swift",
"OnClipDragSnapTests.swift",
"OverlayGestureTests.swift",
"OverlayHostHelpersTests.swift",
"OverlayHostMultiSelectTests.swift",
"OverlayHostTests.swift",
"OverlayInspectorTests.swift",
"SnapshotStrategy+macOSSwiftUI.swift",
"SnapshotTests.swift",
"SpeedCurveEditorTests.swift",
"ThumbnailStripTests.swift",
"TimelineLanesTests.swift",
"TimelineMetricsTests.swift",
"TimelineScrollAndClipA11yTests.swift",
"TimelineViewTests.swift",
"TimelineZoomTests.swift",
"TransportBandTests.swift",
"VideoPreviewIdentityAndSeekTests.swift",
"VideoPreviewPlaybackTests.swift",
"VideoPreviewTests.swift",
"VideoSamplingTests.swift",
"ZoomSnapThresholdTests.swift"
],
"target_dependencies" : [
"KadrUI"
],
"type" : "test"
},
{
"c99name" : "KadrUI",
"module_type" : "SwiftTarget",
"name" : "KadrUI",
"path" : "Sources/KadrUI",
"product_dependencies" : [
"Kadr"
],
"product_memberships" : [
"KadrUI"
],
"sources" : [
"AnimatedTextLayerView.swift",
"AudioWaveform.swift",
"CaptionEditor.swift",
"ClipSplitter.swift",
"InspectorPanel.swift",
"KadrAppearance.swift",
"KadrUI.swift",
"KeyframeEditor.swift",
"OverlayHost.swift",
"OverlayInspector.swift",
"OverlayKeyframeEditor.swift",
"PlatformBridge.swift",
"SpeedCurveEditor.swift",
"ThumbnailStrip.swift",
"TimelineEvents.swift",
"TimelineLanes.swift",
"TimelineView.swift",
"TimelineZoom.swift",
"TransitionPicker.swift",
"TransportBand.swift",
"VideoPreview.swift",
"VideoSampling.swift",
"ZoomSnapThreshold.swift"
],
"type" : "library"
}
],
"tools_version" : "6.0"
}
Done.