The Swift Package Index logo.Swift Package Index

Build Information

Successful build of WealthsimpleDownloader, reference v3.1.0 (160733), with Swift 6.1 for Android on 11 Feb 2026 08:06:25 UTC.

Swift 6 data race errors: 10

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4609320-3":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -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 2>&1

Build Log

========================================
RunAll
========================================
Builder version: 4.68.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/Nef10/WealthsimpleDownloader.git
Reference: v3.1.0
Initialized empty Git repository in /host/spi-builder-workspace/.git/
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: 	git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: 	git branch -m <name>
From https://github.com/Nef10/WealthsimpleDownloader
 * tag               v3.1.0     -> FETCH_HEAD
HEAD is now at 1607337 Bump setup-swift to v3 beta (#287)
Cloned https://github.com/Nef10/WealthsimpleDownloader.git
Revision (git rev-parse @):
16073376b77ef1382b4daf872bbf9b2b1f64ca6b
SUCCESS checkout https://github.com/Nef10/WealthsimpleDownloader.git at v3.1.0
========================================
Build
========================================
Selected platform:         android
Swift version:             6.1
Building package at path:  $PWD
https://github.com/Nef10/WealthsimpleDownloader.git
https://github.com/Nef10/WealthsimpleDownloader.git
WARNING: environment variable SUPPRESS_SWIFT_6_FLAGS is not set
{
  "dependencies" : [
  ],
  "manifest_display_name" : "WealthsimpleDownloader",
  "name" : "WealthsimpleDownloader",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "Wealthsimple",
      "targets" : [
        "Wealthsimple"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "WealthsimpleTests",
      "module_type" : "SwiftTarget",
      "name" : "WealthsimpleTests",
      "path" : "Tests/WealthsimpleTests",
      "sources" : [
        "CreditCardPositionTests.swift",
        "Extensions/XCTestCase.swift",
        "ExtensionsTests/StringCamelCaseTests.swift",
        "Helpers/DownloaderTestCase.swift",
        "Helpers/MockAccount.swift",
        "Helpers/MockCredentialStorage.swift",
        "Helpers/MockURLProtocol.swift",
        "TokenTests.swift",
        "TransactionTests.swift",
        "URLConfigurationTests.swift",
        "WealthsimpleAccountTests.swift",
        "WealthsimpleAssetTests.swift",
        "WealthsimpleDownloaderTests.swift",
        "WealthsimplePositionTests.swift",
        "WealthsimpleTransactionTests.swift"
      ],
      "target_dependencies" : [
        "Wealthsimple"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Wealthsimple",
      "module_type" : "SwiftTarget",
      "name" : "Wealthsimple",
      "path" : "Sources/Wealthsimple",
      "product_memberships" : [
        "Wealthsimple"
      ],
      "sources" : [
        "Extensions/String+CamelCase.swift",
        "Token.swift",
        "Transaction.swift",
        "URLConfiguration.swift",
        "WealthsimpleAccount.swift",
        "WealthsimpleAsset.swift",
        "WealthsimpleDownloader.swift",
        "WealthsimplePosition.swift",
        "WealthsimpleTransaction.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.2"
}
Running build ...
bash -c docker run --pull=always --rm -v "checkouts-4609320-3":/host -w "$PWD" -e JAVA_HOME="/root/.sdkman/candidates/java/current" -e SPI_BUILD="1" -e SPI_PROCESSING="1" registry.gitlab.com/finestructure/spi-images:android-6.1-latest swift build --swift-sdk aarch64-unknown-linux-android24 -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 2>&1
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:08fa5f1bd27c53c71ebe7c2842e29d52715d90da2c5b8f52513c9039c232613d
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-24593BA9C3E375BF.txt
[3/11] Emitting module Wealthsimple
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:39:24: warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 37 |     private static var url: URL { URLConfiguration.shared.urlObject(for: "oauth/token")! }
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
    |                        |- warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'clientId' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'clientId' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
 41 |
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:40:24: warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
    |                        |- warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'scope' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'scope' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 41 |
 42 |     private let accessToken: String
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:19:10: warning: associated value 'missingResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 17 |     case invalidJson(json: Data)
 18 |     /// When the received JSON does not have all expected values
 19 |     case missingResultParameter(json: [String: Any])
    |          `- warning: associated value 'missingResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 20 |     /// When the received JSON does have an unexpected value
 21 |     case invalidResultParameter(json: [String: Any])
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:21:10: warning: associated value 'invalidResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 19 |     case missingResultParameter(json: [String: Any])
 20 |     /// When the received JSON does have an unexpected value
 21 |     case invalidResultParameter(json: [String: Any])
    |          `- warning: associated value 'invalidResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 22 |     /// An error with the token occured
 23 |     case tokenError(_ error: TokenError)
/host/spi-builder-workspace/Sources/Wealthsimple/URLConfiguration.swift:20:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'URLConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// Singleton class that manages the base URL configuration for all Wealthsimple API endpoints
14 | final class URLConfiguration {
   |             `- note: class 'URLConfiguration' does not conform to the 'Sendable' protocol
15 |
16 |     private static let defaultBaseURL = "https://api.production.wealthsimple.com/v1/"
   :
18 |
19 |     /// Shared singleton instance
20 |     static let shared = URLConfiguration()
   |                |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'URLConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |
22 |     /// Base URL for all Wealthsimple API endpoints
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:53:24: warning: static property 'dateFormatter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 51 |     private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "positions")! }
 52 |
 53 |     private static var dateFormatter: DateFormatter = {
    |                        |- warning: static property 'dateFormatter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatter' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatter' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |         var dateFormatter = DateFormatter()
 55 |         dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:32:24: warning: static property 'dateFormatterREST' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 30 |     private static let graphQLOperationDetails = "CreditCardActivity"
 31 |
 32 |     private static var dateFormatterREST: DateFormatter = {
    |                        |- warning: static property 'dateFormatterREST' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterREST' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterREST' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 33 |         var dateFormatter = DateFormatter()
 34 |         dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:38:24: warning: static property 'dateFormatterGraphQLRequest' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 36 |     }()
 37 |
 38 |     private static var dateFormatterGraphQLRequest: ISO8601DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLRequest' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLRequest' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLRequest' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |         ISO8601DateFormatter()
 40 |     }()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:42:24: warning: static property 'dateFormatterGraphQLResult' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 40 |     }()
 41 |
 42 |     private static var dateFormatterGraphQLResult: DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLResult' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLResult' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLResult' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 43 |         var dateFormatter = DateFormatter()
 44 |         dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:48:24: warning: static property 'dateFormatterGraphQLResult2' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 46 |     }()
 47 |
 48 |     private static var dateFormatterGraphQLResult2: DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLResult2' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLResult2' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLResult2' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 49 |         var dateFormatter = DateFormatter()
 50 |         dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss z"
[4/12] Compiling Wealthsimple WealthsimpleAsset.swift
[5/12] Compiling Wealthsimple WealthsimpleDownloader.swift
[6/12] Compiling Wealthsimple WealthsimplePosition.swift
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:53:24: warning: static property 'dateFormatter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 51 |     private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "positions")! }
 52 |
 53 |     private static var dateFormatter: DateFormatter = {
    |                        |- warning: static property 'dateFormatter' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatter' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatter' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 54 |         var dateFormatter = DateFormatter()
 55 |         dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:153:90: warning: capture of 'completion' with non-sendable type '(Result<[any Position], PositionError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
151 |         token.authenticateRequest(request) { request in
152 |             let task = session.dataTask(with: request) { data, response, error in
153 |                 handleResponse(data: data, response: response, error: error, completion: completion)
    |                                                                                          |- warning: capture of 'completion' with non-sendable type '(Result<[any Position], PositionError>) -> 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'
154 |             }
155 |             task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:177:97: warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
175 |         token.authenticateRequest(request) { request in
176 |             let task = session.dataTask(with: request) { data, response, error in
177 |                 handleCreditCardResponse(data: data, response: response, error: error, account: account, completion: completion)
    |                                                                                                 `- warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
178 |             }
179 |             task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleAccount.swift:58:17: note: protocol 'Account' does not conform to the 'Sendable' protocol
 56 |
 57 | /// An Account at Wealthsimple
 58 | public protocol Account {
    |                 `- note: protocol 'Account' does not conform to the 'Sendable' protocol
 59 |
 60 |     /// Type of the account
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:177:118: warning: capture of 'completion' with non-sendable type '(Result<[any Position], PositionError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
175 |         token.authenticateRequest(request) { request in
176 |             let task = session.dataTask(with: request) { data, response, error in
177 |                 handleCreditCardResponse(data: data, response: response, error: error, account: account, completion: completion)
    |                                                                                                                      |- warning: capture of 'completion' with non-sendable type '(Result<[any Position], PositionError>) -> 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'
178 |             }
179 |             task.resume()
[7/12] Compiling Wealthsimple Transaction.swift
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:19:10: warning: associated value 'missingResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 17 |     case invalidJson(json: Data)
 18 |     /// When the received JSON does not have all expected values
 19 |     case missingResultParameter(json: [String: Any])
    |          `- warning: associated value 'missingResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 20 |     /// When the received JSON does have an unexpected value
 21 |     case invalidResultParameter(json: [String: Any])
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:21:10: warning: associated value 'invalidResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 19 |     case missingResultParameter(json: [String: Any])
 20 |     /// When the received JSON does have an unexpected value
 21 |     case invalidResultParameter(json: [String: Any])
    |          `- warning: associated value 'invalidResultParameter(json:)' of 'Sendable'-conforming enum 'TransactionError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
 22 |     /// An error with the token occured
 23 |     case tokenError(_ error: TokenError)
[8/12] Compiling Wealthsimple String+CamelCase.swift
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:39:24: warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 37 |     private static var url: URL { URLConfiguration.shared.urlObject(for: "oauth/token")! }
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
    |                        |- warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'clientId' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'clientId' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
 41 |
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:40:24: warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
    |                        |- warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'scope' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'scope' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 41 |
 42 |     private let accessToken: String
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:121:98: warning: capture of 'credentialStorage' with non-sendable type 'any CredentialStorage' in a '@Sendable' closure; this is an error in the Swift 6 language mode
119 |         }
120 |         let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
121 |             handleTokenResponse(data: data, response: response, error: error, credentialStorage: credentialStorage, completion: completion)
    |                                                                                                  `- warning: capture of 'credentialStorage' with non-sendable type 'any CredentialStorage' in a '@Sendable' closure; this is an error in the Swift 6 language mode
122 |         }
123 |         task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleDownloader.swift:13:17: note: protocol 'CredentialStorage' does not conform to the 'Sendable' protocol
 11 | ///
 12 | /// Can for example be implemented using Keychain on Apple devices
 13 | public protocol CredentialStorage {
    |                 `- note: protocol 'CredentialStorage' does not conform to the 'Sendable' protocol
 14 |
 15 |     /// Save a value to the store
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:121:129: warning: capture of 'completion' with non-sendable type '(Result<Token, TokenError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
119 |         }
120 |         let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
121 |             handleTokenResponse(data: data, response: response, error: error, credentialStorage: credentialStorage, completion: completion)
    |                                                                                                                                 |- warning: capture of 'completion' with non-sendable type '(Result<Token, TokenError>) -> 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'
122 |         }
123 |         task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:172:21: warning: capture of 'completion' with non-sendable type '(Bool) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
170 |             let task = session.dataTask(with: request) { _, response, error in
171 |                 guard error == nil else {
172 |                     completion(false)
    |                     |- warning: capture of 'completion' with non-sendable type '(Bool) -> 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'
173 |                     return
174 |                 }
[9/12] Compiling Wealthsimple Token.swift
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:39:24: warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 37 |     private static var url: URL { URLConfiguration.shared.urlObject(for: "oauth/token")! }
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
    |                        |- warning: static property 'clientId' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'clientId' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'clientId' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
 41 |
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:40:24: warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 38 |     private static var testUrl: URL { URLConfiguration.shared.urlObject(for: "oauth/token/info")! }
 39 |     private static var clientId = "4da53ac2b03225bed1550eba8e4611e086c7b905a3855e6ed12ea08c246758fa" // From the website
 40 |     private static var scope = "invest.read mfda.read mercer.read trade.read" // the clientId supports some write scopes, but as this library only reads we limit it for safety
    |                        |- warning: static property 'scope' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'scope' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'scope' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 41 |
 42 |     private let accessToken: String
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:121:98: warning: capture of 'credentialStorage' with non-sendable type 'any CredentialStorage' in a '@Sendable' closure; this is an error in the Swift 6 language mode
119 |         }
120 |         let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
121 |             handleTokenResponse(data: data, response: response, error: error, credentialStorage: credentialStorage, completion: completion)
    |                                                                                                  `- warning: capture of 'credentialStorage' with non-sendable type 'any CredentialStorage' in a '@Sendable' closure; this is an error in the Swift 6 language mode
122 |         }
123 |         task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleDownloader.swift:13:17: note: protocol 'CredentialStorage' does not conform to the 'Sendable' protocol
 11 | ///
 12 | /// Can for example be implemented using Keychain on Apple devices
 13 | public protocol CredentialStorage {
    |                 `- note: protocol 'CredentialStorage' does not conform to the 'Sendable' protocol
 14 |
 15 |     /// Save a value to the store
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:121:129: warning: capture of 'completion' with non-sendable type '(Result<Token, TokenError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
119 |         }
120 |         let task = session.uploadTask(with: request, from: jsonData) { data, response, error in
121 |             handleTokenResponse(data: data, response: response, error: error, credentialStorage: credentialStorage, completion: completion)
    |                                                                                                                                 |- warning: capture of 'completion' with non-sendable type '(Result<Token, TokenError>) -> 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'
122 |         }
123 |         task.resume()
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:172:21: warning: capture of 'completion' with non-sendable type '(Bool) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
170 |             let task = session.dataTask(with: request) { _, response, error in
171 |                 guard error == nil else {
172 |                     completion(false)
    |                     |- warning: capture of 'completion' with non-sendable type '(Bool) -> 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'
173 |                     return
174 |                 }
[10/12] Compiling Wealthsimple URLConfiguration.swift
/host/spi-builder-workspace/Sources/Wealthsimple/URLConfiguration.swift:20:16: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'URLConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
12 |
13 | /// Singleton class that manages the base URL configuration for all Wealthsimple API endpoints
14 | final class URLConfiguration {
   |             `- note: class 'URLConfiguration' does not conform to the 'Sendable' protocol
15 |
16 |     private static let defaultBaseURL = "https://api.production.wealthsimple.com/v1/"
   :
18 |
19 |     /// Shared singleton instance
20 |     static let shared = URLConfiguration()
   |                |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'URLConfiguration' may have shared mutable state; this is an error in the Swift 6 language mode
   |                |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
   |                `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
21 |
22 |     /// Base URL for all Wealthsimple API endpoints
[11/12] Compiling Wealthsimple WealthsimpleAccount.swift
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleAccount.swift:103:90: warning: capture of 'completion' with non-sendable type '(Result<[any Account], AccountError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
101 |         token.authenticateRequest(request) { request in
102 |             let task = session.dataTask(with: request) { data, response, error in
103 |                 handleResponse(data: data, response: response, error: error, completion: completion)
    |                                                                                          |- warning: capture of 'completion' with non-sendable type '(Result<[any Account], AccountError>) -> 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'
104 |             }
105 |             task.resume()
[12/12] Compiling Wealthsimple WealthsimpleTransaction.swift
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:32:24: warning: static property 'dateFormatterREST' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 30 |     private static let graphQLOperationDetails = "CreditCardActivity"
 31 |
 32 |     private static var dateFormatterREST: DateFormatter = {
    |                        |- warning: static property 'dateFormatterREST' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterREST' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterREST' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 33 |         var dateFormatter = DateFormatter()
 34 |         dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:38:24: warning: static property 'dateFormatterGraphQLRequest' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 36 |     }()
 37 |
 38 |     private static var dateFormatterGraphQLRequest: ISO8601DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLRequest' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLRequest' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLRequest' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 39 |         ISO8601DateFormatter()
 40 |     }()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:42:24: warning: static property 'dateFormatterGraphQLResult' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 40 |     }()
 41 |
 42 |     private static var dateFormatterGraphQLResult: DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLResult' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLResult' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLResult' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 43 |         var dateFormatter = DateFormatter()
 44 |         dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSXXX"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:48:24: warning: static property 'dateFormatterGraphQLResult2' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
 46 |     }()
 47 |
 48 |     private static var dateFormatterGraphQLResult2: DateFormatter = {
    |                        |- warning: static property 'dateFormatterGraphQLResult2' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
    |                        |- note: convert 'dateFormatterGraphQLResult2' to a 'let' constant to make 'Sendable' shared state immutable
    |                        |- note: add '@MainActor' to make static property 'dateFormatterGraphQLResult2' part of global actor 'MainActor'
    |                        `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
 49 |         var dateFormatter = DateFormatter()
 50 |         dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss z"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:79: warning: capture of 'token' with non-sendable type 'Token' in a '@Sendable' closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                               `- warning: capture of 'token' with non-sendable type 'Token' in a '@Sendable' closure; this is an error in the Swift 6 language mode
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:31:8: note: consider making struct 'Token' conform to the 'Sendable' protocol
 29 | }
 30 |
 31 | struct Token {
    |        `- note: consider making struct 'Token' conform to the 'Sendable' protocol
 32 |
 33 |     private static let credentialStorageKeyAccessToken = "accessToken"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:95: warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                                               `- warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleAccount.swift:58:17: note: protocol 'Account' does not conform to the 'Sendable' protocol
 56 |
 57 | /// An Account at Wealthsimple
 58 | public protocol Account {
    |                 `- note: protocol 'Account' does not conform to the 'Sendable' protocol
 59 |
 60 |     /// Type of the account
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:138: warning: capture of 'completion' with non-sendable type 'WealthsimpleTransaction.TransactionsCompletion' (aka '(Result<Array<any Transaction>, TransactionError>) -> ()') in a '@Sendable' closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                                                                                          |- warning: capture of 'completion' with non-sendable type 'WealthsimpleTransaction.TransactionsCompletion' (aka '(Result<Array<any Transaction>, TransactionError>) -> ()') 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'
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:79: warning: capture of 'token' with non-sendable type 'Token' in an isolated closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                               `- warning: capture of 'token' with non-sendable type 'Token' in an isolated closure; this is an error in the Swift 6 language mode
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:31:8: note: consider making struct 'Token' conform to the 'Sendable' protocol
 29 | }
 30 |
 31 | struct Token {
    |        `- note: consider making struct 'Token' conform to the 'Sendable' protocol
 32 |
 33 |     private static let credentialStorageKeyAccessToken = "accessToken"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:95: warning: capture of 'account' with non-sendable type 'any Account' in an isolated closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                                               `- warning: capture of 'account' with non-sendable type 'any Account' in an isolated closure; this is an error in the Swift 6 language mode
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleAccount.swift:58:17: note: protocol 'Account' does not conform to the 'Sendable' protocol
 56 |
 57 | /// An Account at Wealthsimple
 58 | public protocol Account {
    |                 `- note: protocol 'Account' does not conform to the 'Sendable' protocol
 59 |
 60 |     /// Type of the account
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:163:138: warning: capture of 'completion' with non-sendable type 'WealthsimpleTransaction.TransactionsCompletion' (aka '(Result<Array<any Transaction>, TransactionError>) -> ()') in an isolated closure; this is an error in the Swift 6 language mode
161 |                         case .success(let data):
162 |                             if isGraphQL {
163 |                                 processGraphQLTransactions(data: data, token: token, account: account, startDate: startDate, completion: completion)
    |                                                                                                                                          |- warning: capture of 'completion' with non-sendable type 'WealthsimpleTransaction.TransactionsCompletion' (aka '(Result<Array<any Transaction>, TransactionError>) -> ()') in an isolated closure; this is an error in the Swift 6 language mode
    |                                                                                                                                          `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
164 |                             } else {
165 |                                 completion(parseREST(data: data))
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:223:25: warning: mutation of captured var 'resultError' in concurrently-executing code; this is an error in the Swift 6 language mode
221 |                     switch result {
222 |                     case .failure(let failure):
223 |                         resultError = failure
    |                         `- warning: mutation of captured var 'resultError' in concurrently-executing code; this is an error in the Swift 6 language mode
224 |                     case .success(let data):
225 |                         resultData = data
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:225:25: warning: mutation of captured var 'resultData' in concurrently-executing code; this is an error in the Swift 6 language mode
223 |                         resultError = failure
224 |                     case .success(let data):
225 |                         resultData = data
    |                         `- warning: mutation of captured var 'resultData' in concurrently-executing code; this is an error in the Swift 6 language mode
226 |                     }
227 |                     group.leave()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:268:36: warning: capture of 'token' with non-sendable type 'Token' in a '@Sendable' closure; this is an error in the Swift 6 language mode
266 |         group.enter()
267 |         DispatchQueue.global(qos: .userInitiated).async {
268 |             getTransactions(token: token, account: account, startDate: startDate, cursor: cursor) {
    |                                    `- warning: capture of 'token' with non-sendable type 'Token' in a '@Sendable' closure; this is an error in the Swift 6 language mode
269 |                 nextResult = $0
270 |                 group.leave()
/host/spi-builder-workspace/Sources/Wealthsimple/Token.swift:31:8: note: consider making struct 'Token' conform to the 'Sendable' protocol
 29 | }
 30 |
 31 | struct Token {
    |        `- note: consider making struct 'Token' conform to the 'Sendable' protocol
 32 |
 33 |     private static let credentialStorageKeyAccessToken = "accessToken"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:268:52: warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
266 |         group.enter()
267 |         DispatchQueue.global(qos: .userInitiated).async {
268 |             getTransactions(token: token, account: account, startDate: startDate, cursor: cursor) {
    |                                                    `- warning: capture of 'account' with non-sendable type 'any Account' in a '@Sendable' closure; this is an error in the Swift 6 language mode
269 |                 nextResult = $0
270 |                 group.leave()
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleAccount.swift:58:17: note: protocol 'Account' does not conform to the 'Sendable' protocol
 56 |
 57 | /// An Account at Wealthsimple
 58 | public protocol Account {
    |                 `- note: protocol 'Account' does not conform to the 'Sendable' protocol
 59 |
 60 |     /// Type of the account
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:269:17: warning: capture of 'nextResult' with non-sendable type 'Result<[any Transaction], TransactionError>?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
267 |         DispatchQueue.global(qos: .userInitiated).async {
268 |             getTransactions(token: token, account: account, startDate: startDate, cursor: cursor) {
269 |                 nextResult = $0
    |                 `- warning: capture of 'nextResult' with non-sendable type 'Result<[any Transaction], TransactionError>?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
270 |                 group.leave()
271 |             }
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:149:17: note: protocol 'Transaction' does not conform to the 'Sendable' protocol
147 |
148 | /// A Transaction, like buying or selling stock
149 | public protocol Transaction {
    |                 `- note: protocol 'Transaction' does not conform to the 'Sendable' protocol
150 |     /// Wealthsimples identifier of this transaction
151 |     var id: String { get }
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:269:17: warning: capture of 'nextResult' with non-sendable type 'Result<[any Transaction], TransactionError>?' in an isolated closure; this is an error in the Swift 6 language mode
267 |         DispatchQueue.global(qos: .userInitiated).async {
268 |             getTransactions(token: token, account: account, startDate: startDate, cursor: cursor) {
269 |                 nextResult = $0
    |                 `- warning: capture of 'nextResult' with non-sendable type 'Result<[any Transaction], TransactionError>?' in an isolated closure; this is an error in the Swift 6 language mode
270 |                 group.leave()
271 |             }
/host/spi-builder-workspace/Sources/Wealthsimple/Transaction.swift:149:17: note: protocol 'Transaction' does not conform to the 'Sendable' protocol
147 |
148 | /// A Transaction, like buying or selling stock
149 | public protocol Transaction {
    |                 `- note: protocol 'Transaction' does not conform to the 'Sendable' protocol
150 |     /// Wealthsimples identifier of this transaction
151 |     var id: String { get }
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:269:17: warning: mutation of captured var 'nextResult' in concurrently-executing code; this is an error in the Swift 6 language mode
267 |         DispatchQueue.global(qos: .userInitiated).async {
268 |             getTransactions(token: token, account: account, startDate: startDate, cursor: cursor) {
269 |                 nextResult = $0
    |                 `- warning: mutation of captured var 'nextResult' in concurrently-executing code; this is an error in the Swift 6 language mode
270 |                 group.leave()
271 |             }
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:341:21: warning: capture of 'completion' with non-sendable type '(Result<Data, TransactionError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
339 |             guard let data else {
340 |                 if let error {
341 |                     completion(.failure(TransactionError.httpError(error: error.localizedDescription)))
    |                     |- warning: capture of 'completion' with non-sendable type '(Result<Data, TransactionError>) -> 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'
342 |                 } else {
343 |                     completion(.failure(TransactionError.noDataReceived))
Build complete! (15.40s)
Build complete.
{
  "dependencies" : [
  ],
  "manifest_display_name" : "WealthsimpleDownloader",
  "name" : "WealthsimpleDownloader",
  "path" : "/host/spi-builder-workspace",
  "platforms" : [
  ],
  "products" : [
    {
      "name" : "Wealthsimple",
      "targets" : [
        "Wealthsimple"
      ],
      "type" : {
        "library" : [
          "automatic"
        ]
      }
    }
  ],
  "targets" : [
    {
      "c99name" : "WealthsimpleTests",
      "module_type" : "SwiftTarget",
      "name" : "WealthsimpleTests",
      "path" : "Tests/WealthsimpleTests",
      "sources" : [
        "CreditCardPositionTests.swift",
        "Extensions/XCTestCase.swift",
        "ExtensionsTests/StringCamelCaseTests.swift",
        "Helpers/DownloaderTestCase.swift",
        "Helpers/MockAccount.swift",
        "Helpers/MockCredentialStorage.swift",
        "Helpers/MockURLProtocol.swift",
        "TokenTests.swift",
        "TransactionTests.swift",
        "URLConfigurationTests.swift",
        "WealthsimpleAccountTests.swift",
        "WealthsimpleAssetTests.swift",
        "WealthsimpleDownloaderTests.swift",
        "WealthsimplePositionTests.swift",
        "WealthsimpleTransactionTests.swift"
      ],
      "target_dependencies" : [
        "Wealthsimple"
      ],
      "type" : "test"
    },
    {
      "c99name" : "Wealthsimple",
      "module_type" : "SwiftTarget",
      "name" : "Wealthsimple",
      "path" : "Sources/Wealthsimple",
      "product_memberships" : [
        "Wealthsimple"
      ],
      "sources" : [
        "Extensions/String+CamelCase.swift",
        "Token.swift",
        "Transaction.swift",
        "URLConfiguration.swift",
        "WealthsimpleAccount.swift",
        "WealthsimpleAsset.swift",
        "WealthsimpleDownloader.swift",
        "WealthsimplePosition.swift",
        "WealthsimpleTransaction.swift"
      ],
      "type" : "library"
    }
  ],
  "tools_version" : "5.2"
}
android-6.1-latest: Pulling from finestructure/spi-images
Digest: sha256:08fa5f1bd27c53c71ebe7c2842e29d52715d90da2c5b8f52513c9039c232613d
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Done.