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 MQTTKit, reference master (ec8946), with Swift 6.0 for macOS (SPM) on 8 Oct 2024 08:28:28 UTC.

Swift 6 data race errors: 3

Build Command

env DEVELOPER_DIR=/Applications/Xcode-16.0.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.55.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/arnecs/mqttkit.git
Reference: master
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/arnecs/mqttkit
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master
HEAD is now at ec89464 travis script xcodebuild
Cloned https://github.com/arnecs/mqttkit.git
Revision (git rev-parse @):
ec894640f1ea27f758b3f4d22722d83159773cd0
SUCCESS checkout https://github.com/arnecs/mqttkit.git at master
========================================
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": "mqttkit",
      "name": "MQTTKit",
      "url": "https://github.com/arnecs/mqttkit.git",
      "version": "unspecified",
      "path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/mqttkit",
      "dependencies": [
      ]
    }
  ]
}
Fetching https://github.com/arnecs/mqttkit.git
[1/260] Fetching mqttkit
Fetched https://github.com/arnecs/mqttkit.git from cache (0.74s)
Creating working copy for https://github.com/arnecs/mqttkit.git
Working copy of https://github.com/arnecs/mqttkit.git resolved at master (ec89464)
warning: '.resolve-product-dependencies': dependency 'mqttkit' 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/arnecs/mqttkit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.0.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--4A847ED0836F2485.txt
[3/10] Compiling MQTTKit MQTTPacket.swift
/Users/admin/builder/spi-builder-workspace/Sources/MQTTPacket.swift:63:14: warning: function call causes an infinite recursion
 61 |
 62 |     init(header: MQTTPacket.Header) {
 63 |         self.init(header: header)
    |              `- warning: function call causes an infinite recursion
 64 |     }
 65 | }
[4/10] Compiling MQTTKit MQTTSession.swift
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:137:13: warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
  9 | import Foundation
 10 |
 11 | final public class MQTTSession: NSObject, StreamDelegate {
    |                    `- note: class 'MQTTSession' does not conform to the 'Sendable' protocol
 12 |     private var options: MQTTOptions
 13 |     private var inputStream: InputStream?
    :
135 |
136 |         DispatchQueue.main.async {
137 |             self.keepAliveTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [weak self] timer in
    |             `- warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
138 |                 guard self?.outputStream?.streamStatus == .open,
139 |                     -self!.lastServerResponse.timeIntervalSinceNow < Double(self!.options.keepAliveInterval) * 1.5  else {
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:138:23: warning: capture of 'self' with non-sendable type 'MQTTSession?' in a `@Sendable` closure; this is an error in the Swift 6 language mode
  9 | import Foundation
 10 |
 11 | final public class MQTTSession: NSObject, StreamDelegate {
    |                    `- note: class 'MQTTSession' does not conform to the 'Sendable' protocol
 12 |     private var options: MQTTOptions
 13 |     private var inputStream: InputStream?
    :
136 |         DispatchQueue.main.async {
137 |             self.keepAliveTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [weak self] timer in
138 |                 guard self?.outputStream?.streamStatus == .open,
    |                       `- warning: capture of 'self' with non-sendable type 'MQTTSession?' in a `@Sendable` closure; this is an error in the Swift 6 language mode
139 |                     -self!.lastServerResponse.timeIntervalSinceNow < Double(self!.options.keepAliveInterval) * 1.5  else {
140 |                         timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:159:13: warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
  9 | import Foundation
 10 |
 11 | final public class MQTTSession: NSObject, StreamDelegate {
    |                    `- note: class 'MQTTSession' does not conform to the 'Sendable' protocol
 12 |     private var options: MQTTOptions
 13 |     private var inputStream: InputStream?
    :
157 |
158 |         DispatchQueue.main.async {
159 |             self.autoReconnectTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [lsr = self.lastServerResponse, timeout = self.options.autoReconnectTimeout] timer in
    |             `- warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
160 |                 guard -lsr.timeIntervalSinceNow < timeout && self.state == .disconnected else {
161 |                     timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:160:62: warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
  9 | import Foundation
 10 |
 11 | final public class MQTTSession: NSObject, StreamDelegate {
    |                    `- note: class 'MQTTSession' does not conform to the 'Sendable' protocol
 12 |     private var options: MQTTOptions
 13 |     private var inputStream: InputStream?
    :
158 |         DispatchQueue.main.async {
159 |             self.autoReconnectTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [lsr = self.lastServerResponse, timeout = self.options.autoReconnectTimeout] timer in
160 |                 guard -lsr.timeIntervalSinceNow < timeout && self.state == .disconnected else {
    |                                                              `- warning: capture of 'self' with non-sendable type 'MQTTSession' in a `@Sendable` closure; this is an error in the Swift 6 language mode
161 |                     timer.invalidate()
162 |                     return
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:160:62: warning: implicit capture of 'self' requires that 'MQTTSession' conforms to `Sendable`; this is an error in the Swift 6 language mode
  9 | import Foundation
 10 |
 11 | final public class MQTTSession: NSObject, StreamDelegate {
    |                    `- note: class 'MQTTSession' does not conform to the 'Sendable' protocol
 12 |     private var options: MQTTOptions
 13 |     private var inputStream: InputStream?
    :
158 |         DispatchQueue.main.async {
159 |             self.autoReconnectTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [lsr = self.lastServerResponse, timeout = self.options.autoReconnectTimeout] timer in
160 |                 guard -lsr.timeIntervalSinceNow < timeout && self.state == .disconnected else {
    |                                                              `- warning: implicit capture of 'self' requires that 'MQTTSession' conforms to `Sendable`; this is an error in the Swift 6 language mode
161 |                     timer.invalidate()
162 |                     return
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:197:13: warning: capture of 'input' with non-sendable type 'InputStream' in a `@Sendable` closure; this is an error in the Swift 6 language mode
195 |
196 |         DispatchQueue.global(qos: .userInitiated).async {
197 |             input.open()
    |             `- warning: capture of 'input' with non-sendable type 'InputStream' in a `@Sendable` closure; this is an error in the Swift 6 language mode
198 |             output.open()
199 |
Foundation.InputStream:1:12: note: class 'InputStream' does not conform to the 'Sendable' protocol
 1 | open class InputStream : Stream {
   |            `- note: class 'InputStream' does not conform to the 'Sendable' protocol
 2 |     open func read(_ buffer: UnsafeMutablePointer<UInt8>, maxLength len: Int) -> Int
 3 |     open func getBuffer(_ buffer: UnsafeMutablePointer<UnsafeMutablePointer<UInt8>?>, length len: UnsafeMutablePointer<Int>) -> Bool
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:198:13: warning: capture of 'output' with non-sendable type 'OutputStream' in a `@Sendable` closure; this is an error in the Swift 6 language mode
196 |         DispatchQueue.global(qos: .userInitiated).async {
197 |             input.open()
198 |             output.open()
    |             `- warning: capture of 'output' with non-sendable type 'OutputStream' in a `@Sendable` closure; this is an error in the Swift 6 language mode
199 |
200 |             while input.streamStatus == .opening || output.streamStatus == .opening {
Foundation.OutputStream:1:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 1 | open class OutputStream : Stream {
   |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 2 |     open func write(_ buffer: UnsafePointer<UInt8>, maxLength len: Int) -> Int
 3 |     open var hasSpaceAvailable: Bool { get }
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:205:17: warning: capture of 'completion' with non-sendable type '((input: InputStream, output: OutputStream)?) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
203 |
204 |             if input.streamStatus != .open || output.streamStatus != .open {
205 |                 completion(nil)
    |                 |- warning: capture of 'completion' with non-sendable type '((input: InputStream, output: OutputStream)?) -> Void' in a `@Sendable` closure; this is an error in the Swift 6 language mode
    |                 `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
206 |                 return
207 |             }
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:200:53: warning: implicit capture of 'output' requires that 'OutputStream' conforms to `Sendable`; this is an error in the Swift 6 language mode
198 |             output.open()
199 |
200 |             while input.streamStatus == .opening || output.streamStatus == .opening {
    |                                                     `- warning: implicit capture of 'output' requires that 'OutputStream' conforms to `Sendable`; this is an error in the Swift 6 language mode
201 |                 usleep(1000)
202 |             }
Foundation.OutputStream:1:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 1 | open class OutputStream : Stream {
   |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 2 |     open func write(_ buffer: UnsafePointer<UInt8>, maxLength len: Int) -> Int
 3 |     open var hasSpaceAvailable: Bool { get }
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:204:47: warning: implicit capture of 'output' requires that 'OutputStream' conforms to `Sendable`; this is an error in the Swift 6 language mode
202 |             }
203 |
204 |             if input.streamStatus != .open || output.streamStatus != .open {
    |                                               `- warning: implicit capture of 'output' requires that 'OutputStream' conforms to `Sendable`; this is an error in the Swift 6 language mode
205 |                 completion(nil)
206 |                 return
Foundation.OutputStream:1:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 1 | open class OutputStream : Stream {
   |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 2 |     open func write(_ buffer: UnsafePointer<UInt8>, maxLength len: Int) -> Int
 3 |     open var hasSpaceAvailable: Bool { get }
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:137:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
135 |
136 |         DispatchQueue.main.async {
137 |             self.keepAliveTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [weak self] timer in
    |             |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |             `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
138 |                 guard self?.outputStream?.streamStatus == .open,
139 |                     -self!.lastServerResponse.timeIntervalSinceNow < Double(self!.options.keepAliveInterval) * 1.5  else {
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:159:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
157 |
158 |         DispatchQueue.main.async {
159 |             self.autoReconnectTimer = Timer.scheduledTimer(withTimeInterval: TimeInterval(self.options.keepAliveInterval / 2), repeats: true, block: { [lsr = self.lastServerResponse, timeout = self.options.autoReconnectTimeout] timer in
    |             |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
    |             `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
160 |                 guard -lsr.timeIntervalSinceNow < timeout && self.state == .disconnected else {
161 |                     timer.invalidate()
[5/10] Compiling MQTTKit MQTTSessionDelegate.swift
[6/10] Compiling MQTTKit MQTTOptions.swift
[7/10] Compiling MQTTKit Extensions.swift
[8/10] Compiling MQTTKit Constants.swift
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:37:16: warning: static property 'mostOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
 35 |     case qos2 = 0b0000_0100
 36 |
 37 |     static let mostOnce = MQTTQoSLevel.qos0
    |                |- warning: static property 'mostOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'mostOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 38 |     static let leastOnce = MQTTQoSLevel.qos1
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:38:16: warning: static property 'leastOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
    :
 36 |
 37 |     static let mostOnce = MQTTQoSLevel.qos0
 38 |     static let leastOnce = MQTTQoSLevel.qos1
    |                |- warning: static property 'leastOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'leastOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
 40 |
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:39:16: warning: static property 'exactlyOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
    :
 37 |     static let mostOnce = MQTTQoSLevel.qos0
 38 |     static let leastOnce = MQTTQoSLevel.qos1
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
    |                |- warning: static property 'exactlyOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'exactlyOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 40 |
 41 |     case failure = 0x80
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:45:5: warning: 'public' modifier is redundant for operator function declared in a public extension
 43 |
 44 | public extension MQTTQoSLevel {
 45 |     public static func < (lhs: MQTTQoSLevel, rhs: MQTTQoSLevel) -> Bool {
    |     `- warning: 'public' modifier is redundant for operator function declared in a public extension
 46 |         return lhs.rawValue < rhs.rawValue
 47 |     }
[9/10] Compiling MQTTKit MQTTMessage.swift
[10/10] Emitting module MQTTKit
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:37:16: warning: static property 'mostOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
 35 |     case qos2 = 0b0000_0100
 36 |
 37 |     static let mostOnce = MQTTQoSLevel.qos0
    |                |- warning: static property 'mostOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'mostOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 38 |     static let leastOnce = MQTTQoSLevel.qos1
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:38:16: warning: static property 'leastOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
    :
 36 |
 37 |     static let mostOnce = MQTTQoSLevel.qos0
 38 |     static let leastOnce = MQTTQoSLevel.qos1
    |                |- warning: static property 'leastOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'leastOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
 40 |
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:39:16: warning: static property 'exactlyOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
 30 | }
 31 |
 32 | public enum MQTTQoSLevel: UInt8, Comparable {
    |             `- note: consider making enum 'MQTTQoSLevel' conform to the 'Sendable' protocol
 33 |     case qos0 = 0b0000_0000
 34 |     case qos1 = 0b0000_0010
    :
 37 |     static let mostOnce = MQTTQoSLevel.qos0
 38 |     static let leastOnce = MQTTQoSLevel.qos1
 39 |     static let exactlyOnce = MQTTQoSLevel.qos2
    |                |- warning: static property 'exactlyOnce' is not concurrency-safe because non-'Sendable' type 'MQTTQoSLevel' may have shared mutable state; this is an error in the Swift 6 language mode
    |                |- note: annotate 'exactlyOnce' with '@MainActor' if property should only be accessed from the main actor
    |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 40 |
 41 |     case failure = 0x80
/Users/admin/builder/spi-builder-workspace/Sources/Constants.swift:45:5: warning: 'public' modifier is redundant for operator function declared in a public extension
 43 |
 44 | public extension MQTTQoSLevel {
 45 |     public static func < (lhs: MQTTQoSLevel, rhs: MQTTQoSLevel) -> Bool {
    |     `- warning: 'public' modifier is redundant for operator function declared in a public extension
 46 |         return lhs.rawValue < rhs.rawValue
 47 |     }
Build complete! (9.51s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "MQTTKit",
  "name" : "MQTTKit",
  "path" : "/Users/admin/builder/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "MQTTKit",
      "targets" : [
        "MQTTKit"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "MQTTKitTests",
      "module_type" : "SwiftTarget",
      "name" : "MQTTKitTests",
      "path" : "Tests",
      "sources" : [
        "MQTTKitTests.swift"
      ],
      "target_dependencies" : [
        "MQTTKit"
      ],
      "type" : "test"
    },
    {
      "c99name" : "MQTTKit",
      "module_type" : "SwiftTarget",
      "name" : "MQTTKit",
      "path" : "Sources",
      "product_memberships" : [
        "MQTTKit"
      ],
      "sources" : [
        "Constants.swift",
        "Extensions.swift",
        "MQTTMessage.swift",
        "MQTTOptions.swift",
        "MQTTPacket.swift",
        "MQTTSession.swift",
        "MQTTSessionDelegate.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "4.0"
}
Done.