This is a staging environment. For live and up-to-date package information, visit swiftpackageindex.com.

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 with Swift 6.0 for macOS (SPM).

Swift 6 data race errors: 3

Build Command

env DEVELOPER_DIR=/Applications/Xcode-15.3.0.app xcrun --toolchain org.swift.600202405261a swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete

Build Log

========================================
RunAll
========================================
Builder version: 4.40.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
========================================
Build
========================================
Selected platform:         macosSpm
Swift version:             6.0
Building package at path:  $workDir
https://github.com/arnecs/mqttkit.git
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-15.3.0.app xcrun --toolchain org.swift.600202405261a 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-6F35C1178C84523A.txt
[3/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()
[4/10] Compiling MQTTKit MQTTSessionDelegate.swift
[5/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 | }
[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] 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 |     }
[10/10] Compiling MQTTKit MQTTMessage.swift
Build complete! (18.95s)
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.
This is a staging environment. For live and up-to-date package information, visit swiftpackageindex.com.