Build Information
Successful build of YouTubeKit, reference 0.2.6 (e7dbaa
), with Swift 6.1 for macOS (SPM) on 30 Apr 2025 09:24:59 UTC.
Swift 6 data race errors: 0
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.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/alexeichhorn/YouTubeKit.git
Reference: 0.2.6
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/alexeichhorn/YouTubeKit
* tag 0.2.6 -> FETCH_HEAD
HEAD is now at e7dbaa3 temporarily disabled some cipher extraction that was mostly unused
Cloned https://github.com/alexeichhorn/YouTubeKit.git
Revision (git rev-parse @):
e7dbaa332ff190e85241bb90e9a26f3ce4993458
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/alexeichhorn/YouTubeKit.git at 0.2.6
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/alexeichhorn/YouTubeKit.git
https://github.com/alexeichhorn/YouTubeKit.git
{
"dependencies" : [
],
"manifest_display_name" : "YouTubeKit",
"name" : "YouTubeKit",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "YouTubeKit",
"targets" : [
"YouTubeKit"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "YouTubeKitTests",
"module_type" : "SwiftTarget",
"name" : "YouTubeKitTests",
"path" : "Tests/YouTubeKitTests",
"sources" : [
"CipherTests.swift",
"ExtensionTests.swift",
"Extensions.swift",
"ExtractionTests.swift",
"ITagsTests.swift",
"ParserTests.swift",
"PlayabilityTests.swift",
"YouTubeKitTests.swift"
],
"target_dependencies" : [
"YouTubeKit"
],
"type" : "test"
},
{
"c99name" : "YouTubeKit",
"module_type" : "SwiftTarget",
"name" : "YouTubeKit",
"path" : "Sources/YouTubeKit",
"product_memberships" : [
"YouTubeKit"
],
"sources" : [
"Cipher.swift",
"Errors.swift",
"Extensions/AsyncCompatibility.swift",
"Extensions/Concurrency.swift",
"Extensions/Foundation.swift",
"Extensions/Lazy.swift",
"Extensions/Logging.swift",
"Extensions/RegularExpression.swift",
"Extensions/Retry.swift",
"Extensions/URLSessionDelegates.swift",
"Extensions/WebSocket.swift",
"Extraction.swift",
"InnerTube.swift",
"Models/Codecs.swift",
"Models/FileExtension.swift",
"Models/ITag.swift",
"Models/Livestream.swift",
"Models/Method.swift",
"Models/Stream.swift",
"Models/StreamQuery.swift",
"Models/YouTubeMetadata.swift",
"Parser.swift",
"Remote/Models/RemoteStream.swift",
"Remote/RemoteYouTubeClient.swift",
"YouTube.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/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/26] Emitting module YouTubeKit
[4/28] Compiling YouTubeKit ITag.swift
[5/28] Compiling YouTubeKit Livestream.swift
[6/28] Compiling YouTubeKit RemoteYouTubeClient.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/YouTube.swift:339:19: warning: 'catch' block is unreachable because no errors are thrown in 'do' block
337 | do {
338 | return nil //try await Extraction.getVideoInfo(fromHTML: watchHTML) // (temporarily disabled)
339 | } catch let error {
| `- warning: 'catch' block is unreachable because no errors are thrown in 'do' block
340 | os_log("Couldn't extract video info from main watch html: %{public}@", log: log, type: .debug, error.localizedDescription)
341 | return nil
[7/28] Compiling YouTubeKit YouTube.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/YouTube.swift:339:19: warning: 'catch' block is unreachable because no errors are thrown in 'do' block
337 | do {
338 | return nil //try await Extraction.getVideoInfo(fromHTML: watchHTML) // (temporarily disabled)
339 | } catch let error {
| `- warning: 'catch' block is unreachable because no errors are thrown in 'do' block
340 | os_log("Couldn't extract video info from main watch html: %{public}@", log: log, type: .debug, error.localizedDescription)
341 | return nil
[8/28] Compiling YouTubeKit InnerTube.swift
[9/28] Compiling YouTubeKit Codecs.swift
[10/28] Compiling YouTubeKit FileExtension.swift
[11/28] Compiling YouTubeKit Method.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:44:15: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
42 |
43 | let codecs: [String]
44 | (self.mimeType, codecs) = try Extraction.mimeTypeCodec(format.mimeType)
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:46:39: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
44 | (self.mimeType, codecs) = try Extraction.mimeTypeCodec(format.mimeType)
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
47 | self.type = mimeTypeComponents.first ?? ""
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:47:14: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
47 | self.type = mimeTypeComponents.first ?? ""
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
49 |
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:48:14: warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
47 | self.type = mimeTypeComponents.first ?? ""
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
| `- warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
49 |
50 | self.fileExtension = FileExtension(mimeType: self.mimeType)
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:50:59: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
49 |
50 | self.fileExtension = FileExtension(mimeType: self.mimeType)
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
51 |
52 | // codec decoding
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:57:21: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
55 | self.audioCodec = AudioCodec(rawValue: codecs[1])
56 | } else if let codec = codecs.first {
57 | if self.type == "audio" {
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
58 | self.audioCodec = AudioCodec(rawValue: codec)
59 | self.videoCodec = nil
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:94:14: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
92 |
93 | // Backward compatibility for deprecated `subtype` and `mimeType`
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
95 | self.subtype = ""
96 | self.mimeType = ""
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:95:14: warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
93 | // Backward compatibility for deprecated `subtype` and `mimeType`
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
95 | self.subtype = ""
| `- warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
96 | self.mimeType = ""
97 | }
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:96:14: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
95 | self.subtype = ""
96 | self.mimeType = ""
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
97 | }
98 |
[12/28] Compiling YouTubeKit Stream.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:44:15: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
42 |
43 | let codecs: [String]
44 | (self.mimeType, codecs) = try Extraction.mimeTypeCodec(format.mimeType)
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:46:39: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
44 | (self.mimeType, codecs) = try Extraction.mimeTypeCodec(format.mimeType)
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
47 | self.type = mimeTypeComponents.first ?? ""
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:47:14: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
45 |
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
47 | self.type = mimeTypeComponents.first ?? ""
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
49 |
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:48:14: warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
46 | let mimeTypeComponents = self.mimeType.components(separatedBy: "/")
47 | self.type = mimeTypeComponents.first ?? ""
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
| `- warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
49 |
50 | self.fileExtension = FileExtension(mimeType: self.mimeType)
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:50:59: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
48 | self.subtype = mimeTypeComponents[safe: 1] ?? ""
49 |
50 | self.fileExtension = FileExtension(mimeType: self.mimeType)
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
51 |
52 | // codec decoding
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:57:21: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
55 | self.audioCodec = AudioCodec(rawValue: codecs[1])
56 | } else if let codec = codecs.first {
57 | if self.type == "audio" {
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
58 | self.audioCodec = AudioCodec(rawValue: codec)
59 | self.videoCodec = nil
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:94:14: warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
92 |
93 | // Backward compatibility for deprecated `subtype` and `mimeType`
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
| `- warning: 'type' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
95 | self.subtype = ""
96 | self.mimeType = ""
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:95:14: warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
93 | // Backward compatibility for deprecated `subtype` and `mimeType`
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
95 | self.subtype = ""
| `- warning: 'subtype' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
96 | self.mimeType = ""
97 | }
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Models/Stream.swift:96:14: warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
94 | self.type = (remoteStream.videoCodec != nil) ? "video" : "audio"
95 | self.subtype = ""
96 | self.mimeType = ""
| `- warning: 'mimeType' is deprecated: Might be empty if using remote fetching method. Use `videoCodec`, `audioCodec` or `fileExtension` instead.
97 | }
98 |
[13/28] Compiling YouTubeKit StreamQuery.swift
[14/28] Compiling YouTubeKit YouTubeMetadata.swift
[15/28] Compiling YouTubeKit Parser.swift
[16/28] Compiling YouTubeKit RemoteStream.swift
[17/28] Compiling YouTubeKit Logging.swift
[18/28] Compiling YouTubeKit RegularExpression.swift
[19/28] Compiling YouTubeKit Retry.swift
[20/28] Compiling YouTubeKit Concurrency.swift
[21/28] Compiling YouTubeKit Foundation.swift
[22/28] Compiling YouTubeKit Lazy.swift
[23/28] Compiling YouTubeKit URLSessionDelegates.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:375:25: warning: code after 'continue' will never be executed
373 | continue // Skip the rest of the code as we are removing this stream
374 |
375 | let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
| `- warning: code after 'continue' will never be executed
376 |
377 | os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[24/28] Compiling YouTubeKit WebSocket.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:375:25: warning: code after 'continue' will never be executed
373 | continue // Skip the rest of the code as we are removing this stream
374 |
375 | let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
| `- warning: code after 'continue' will never be executed
376 |
377 | os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[25/28] Compiling YouTubeKit Extraction.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:375:25: warning: code after 'continue' will never be executed
373 | continue // Skip the rest of the code as we are removing this stream
374 |
375 | let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
| `- warning: code after 'continue' will never be executed
376 |
377 | os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[26/28] Compiling YouTubeKit Cipher.swift
[27/28] Compiling YouTubeKit Errors.swift
[28/28] Compiling YouTubeKit AsyncCompatibility.swift
Build complete! (6.72s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "YouTubeKit",
"name" : "YouTubeKit",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "YouTubeKit",
"targets" : [
"YouTubeKit"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "YouTubeKitTests",
"module_type" : "SwiftTarget",
"name" : "YouTubeKitTests",
"path" : "Tests/YouTubeKitTests",
"sources" : [
"CipherTests.swift",
"ExtensionTests.swift",
"Extensions.swift",
"ExtractionTests.swift",
"ITagsTests.swift",
"ParserTests.swift",
"PlayabilityTests.swift",
"YouTubeKitTests.swift"
],
"target_dependencies" : [
"YouTubeKit"
],
"type" : "test"
},
{
"c99name" : "YouTubeKit",
"module_type" : "SwiftTarget",
"name" : "YouTubeKit",
"path" : "Sources/YouTubeKit",
"product_memberships" : [
"YouTubeKit"
],
"sources" : [
"Cipher.swift",
"Errors.swift",
"Extensions/AsyncCompatibility.swift",
"Extensions/Concurrency.swift",
"Extensions/Foundation.swift",
"Extensions/Lazy.swift",
"Extensions/Logging.swift",
"Extensions/RegularExpression.swift",
"Extensions/Retry.swift",
"Extensions/URLSessionDelegates.swift",
"Extensions/WebSocket.swift",
"Extraction.swift",
"InnerTube.swift",
"Models/Codecs.swift",
"Models/FileExtension.swift",
"Models/ITag.swift",
"Models/Livestream.swift",
"Models/Method.swift",
"Models/Stream.swift",
"Models/StreamQuery.swift",
"Models/YouTubeMetadata.swift",
"Parser.swift",
"Remote/Models/RemoteStream.swift",
"Remote/RemoteYouTubeClient.swift",
"YouTube.swift"
],
"type" : "library"
}
],
"tools_version" : "5.8"
}
Done.