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 ZipPinch, reference 1.4.0 (24c92b), with Swift 6.1 for macOS (SPM) on 27 Apr 2025 23:04:50 UTC.

Swift 6 data race errors: 2

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.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/buh/ZipPinch.git
Reference: 1.4.0
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/buh/ZipPinch
 * tag               1.4.0      -> FETCH_HEAD
HEAD is now at 24c92bc Sendable progress callback.
Cloned https://github.com/buh/ZipPinch.git
Revision (git rev-parse @):
24c92bcc25074af4777df009af4558e7b00e5fe8
SUCCESS checkout https://github.com/buh/ZipPinch.git at 1.4.0
========================================
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": "zippinch",
      "name": "ZipPinch",
      "url": "https://github.com/buh/ZipPinch.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/ZipPinch",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/buh/ZipPinch.git
[1/570] Fetching zippinch
Fetched https://github.com/buh/ZipPinch.git from cache (0.80s)
Creating working copy for https://github.com/buh/ZipPinch.git
Working copy of https://github.com/buh/ZipPinch.git resolved at 1.4.0 (24c92bc)
warning: '.resolve-product-dependencies': dependency 'zippinch' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.1
Building package at path:  $PWD
https://github.com/buh/ZipPinch.git
https://github.com/buh/ZipPinch.git
{
  "dependencies" : [
  ],
  "manifest_display_name" : "ZipPinch",
  "name" : "ZipPinch",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "12.0"
    },
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "watchos",
      "version" : "8.0"
    }
  ],
  "products" : [
    {
      "name" : "ZipPinch",
      "targets" : [
        "ZipPinch"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "ZipPinchTests",
      "module_type" : "SwiftTarget",
      "name" : "ZipPinchTests",
      "path" : "Tests/ZipPinchTests",
      "sources" : [
        "ArchiveTests.swift"
      ],
      "target_dependencies" : [
        "ZipPinch"
      ],
      "type" : "test"
    },
    {
      "c99name" : "ZipPinch",
      "module_type" : "SwiftTarget",
      "name" : "ZipPinch",
      "path" : "Sources/ZipPinch",
      "product_memberships" : [
        "ZipPinch"
      ],
      "sources" : [
        "URLSession+ZIPEntries.swift",
        "URLSession+ZIPEntry.swift",
        "URLSession+ZIPFolder.swift",
        "URLSession+ZIPRange.swift",
        "ZIPFolder.swift",
        "ZipFileFormat.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.6"
}
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/9] Compiling ZipPinch URLSession+ZIPRange.swift
[4/9] Compiling ZipPinch URLSession+ZIPFolder.swift
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:80:19: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 78 |         progress: ZIPProgress? = nil
 79 |     ) async throws -> [(entry: ZIPEntry, data: Data)] {
 80 |         try await withThrowingTaskGroup(of: (entry: ZIPEntry, data: Data).self) { taskGroup in
    |                   `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 81 |             let overallProgress = OverallProgress(count: Double(entries.count))
 82 |
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:80:81: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 78 |         progress: ZIPProgress? = nil
 79 |     ) async throws -> [(entry: ZIPEntry, data: Data)] {
 80 |         try await withThrowingTaskGroup(of: (entry: ZIPEntry, data: Data).self) { taskGroup in
    |                                                                                 `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 81 |             let overallProgress = OverallProgress(count: Double(entries.count))
 82 |
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:95:27: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 93 |                 }
 94 |
 95 |                 taskGroup.addTask(priority: .medium) { [progressPerEntry] in
    |                           `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
 96 |                     (entry, try await self.zipEntryData(
 97 |                         entry,
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:105:40: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
103 |             }
104 |
105 |             return try await taskGroup.reduce(into: [(entry: ZIPEntry, data: Data)]()) { partialResult, value in
    |                                        `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
106 |                 partialResult.append(value)
107 |             }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:105:88: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
103 |             }
104 |
105 |             return try await taskGroup.reduce(into: [(entry: ZIPEntry, data: Data)]()) { partialResult, value in
    |                                                                                        `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
106 |                 partialResult.append(value)
107 |             }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:105:88: warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
103 |             }
104 |
105 |             return try await taskGroup.reduce(into: [(entry: ZIPEntry, data: Data)]()) { partialResult, value in
    |                                                                                        `- warning: type 'ZIPEntry' does not conform to the 'Sendable' protocol; this is an error in the Swift 6 language mode
106 |                 partialResult.append(value)
107 |             }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:89:99: warning: capture of 'entry' with non-sendable type 'ZIPEntry' in a '@Sendable' closure; this is an error in the Swift 6 language mode
 87 |                     progressPerEntry = .init(bufferSize: progress.bufferSize) { value in
 88 |                         Task {
 89 |                             let overallValue = await overallProgress.overallValue(for: value, id: entry.filePath)
    |                                                                                                   `- warning: capture of 'entry' with non-sendable type 'ZIPEntry' in a '@Sendable' closure; this is an error in the Swift 6 language mode
 90 |                             progress.callback(overallValue)
 91 |                         }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:90:29: warning: capture of 'progress' with non-sendable type 'ZIPProgress' in a '@Sendable' closure; this is an error in the Swift 6 language mode
 88 |                         Task {
 89 |                             let overallValue = await overallProgress.overallValue(for: value, id: entry.filePath)
 90 |                             progress.callback(overallValue)
    |                             `- warning: capture of 'progress' with non-sendable type 'ZIPProgress' in a '@Sendable' closure; this is an error in the Swift 6 language mode
 91 |                         }
 92 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPEntry.swift:27:15: note: consider making struct 'ZIPProgress' conform to the 'Sendable' protocol
 25 | /// Progress callback container.
 26 | /// It can be configured for buffer size, which will affect how often the callback is invoked.
 27 | public struct ZIPProgress {
    |               `- note: consider making struct 'ZIPProgress' conform to the 'Sendable' protocol
 28 |     /// A number of bytes of the buffer, which will affect how often the callback is invoked.
 29 |     /// It can be greater than or equal to 64 Kb (default value).
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:89:99: warning: capture of 'entry' with non-sendable type 'ZIPEntry' in an isolated closure; this is an error in the Swift 6 language mode
 87 |                     progressPerEntry = .init(bufferSize: progress.bufferSize) { value in
 88 |                         Task {
 89 |                             let overallValue = await overallProgress.overallValue(for: value, id: entry.filePath)
    |                                                                                                   `- warning: capture of 'entry' with non-sendable type 'ZIPEntry' in an isolated closure; this is an error in the Swift 6 language mode
 90 |                             progress.callback(overallValue)
 91 |                         }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:31:15: note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 29 |
 30 | /// The ZIP entry.
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
    |               `- note: consider making struct 'ZIPEntry' conform to the 'Sendable' protocol
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:90:29: warning: capture of 'progress' with non-sendable type 'ZIPProgress' in an isolated closure; this is an error in the Swift 6 language mode
 88 |                         Task {
 89 |                             let overallValue = await overallProgress.overallValue(for: value, id: entry.filePath)
 90 |                             progress.callback(overallValue)
    |                             `- warning: capture of 'progress' with non-sendable type 'ZIPProgress' in an isolated closure; this is an error in the Swift 6 language mode
 91 |                         }
 92 |                     }
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPEntry.swift:27:15: note: consider making struct 'ZIPProgress' conform to the 'Sendable' protocol
 25 | /// Progress callback container.
 26 | /// It can be configured for buffer size, which will affect how often the callback is invoked.
 27 | public struct ZIPProgress {
    |               `- note: consider making struct 'ZIPProgress' conform to the 'Sendable' protocol
 28 |     /// A number of bytes of the buffer, which will affect how often the callback is invoked.
 29 |     /// It can be greater than or equal to 64 Kb (default value).
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/URLSession+ZIPFolder.swift:95:54: 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
 93 |                 }
 94 |
 95 |                 taskGroup.addTask(priority: .medium) { [progressPerEntry] 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
 96 |                     (entry, try await self.zipEntryData(
    |                      `- note: closure captures non-Sendable 'entry'
 97 |                         entry,
 98 |                         for: request,
 99 |                         delegate: delegate,
100 |                         progress: progressPerEntry
    |                                   `- note: closure captures non-Sendable 'progressPerEntry'
101 |                     ))
102 |                 }
[5/9] Emitting module ZipPinch
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZIPFolder.swift:26:23: warning: static property 'empty' is not concurrency-safe because non-'Sendable' type 'ZIPFolder' may have shared mutable state; this is an error in the Swift 6 language mode
 23 | import Foundation
 24 |
 25 | public struct ZIPFolder: Identifiable, Hashable, Equatable {
    |               `- note: consider making struct 'ZIPFolder' conform to the 'Sendable' protocol
 26 |     public static let empty = ZIPFolder(name: "")
    |                       |- warning: static property 'empty' is not concurrency-safe because non-'Sendable' type 'ZIPFolder' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'empty' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 27 |
 28 |     public let id = UUID()
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:33:23: warning: static property 'decompress' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
    |                       |- warning: static property 'decompress' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'decompress' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'decompress' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 34 |         try $0.decompressed(using: .zlib)
 35 |     }
