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.1 for macOS (SPM) on 25 Apr 2025 00:02:12 UTC.

Swift 6 data race errors: 3

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/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.76s)
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.1
Building package at path:  $PWD
https://github.com/arnecs/mqttkit.git
https://github.com/arnecs/mqttkit.git
{
  "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"
}
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/10] Compiling MQTTKit MQTTSession.swift
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:138:23: warning: capture of 'self' with non-sendable type 'MQTTSession?' in a '@Sendable' closure
  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
139 |                     -self!.lastServerResponse.timeIntervalSinceNow < Double(self!.options.keepAliveInterval) * 1.5  else {
140 |                         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
  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
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
195 |
196 |         DispatchQueue.global(qos: .userInitiated).async {
197 |             input.open()
    |             `- warning: capture of 'input' with non-sendable type 'InputStream' in a '@Sendable' closure
198 |             output.open()
199 |
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h:56:12: note: class 'InputStream' does not conform to the 'Sendable' protocol
 54 | // NSInputStream is an abstract class representing the base functionality of a read stream.
 55 | // Subclassers are required to implement these methods.
 56 | @interface NSInputStream : NSStream
    |            `- note: class 'InputStream' does not conform to the 'Sendable' protocol
 57 | - (NSInteger)read:(uint8_t *)buffer maxLength:(NSUInteger)len;
 58 |     // reads up to length bytes into the supplied buffer, which must be at least of size len. Returns the actual number of bytes read.
/Users/admin/builder/spi-builder-workspace/Sources/MQTTSession.swift:198:13: warning: capture of 'output' with non-sendable type 'OutputStream' in a '@Sendable' closure
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
199 |
200 |             while input.streamStatus == .opening || output.streamStatus == .opening {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h:73:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 71 | // NSOutputStream is an abstract class representing the base functionality of a write stream.
 72 | // Subclassers are required to implement these methods.
 73 | @interface NSOutputStream : NSStream
    |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 74 | - (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
 75 |     // writes the bytes from the specified buffer to the stream up to len bytes. Returns the number of bytes actually written.
/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
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
    |                 `- 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 |             }
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h:73:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 71 | // NSOutputStream is an abstract class representing the base functionality of a write stream.
 72 | // Subclassers are required to implement these methods.
 73 | @interface NSOutputStream : NSStream
    |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 74 | - (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
 75 |     // writes the bytes from the specified buffer to the stream up to len bytes. Returns the number of bytes actually written.
/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
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSStream.h:73:12: note: class 'OutputStream' does not conform to the 'Sendable' protocol
 71 | // NSOutputStream is an abstract class representing the base functionality of a write stream.
 72 | // Subclassers are required to implement these methods.
 73 | @interface NSOutputStream : NSStream
    |            `- note: class 'OutputStream' does not conform to the 'Sendable' protocol
 74 | - (NSInteger)write:(const uint8_t *)buffer maxLength:(NSUInteger)len;
 75 |     // writes the bytes from the specified buffer to the stream up to len bytes. Returns the number of bytes actually written.
/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 MQTTMessage.swift
[5/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: add '@MainActor' to make static property 'mostOnce' part of global actor 'MainActor'
    |                `- 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: add '@MainActor' to make static property 'leastOnce' part of global actor 'MainActor'
    |                `- 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: add '@MainActor' to make static property 'exactlyOnce' part of global actor 'MainActor'
    |                `- 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 |     }
[6/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: add '@MainActor' to make static property 'mostOnce' part of global actor 'MainActor'
    |                `- 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: add '@MainActor' to make static property 'leastOnce' part of global actor 'MainActor'
    |                `- 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: add '@MainActor' to make static property 'exactlyOnce' part of global actor 'MainActor'
    |                `- 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 |     }
[7/10] Compiling MQTTKit MQTTSessionDelegate.swift
[8/10] Compiling MQTTKit MQTTOptions.swift
[9/10] Compiling MQTTKit Extensions.swift
[10/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 | }
Build complete! (5.34s)
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.