Build Information
Successful build of WealthsimpleDownloader, reference main (5a02f4
), with Swift 6.1 for Android on 8 Sep 2025 08:50:03 UTC.
Swift 6 data race errors: 5
Build Command
bash -c docker run --pull=always --rm -v "checkouts-4609320-2":/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.67.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/Nef10/WealthsimpleDownloader.git
Reference: main
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
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 5a02f44 Bump swiftlint to 0.61.0
Cloned https://github.com/Nef10/WealthsimpleDownloader.git
Revision (git rev-parse @):
5a02f446af8be06aa048ef555665e078cab21cd4
SUCCESS checkout https://github.com/Nef10/WealthsimpleDownloader.git at main
========================================
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" : [
"Extensions/XCTestCase.swift",
"ExtensionsTests/StringCamelCaseTests.swift",
"Helpers/DownloaderTestCase.swift",
"Helpers/MockAccount.swift",
"Helpers/MockCredentialStorage.swift",
"Helpers/MockURLProtocol.swift",
"TokenTests.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",
"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-2":/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:8106a39f56f5bb7aad9f0d9a94f1e5362f9a40b692f7bc17efe17b7b91dc65fc
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/10] Compiling Wealthsimple URLConfiguration.swift
/host/spi-builder-workspace/Sources/Wealthsimple/URLConfiguration.swift:16: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
9 |
10 | /// Singleton class that manages the base URL configuration for all Wealthsimple API endpoints
11 | final class URLConfiguration {
| `- note: class 'URLConfiguration' does not conform to the 'Sendable' protocol
12 |
13 | private static let defaultBaseURL = "https://api.production.wealthsimple.com/v1/"
14 |
15 | /// Shared singleton instance
16 | 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
17 |
18 | /// Base URL for all Wealthsimple API endpoints
[4/11] 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 | }
[5/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/URLConfiguration.swift:16: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
9 |
10 | /// Singleton class that manages the base URL configuration for all Wealthsimple API endpoints
11 | final class URLConfiguration {
| `- note: class 'URLConfiguration' does not conform to the 'Sendable' protocol
12 |
13 | private static let defaultBaseURL = "https://api.production.wealthsimple.com/v1/"
14 |
15 | /// Shared singleton instance
16 | 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
17 |
18 | /// Base URL for all Wealthsimple API endpoints
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:51: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
49 | private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "positions")! }
50 |
51 | 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
52 | var dateFormatter = DateFormatter()
53 | dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:145: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
143 | private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "transactions")! }
144 |
145 | 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
146 | var dateFormatter = DateFormatter()
147 | dateFormatter.dateFormat = "yyyy-MM-dd"
[6/11] Compiling Wealthsimple String+CamelCase.swift
[7/11] 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()
[8/11] Compiling Wealthsimple WealthsimplePosition.swift
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:51: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
49 | private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "positions")! }
50 |
51 | 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
52 | var dateFormatter = DateFormatter()
53 | dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimplePosition.swift:106: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
104 | token.authenticateRequest(request) { request in
105 | let task = session.dataTask(with: request) { data, response, error in
106 | 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'
107 | }
108 | task.resume()
[9/11] Compiling Wealthsimple WealthsimpleAsset.swift
[10/11] Compiling Wealthsimple WealthsimpleDownloader.swift
[11/11] Compiling Wealthsimple WealthsimpleTransaction.swift
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:145: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
143 | private static var baseUrl: URLComponents { URLConfiguration.shared.urlComponents(for: "transactions")! }
144 |
145 | 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
146 | var dateFormatter = DateFormatter()
147 | dateFormatter.dateFormat = "yyyy-MM-dd"
/host/spi-builder-workspace/Sources/Wealthsimple/WealthsimpleTransaction.swift:230:90: warning: capture of 'completion' with non-sendable type '(Result<[any Transaction], TransactionError>) -> Void' in a '@Sendable' closure; this is an error in the Swift 6 language mode
228 | token.authenticateRequest(request) { request in
229 | let task = session.dataTask(with: request) { data, response, error in
230 | handleResponse(data: data, response: response, error: error, completion: completion)
| |- warning: capture of 'completion' with non-sendable type '(Result<[any Transaction], 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'
231 | }
232 | task.resume()
Build complete! (11.86s)
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" : [
"Extensions/XCTestCase.swift",
"ExtensionsTests/StringCamelCaseTests.swift",
"Helpers/DownloaderTestCase.swift",
"Helpers/MockAccount.swift",
"Helpers/MockCredentialStorage.swift",
"Helpers/MockURLProtocol.swift",
"TokenTests.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",
"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:8106a39f56f5bb7aad9f0d9a94f1e5362f9a40b692f7bc17efe17b7b91dc65fc
Status: Image is up to date for registry.gitlab.com/finestructure/spi-images:android-6.1-latest
Done.