[6/9] Compiling ZipPinch URLSession+ZIPEntries.swift
[7/9] Compiling ZipPinch ZIPFolder.swift
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZIPFolder.swift:26:23: warning: static property 'empty' is not concurrency-safe because non-'Sendable' type 'ZIPFolder' may have shared mutable state; this is an error in the Swift 6 language mode
 23 | import Foundation
 24 |
 25 | public struct ZIPFolder: Identifiable, Hashable, Equatable {
    |               `- note: consider making struct 'ZIPFolder' conform to the 'Sendable' protocol
 26 |     public static let empty = ZIPFolder(name: "")
    |                       |- warning: static property 'empty' is not concurrency-safe because non-'Sendable' type 'ZIPFolder' may have shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: add '@MainActor' to make static property 'empty' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 27 |
 28 |     public let id = UUID()
[8/9] Compiling ZipPinch URLSession+ZIPEntry.swift
[9/9] Compiling ZipPinch ZipFileFormat.swift
/Users/admin/builder/spi-builder-workspace/Sources/ZipPinch/ZipFileFormat.swift:33:23: warning: static property 'decompress' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 31 | public struct ZIPEntry: Identifiable, Hashable, Codable {
 32 |     /// Decompressor.
 33 |     public static var decompress: @Sendable (_ compressedData: NSData) throws -> NSData = {
    |                       |- warning: static property 'decompress' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                       |- note: convert 'decompress' to a 'let' constant to make 'Sendable' shared state immutable
    |                       |- note: add '@MainActor' to make static property 'decompress' part of global actor 'MainActor'
    |                       `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 34 |         try $0.decompressed(using: .zlib)
 35 |     }
Build complete! (4.87s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "ZipPinch",
  "name" : "ZipPinch",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
    {
      "name" : "macos",
      "version" : "12.0"
    },
    {
      "name" : "ios",
      "version" : "15.0"
    },
    {
      "name" : "watchos",
      "version" : "8.0"
    }
  ],
  "products" : [
    {
      "name" : "ZipPinch",
      "targets" : [
        "ZipPinch"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "ZipPinchTests",
      "module_type" : "SwiftTarget",
      "name" : "ZipPinchTests",
      "path" : "Tests/ZipPinchTests",
      "sources" : [
        "ArchiveTests.swift"
      ],
      "target_dependencies" : [
        "ZipPinch"
      ],
      "type" : "test"
    },
    {
      "c99name" : "ZipPinch",
      "module_type" : "SwiftTarget",
      "name" : "ZipPinch",
      "path" : "Sources/ZipPinch",
      "product_memberships" : [
        "ZipPinch"
      ],
      "sources" : [
        "URLSession+ZIPEntries.swift",
        "URLSession+ZIPEntry.swift",
        "URLSession+ZIPFolder.swift",
        "URLSession+ZIPRange.swift",
        "ZIPFolder.swift",
        "ZipFileFormat.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.6"
}
Done.