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 YouTubeKit, reference 0.2.4 (c48829), with Swift 6.0 for macOS (SPM) on 8 Nov 2024 19:37:10 UTC.

Swift 6 data race errors: 0

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete

Build Log

========================================
RunAll
========================================
Builder version: 4.57.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/alexeichhorn/YouTubeKit.git
Reference: 0.2.4
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/alexeichhorn/YouTubeKit
 * tag               0.2.4      -> FETCH_HEAD
HEAD is now at c488296 fxied ParserTests
Cloned https://github.com/alexeichhorn/YouTubeKit.git
Revision (git rev-parse @):
c4882966210b5d116a90c532f89b52448f720f0f
SPI manifest file found: $PWD/.spi.yml
SUCCESS checkout https://github.com/alexeichhorn/YouTubeKit.git at 0.2.4
========================================
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": "youtubekit",
      "name": "YouTubeKit",
      "url": "https://github.com/alexeichhorn/YouTubeKit.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/YouTubeKit",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/alexeichhorn/YouTubeKit.git
[1/1031] Fetching youtubekit
Fetched https://github.com/alexeichhorn/YouTubeKit.git from cache (0.94s)
Creating working copy for https://github.com/alexeichhorn/YouTubeKit.git
Working copy of https://github.com/alexeichhorn/YouTubeKit.git resolved at 0.2.4 (c488296)
warning: '.resolve-product-dependencies': dependency 'youtubekit' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $PWD
https://github.com/alexeichhorn/YouTubeKit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.1.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version--7754E27361AE5C74.txt
[3/26] Emitting module YouTubeKit
[4/26] Compiling YouTubeKit ITag.swift
[5/26] Compiling YouTubeKit Livestream.swift
[6/26] Compiling YouTubeKit StreamQuery.swift
[7/26] Compiling YouTubeKit YouTubeMetadata.swift
[8/26] Compiling YouTubeKit Concurrency.swift
[9/26] Compiling YouTubeKit Foundation.swift
[10/26] Compiling YouTubeKit Lazy.swift
[11/28] Compiling YouTubeKit InnerTube.swift
[12/28] Compiling YouTubeKit Codecs.swift
[13/28] Compiling YouTubeKit FileExtension.swift
[14/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 |
[15/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 |
[16/28] Compiling YouTubeKit URLSessionDelegates.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[17/28] Compiling YouTubeKit WebSocket.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[18/28] Compiling YouTubeKit Extraction.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[19/28] Compiling YouTubeKit Parser.swift
[20/28] Compiling YouTubeKit RemoteStream.swift
[21/28] Compiling YouTubeKit Logging.swift
[22/28] Compiling YouTubeKit RegularExpression.swift
[23/28] Compiling YouTubeKit Retry.swift
[24/28] Compiling YouTubeKit Cipher.swift
[25/28] Compiling YouTubeKit Errors.swift
[26/28] Compiling YouTubeKit AsyncCompatibility.swift
[27/28] Compiling YouTubeKit RemoteYouTubeClient.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/YouTube.swift:328:72: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
326 |
327 |             // try extracting video infos from watch html directly as well
328 |             let watchVideoInfoTask = Task<InnerTube.VideoInfo?, Never> { [log] in
    |                                                                        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
329 |                 do {
330 |                     return try await Extraction.getVideoInfo(fromHTML: watchHTML)
    |                                                                        `- note: closure captures 'self' which is accessible to code in the current task
331 |                 } catch let error {
332 |                     os_log("Couldn't extract video info from main watch html: %{public}@", log: log, type: .debug, error.localizedDescription)
[28/28] Compiling YouTubeKit YouTube.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/YouTube.swift:328:72: warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
326 |
327 |             // try extracting video infos from watch html directly as well
328 |             let watchVideoInfoTask = Task<InnerTube.VideoInfo?, Never> { [log] in
    |                                                                        `- warning: passing closure as a 'sending' parameter risks causing data races between code in the current task and concurrent execution of the closure; this is an error in the Swift 6 language mode
329 |                 do {
330 |                     return try await Extraction.getVideoInfo(fromHTML: watchHTML)
    |                                                                        `- note: closure captures 'self' which is accessible to code in the current task
331 |                 } catch let error {
332 |                     os_log("Couldn't extract video info from main watch html: %{public}@", log: log, type: .debug, error.localizedDescription)
Build complete! (17.21s)
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"
}
✅  Doc result (pending) reported
========================================
GenerateDocs
========================================
Generating docs at path:  $PWD/.docs/alexeichhorn/youtubekit/0.2.4
Repository:               alexeichhorn/YouTubeKit
Swift version used:       6.0
Target:                   YouTubeKit
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/swift-docc-render-artifact/.git/
From https://github.com/swiftlang/swift-docc-render-artifact
 * branch            88815688627177b9716a01ca41da19397bd30e47 -> FETCH_HEAD
HEAD is now at 8881568 Update the artifact
Extracting symbol information for 'YouTubeKit'...
Finished extracting symbol information for 'YouTubeKit'. (3.74s)
Building documentation for 'YouTubeKit'...
warning: Parameter 'allowOAuthCache' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:74:120-74:120
72 |     private let log = OSLog(YouTube.self)
73 |
74 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'allowOAuthCache' parameter
75 |     public init(videoID: String, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
76 |         self.videoID = videoID
warning: Parameter 'useOAuth' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:74:120-74:120
72 |     private let log = OSLog(YouTube.self)
73 |
74 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'useOAuth' parameter
75 |     public init(videoID: String, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
76 |         self.videoID = videoID
warning: Parameter 'videoID' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:74:120-74:120
72 |     private let log = OSLog(YouTube.self)
73 |
74 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'videoID' parameter
75 |     public init(videoID: String, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
76 |         self.videoID = videoID
warning: Parameter 'proxies' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:74:120-74:120
72 |     private let log = OSLog(YouTube.self)
73 |
74 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'proxies' parameter
75 |     public init(videoID: String, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
76 |         self.videoID = videoID
warning: Parameter 'proxies' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:88:120-88:120
86 |     }
87 |
88 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'proxies' parameter
89 |     public convenience init(url: URL, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
90 |         let videoID = Extraction.extractVideoID(from: url.absoluteString) ?? ""
warning: Parameter 'allowOAuthCache' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:88:120-88:120
86 |     }
87 |
88 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'allowOAuthCache' parameter
89 |     public convenience init(url: URL, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
90 |         let videoID = Extraction.extractVideoID(from: url.absoluteString) ?? ""
warning: Parameter 'useOAuth' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:88:120-88:120
86 |     }
87 |
88 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'useOAuth' parameter
89 |     public convenience init(url: URL, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
90 |         let videoID = Extraction.extractVideoID(from: url.absoluteString) ?? ""
warning: Parameter 'url' is missing documentation
  --> Sources/YouTubeKit/YouTube.swift:88:120-88:120
86 |     }
87 |
88 +     /// - parameter methods: Methods used to extract streams from the video - ordered by priority (Default: only local)
   |         ╰─suggestion: Document 'url' parameter
89 |     public convenience init(url: URL, proxies: [String: URL] = [:], useOAuth: Bool = false, allowOAuthCache: Bool = false, methods: [ExtractionMethod] = [.local]) {
90 |         let videoID = Extraction.extractVideoID(from: url.absoluteString) ?? ""Finished building documentation for 'YouTubeKit' (0.17s)
Generated documentation archive at:
  /Users/admin/builder/spi-builder-workspace/.docs/alexeichhorn/youtubekit/0.2.4
Fetching https://github.com/swiftlang/swift-docc-plugin
[1/2038] Fetching swift-docc-plugin
Fetched https://github.com/swiftlang/swift-docc-plugin from cache (1.24s)
Computing version for https://github.com/swiftlang/swift-docc-plugin
Computed https://github.com/swiftlang/swift-docc-plugin at 1.4.3 (2.73s)
Fetching https://github.com/swiftlang/swift-docc-symbolkit
[1/3178] Fetching swift-docc-symbolkit
Fetched https://github.com/swiftlang/swift-docc-symbolkit from cache (1.30s)
Computing version for https://github.com/swiftlang/swift-docc-symbolkit
Computed https://github.com/swiftlang/swift-docc-symbolkit at 1.0.0 (0.68s)
Creating working copy for https://github.com/swiftlang/swift-docc-symbolkit
Working copy of https://github.com/swiftlang/swift-docc-symbolkit resolved at 1.0.0
Creating working copy for https://github.com/swiftlang/swift-docc-plugin
Working copy of https://github.com/swiftlang/swift-docc-plugin resolved at 1.4.3
Building for debugging...
[0/8] Write sources
[3/8] Write snippet-extract-tool-entitlement.plist
[4/8] Write swift-version--7754E27361AE5C74.txt
[6/53] Emitting module SymbolKit
[7/57] Compiling SymbolKit DeclarationFragments.swift
[8/57] Compiling SymbolKit Fragment.swift
[9/57] Compiling SymbolKit FragmentKind.swift
[10/57] Compiling SymbolKit FunctionParameter.swift
[11/57] Compiling SymbolKit FunctionSignature.swift
[12/57] Compiling SymbolKit SemanticVersion.swift
[13/57] Compiling SymbolKit AccessControl.swift
[14/57] Compiling SymbolKit Availability.swift
[15/57] Compiling SymbolKit AvailabilityItem.swift
[16/57] Compiling SymbolKit Domain.swift
[17/57] Compiling SymbolKit Identifier.swift
[18/57] Compiling SymbolKit KindIdentifier.swift
[19/57] Compiling SymbolKit Location.swift
[20/57] Compiling SymbolKit Mutability.swift
[21/57] Compiling SymbolKit Mixin+Equals.swift
[22/57] Compiling SymbolKit Mixin+Hash.swift
[23/57] Compiling SymbolKit Mixin.swift
[24/57] Compiling SymbolKit LineList.swift
[25/57] Compiling SymbolKit Position.swift
[26/57] Compiling SymbolKit GenericConstraint.swift
[27/57] Compiling SymbolKit GenericParameter.swift
[28/57] Compiling SymbolKit Generics.swift
[29/57] Compiling SymbolKit Namespace.swift
[30/57] Compiling SymbolKit Relationship.swift
[31/57] Compiling SymbolKit RelationshipKind.swift
[32/57] Compiling SymbolKit SourceOrigin.swift
[33/57] Compiling SymbolKit GenericConstraints.swift
[34/57] Compiling SymbolKit Swift.swift
[35/57] Compiling SymbolKit Names.swift
[36/57] Compiling SymbolKit SPI.swift
[37/57] Compiling SymbolKit Snippet.swift
[38/57] Compiling SymbolKit Extension.swift
[39/57] Compiling SymbolKit SourceRange.swift
[40/57] Compiling SymbolKit Metadata.swift
[41/57] Compiling SymbolKit Module.swift
[42/57] Compiling SymbolKit OperatingSystem.swift
[43/57] Compiling SymbolKit Platform.swift
[44/57] Compiling SymbolKit Symbol.swift
[45/57] Compiling SymbolKit SymbolKind.swift
[46/57] Compiling SymbolKit SymbolGraph.swift
[47/57] Compiling SymbolKit GraphCollector.swift
[48/57] Compiling SymbolKit UnifiedSymbol+Encodable.swift
[49/57] Compiling SymbolKit UnifiedSymbol.swift
[50/57] Compiling SymbolKit UnifiedSymbolGraph+Encodable.swift
[51/57] Compiling SymbolKit UnifiedSymbolGraph.swift
[52/57] Compiling Snippets SnippetParser.swift
[53/57] Compiling Snippets Snippet.swift
[54/57] Emitting module Snippets
[55/61] Compiling snippet_extract URL+Status.swift
[56/61] Compiling snippet_extract SymbolGraph+Snippet.swift
[57/61] Emitting module snippet_extract
[58/61] Compiling snippet_extract SnippetBuildCommand.swift
[58/61] Write Objects.LinkFileList
[59/61] Linking snippet-extract-tool
[60/61] Applying snippet-extract-tool
Build of product 'snippet-extract' complete! (4.08s)
Building for debugging...
[0/1] Write swift-version--7754E27361AE5C74.txt
[2/25] Compiling YouTubeKit ITag.swift
[3/25] Compiling YouTubeKit Livestream.swift
[4/27] 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 |
[5/27] 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 |
[6/27] Compiling YouTubeKit Cipher.swift
[7/27] Compiling YouTubeKit Errors.swift
[8/27] Compiling YouTubeKit AsyncCompatibility.swift
[9/27] Compiling YouTubeKit URLSessionDelegates.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[10/27] Compiling YouTubeKit WebSocket.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[11/27] Compiling YouTubeKit Extraction.swift
/Users/admin/builder/spi-builder-workspace/Sources/YouTubeKit/Extraction.swift:321:25: warning: code after 'continue' will never be executed
319 |                         continue // Skip the rest of the code as we are removing this stream
320 |
321 |                         let signature = try cipher.value.getSignature(cipheredSignature: cipheredSignature)
    |                         `- warning: code after 'continue' will never be executed
322 |
323 |                         os_log("finished descrambling signature for itag=%{public}i", log: log, type: .debug, stream.itag)
[12/27] Compiling YouTubeKit StreamQuery.swift
[13/27] Compiling YouTubeKit YouTubeMetadata.swift
[14/27] Compiling YouTubeKit Parser.swift
[15/27] Compiling YouTubeKit RemoteStream.swift
[16/27] Emitting module YouTubeKit
[17/27] Compiling YouTubeKit Concurrency.swift
[18/27] Compiling YouTubeKit Foundation.swift
[19/27] Compiling YouTubeKit Lazy.swift
[20/27] Compiling YouTubeKit Logging.swift
[21/27] Compiling YouTubeKit RegularExpression.swift
[22/27] Compiling YouTubeKit Retry.swift
[23/27] Compiling YouTubeKit InnerTube.swift
[24/27] Compiling YouTubeKit Codecs.swift
[25/27] Compiling YouTubeKit FileExtension.swift
[26/27] Compiling YouTubeKit RemoteYouTubeClient.swift
[27/27] Compiling YouTubeKit YouTube.swift
Build of target: 'YouTubeKit' complete! (1.44s)
     360
3	/Users/admin/builder/spi-builder-workspace/.docs/alexeichhorn/youtubekit/0.2.4
✅  Doc result (uploading) reported
========================================
SyncDocs
========================================
Doc archive source directory: $PWD/.docs/alexeichhorn/youtubekit/0.2.4
File count: 360
Doc size:   3.0MB
Preparing doc bundle ...
Uploading prod-alexeichhorn-youtubekit-0.2.4-d5118e84.zip to s3://spi-docs-inbox/prod-alexeichhorn-youtubekit-0.2.4-d5118e84.zip
Copying... [10%]
Copying... [20%]
Copying... [30%]
Copying... [40%]
Copying... [50%]
Copying... [60%]
Copying... [70%]
Copying... [80%]
Copying... [90%]
Copying... [100%]
Done.