Build Information
Successful build of SwiftBeanCountSheetSync, reference v1.1.1 (7cd150), with Swift 6.1 for macOS (SPM) on 12 Nov 2025 01:12:41 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 InferSendableFromCapturesBuild Log
========================================
RunAll
========================================
Builder version: 4.68.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/Nef10/SwiftBeanCountSheetSync.git
Reference: v1.1.1
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/Nef10/SwiftBeanCountSheetSync
* tag v1.1.1 -> FETCH_HEAD
HEAD is now at 7cd1504 Update Model + Parser
Cloned https://github.com/Nef10/SwiftBeanCountSheetSync.git
Revision (git rev-parse @):
7cd15040c0bb7caa524687b90f6d5e23edd57194
SUCCESS checkout https://github.com/Nef10/SwiftBeanCountSheetSync.git at v1.1.1
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/Nef10/SwiftBeanCountSheetSync.git
https://github.com/Nef10/SwiftBeanCountSheetSync.git
{
"dependencies" : [
{
"identity" : "swiftbeancountmodel",
"requirement" : {
"exact" : [
"0.2.0"
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/SwiftBeanCountModel.git"
},
{
"identity" : "swiftbeancountparser",
"requirement" : {
"exact" : [
"0.1.9"
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/SwiftBeanCountParser.git"
},
{
"identity" : "googleauthentication",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.3",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/GoogleAuthentication.git"
}
],
"manifest_display_name" : "SwiftBeanCountSheetSync",
"name" : "SwiftBeanCountSheetSync",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "10.15"
}
],
"products" : [
{
"name" : "SwiftBeanCountSheetSync",
"targets" : [
"SwiftBeanCountSheetSync"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SwiftBeanCountSheetSyncTests",
"module_type" : "SwiftTarget",
"name" : "SwiftBeanCountSheetSyncTests",
"path" : "Tests/SwiftBeanCountSheetSyncTests",
"sources" : [
"SwiftBeanCountSheetSyncTests.swift"
],
"target_dependencies" : [
"SwiftBeanCountSheetSync"
],
"type" : "test"
},
{
"c99name" : "SwiftBeanCountSheetSync",
"module_type" : "SwiftTarget",
"name" : "SwiftBeanCountSheetSync",
"path" : "Sources/SwiftBeanCountSheetSync",
"product_dependencies" : [
"SwiftBeanCountModel",
"SwiftBeanCountParser",
"GoogleAuthentication"
],
"product_memberships" : [
"SwiftBeanCountSheetSync"
],
"sources" : [
"Downloader.swift",
"LedgerReader.swift",
"LedgerSettings.swift",
"SheetDownloader.swift",
"SheetParser.swift",
"Syncer.swift",
"TransactionMapper.swift",
"Uploader.swift"
],
"type" : "library"
}
],
"tools_version" : "5.3"
}
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/8] Write sources
[7/8] Write swift-version-2F0A5646E1D333AE.txt
[9/60] Emitting module SwiftBeanCountParserUtils
[10/60] Compiling SwiftBeanCountParserUtils String.swift
[11/60] Compiling OAuthSwift OAuthLogProtocol.swift
[12/60] Compiling OAuthSwift OAuthSwift.swift
[13/61] Compiling OAuthSwift NSError+OAuthSwift.swift
[14/61] Compiling OAuthSwift NotificationCenter+OAuthSwift.swift
[15/61] Compiling OAuthSwift OAuth1Swift.swift
[16/61] Compiling OAuthSwift OAuth2Swift.swift
[17/61] Compiling OAuthSwift Collection+OAuthSwift.swift
[18/61] Compiling OAuthSwift Data+OAuthSwift.swift
[19/61] Emitting module SwiftBeanCountModel
[20/61] Compiling OAuthSwift OAuthSwiftOpenURLExternally.swift
[21/61] Compiling OAuthSwift OAuthSwiftURLHandlerProxy.swift
[22/61] Compiling OAuthSwift Dictionary+OAuthSwift.swift
[23/61] Compiling OAuthSwift HMAC.swift
[24/61] Compiling OAuthSwift ASWebAuthenticationURLHandler.swift
[25/61] Compiling OAuthSwift ExtensionContextURLHandler.swift
[26/61] Compiling OAuthSwift OAuthWebViewController.swift
[27/61] Compiling OAuthSwift SFAuthenticationURLHandler.swift
[28/61] Compiling OAuthSwift SafariURLHandler.swift
[29/61] Compiling OAuthSwift Int+OAuthSwift.swift
[30/61] Compiling KeychainAccess Keychain.swift
[31/61] Emitting module KeychainAccess
[32/61] Compiling SwiftBeanCountModel ValidationResult.swift
[33/77] Emitting module OAuthSwift
[34/80] Compiling OAuthSwift SHA1.swift
[35/80] Compiling OAuthSwift String+OAuthSwift.swift
[36/80] Compiling OAuthSwift UIApplication+OAuthSwift.swift
[37/80] Compiling SwiftBeanCountParser MetaDataParser.swift
[38/80] Compiling SwiftBeanCountParser OptionParser.swift
[43/80] Compiling SwiftBeanCountParser PriceParser.swift
[44/80] Compiling SwiftBeanCountParser PluginParser.swift
[45/80] Compiling SwiftBeanCountParser PostingParser.swift
[48/81] Compiling SwiftBeanCountParser EventParser.swift
[49/81] Compiling SwiftBeanCountParser Collection.swift
[50/81] Compiling SwiftBeanCountParser CommodityParser.swift
[51/81] Compiling SwiftBeanCountParser CostParser.swift
[52/81] Compiling SwiftBeanCountParser AccountParser.swift
[53/81] Compiling SwiftBeanCountParser BalanceParser.swift
[54/81] Compiling SwiftBeanCountParser CustomsParser.swift
[55/81] Compiling SwiftBeanCountParser DateParser.swift
[56/81] Emitting module SwiftBeanCountParser
[57/81] Compiling SwiftBeanCountParser Parser.swift
[58/81] Compiling SwiftBeanCountParser ParserUtils.swift
[59/81] Compiling OAuthSwift URL+OAuthSwift.swift
[60/81] Compiling OAuthSwift URLConvertible.swift
[61/81] Compiling OAuthSwift Utils.swift
[62/81] Compiling SwiftBeanCountParser TransactionMetaDataParser.swift
[67/81] Compiling OAuthSwift OAuthSwiftCredential.swift
[68/81] Compiling OAuthSwift OAuthSwiftError.swift
[69/81] Compiling OAuthSwift OAuthSwiftHTTPRequest.swift
[70/81] Compiling OAuthSwift OAuthSwiftMultipartData.swift
[71/81] Compiling OAuthSwift OAuthSwiftResponse.swift
[72/81] Compiling OAuthSwift OAuthSwiftURLHandlerType.swift
[75/81] Compiling OAuthSwift OAuthSwiftClient.swift
[82/84] Compiling GoogleAuthentication Authentication.swift
[83/84] Emitting module GoogleAuthentication
[84/84] Compiling GoogleAuthentication ASWebAuthenticationURLHandler.swift
[85/93] Compiling SwiftBeanCountSheetSync Uploader.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:18:26: warning: capture of 'self' with non-sendable type 'Uploader' in a '@Sendable' closure
12 |
13 | /// Uploads transactions from the ledger to the sheet
14 | public class Uploader: GenericSyncer, Syncer {
| `- note: class 'Uploader' does not conform to the 'Sendable' protocol
15 |
16 | public func start(authentication: Authentication, completion: @escaping (Result<SyncResult, Error>) -> Void) {
17 | DispatchQueue.global(qos: .userInitiated).async { [self] in
18 | let result = readLedgerSettingsAndTransactions()
| `- warning: capture of 'self' with non-sendable type 'Uploader' in a '@Sendable' closure
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:20:86: warning: capture of 'authentication' with non-sendable type 'Authentication' in a '@Sendable' closure
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'authentication' with non-sendable type 'Authentication' in a '@Sendable' closure
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/.build/checkouts/GoogleAuthentication/Sources/GoogleAuthentication/Authentication.swift:15:14: note: class 'Authentication' does not conform to the 'Sendable' protocol
13 |
14 | /// Wraper around OAuthSwift and KeychainAccess to authenticate to Google APIs while automatically saving the tokens into the keychain
15 | public class Authentication {
| `- note: class 'Authentication' does not conform to the 'Sendable' protocol
16 |
17 | private static let keychainKey = "googleOAuthCredentials"
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'GoogleAuthentication'
8 |
9 | import Foundation
10 | import GoogleAuthentication
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'GoogleAuthentication'
11 | import SwiftBeanCountModel
12 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:35:13: warning: capture of 'completion' with non-sendable type '(Result<SyncResult, any Error>) -> Void' in a '@Sendable' closure
33 | }
34 | }
35 | completion(result)
| |- warning: capture of 'completion' with non-sendable type '(Result<SyncResult, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
36 | }
37 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:20:45: warning: capture of 'self' with non-sendable type 'Uploader' in an isolated closure; this is an error in the Swift 6 language mode
12 |
13 | /// Uploads transactions from the ledger to the sheet
14 | public class Uploader: GenericSyncer, Syncer {
| `- note: class 'Uploader' does not conform to the 'Sendable' protocol
15 |
16 | public func start(authentication: Authentication, completion: @escaping (Result<SyncResult, Error>) -> Void) {
:
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'self' with non-sendable type 'Uploader' in an isolated closure; this is an error in the Swift 6 language mode
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Uploader.swift:20:86: warning: capture of 'authentication' with non-sendable type 'Authentication' in an isolated closure; this is an error in the Swift 6 language mode
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'authentication' with non-sendable type 'Authentication' in an isolated closure; this is an error in the Swift 6 language mode
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/.build/checkouts/GoogleAuthentication/Sources/GoogleAuthentication/Authentication.swift:15:14: note: class 'Authentication' does not conform to the 'Sendable' protocol
13 |
14 | /// Wraper around OAuthSwift and KeychainAccess to authenticate to Google APIs while automatically saving the tokens into the keychain
15 | public class Authentication {
| `- note: class 'Authentication' does not conform to the 'Sendable' protocol
16 |
17 | private static let keychainKey = "googleOAuthCredentials"
[86/93] Compiling SwiftBeanCountSheetSync TransactionMapper.swift
[87/93] Compiling SwiftBeanCountSheetSync LedgerReader.swift
[88/93] Compiling SwiftBeanCountSheetSync Syncer.swift
[89/93] Compiling SwiftBeanCountSheetSync SheetDownloader.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/SheetDownloader.swift:39:24: warning: capture of 'result' with non-sendable type 'Result<OAuthSwiftResponse, OAuthSwiftError>' in a '@Sendable' closure
37 | authentication.startAuthorizedGETRequest("https://sheets.googleapis.com/v4/spreadsheets/\(id)/values/\(area)") { result in
38 | DispatchQueue.global(qos: .userInitiated).async {
39 | switch result {
| `- warning: capture of 'result' with non-sendable type 'Result<OAuthSwiftResponse, OAuthSwiftError>' in a '@Sendable' closure
40 | case .success(let response):
41 | guard let data = try? JSONSerialization.jsonObject(with: response.data, options: []) as? [String: Any], let values = data["values"] as? [[String]] else {
/Users/admin/builder/spi-builder-workspace/.build/checkouts/OAuthSwift/Sources/OAuthSwiftResponse.swift:13:14: note: class 'OAuthSwiftResponse' does not conform to the 'Sendable' protocol
11 | /// Response object
12 | @objc
13 | public class OAuthSwiftResponse: NSObject { // not a struct for objc
| `- note: class 'OAuthSwiftResponse' does not conform to the 'Sendable' protocol
14 | /// The data returned by the server.
15 | public var data: Data
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/SheetDownloader.swift:42:25: warning: capture of 'completion' with non-sendable type '(Result<[[String]], SheetDownloader.DownloaderError>) -> Void' in a '@Sendable' closure
40 | case .success(let response):
41 | guard let data = try? JSONSerialization.jsonObject(with: response.data, options: []) as? [String: Any], let values = data["values"] as? [[String]] else {
42 | completion(.failure(.unableToParseResponse("Unable to parse response: \(response.dataString() ?? "")")))
| |- warning: capture of 'completion' with non-sendable type '(Result<[[String]], SheetDownloader.DownloaderError>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
43 | return
44 | }
[90/93] Compiling SwiftBeanCountSheetSync LedgerSettings.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:27:16: warning: static property 'fallbackAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
25 | public struct LedgerSettings {
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
| `- warning: static property 'fallbackAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
29 |
/Users/admin/builder/spi-builder-workspace/.build/checkouts/SwiftBeanCountModel/Sources/SwiftBeanCountModel/AccountName.swift:18:15: note: struct 'AccountName' does not conform to the 'Sendable' protocol
16 |
17 | /// Struct with represents just the name of an Account
18 | public struct AccountName: AccountItem {
| `- note: struct 'AccountName' does not conform to the 'Sendable' protocol
19 |
20 | /// Full quilified name of the account, e.g. Assets:Cash:CAD
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'SwiftBeanCountModel'
8 |
9 | import Foundation
10 | import SwiftBeanCountModel
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'SwiftBeanCountModel'
11 |
12 | enum LedgerSettingsConstants {
:
25 | public struct LedgerSettings {
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
| |- note: add '@MainActor' to make static property 'fallbackAccountName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
29 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:28:16: warning: static property 'ownAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
| |- warning: static property 'ownAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'ownAccountName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
29 |
30 | /// Commodity symbol for all transactions - The syncronization only supports one commodity
/Users/admin/builder/spi-builder-workspace/.build/checkouts/SwiftBeanCountModel/Sources/SwiftBeanCountModel/AccountName.swift:18:15: note: struct 'AccountName' does not conform to the 'Sendable' protocol
16 |
17 | /// Struct with represents just the name of an Account
18 | public struct AccountName: AccountItem {
| `- note: struct 'AccountName' does not conform to the 'Sendable' protocol
19 |
20 | /// Full quilified name of the account, e.g. Assets:Cash:CAD
[91/93] Emitting module SwiftBeanCountSheetSync
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:27:16: warning: static property 'fallbackAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
25 | public struct LedgerSettings {
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
| `- warning: static property 'fallbackAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
29 |
/Users/admin/builder/spi-builder-workspace/.build/checkouts/SwiftBeanCountModel/Sources/SwiftBeanCountModel/AccountName.swift:18:15: note: struct 'AccountName' does not conform to the 'Sendable' protocol
16 |
17 | /// Struct with represents just the name of an Account
18 | public struct AccountName: AccountItem {
| `- note: struct 'AccountName' does not conform to the 'Sendable' protocol
19 |
20 | /// Full quilified name of the account, e.g. Assets:Cash:CAD
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'SwiftBeanCountModel'
8 |
9 | import Foundation
10 | import SwiftBeanCountModel
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'SwiftBeanCountModel'
11 |
12 | enum LedgerSettingsConstants {
:
25 | public struct LedgerSettings {
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
| |- note: add '@MainActor' to make static property 'fallbackAccountName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
29 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/LedgerSettings.swift:28:16: warning: static property 'ownAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
26 |
27 | static let fallbackAccountName = try! AccountName("Expenses:TODO") // swiftlint:disable:this force_try
28 | static let ownAccountName = try! AccountName("Assets:TODO") // swiftlint:disable:this force_try
| |- warning: static property 'ownAccountName' is not concurrency-safe because non-'Sendable' type 'AccountName' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'ownAccountName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
29 |
30 | /// Commodity symbol for all transactions - The syncronization only supports one commodity
/Users/admin/builder/spi-builder-workspace/.build/checkouts/SwiftBeanCountModel/Sources/SwiftBeanCountModel/AccountName.swift:18:15: note: struct 'AccountName' does not conform to the 'Sendable' protocol
16 |
17 | /// Struct with represents just the name of an Account
18 | public struct AccountName: AccountItem {
| `- note: struct 'AccountName' does not conform to the 'Sendable' protocol
19 |
20 | /// Full quilified name of the account, e.g. Assets:Cash:CAD
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/SheetParser.swift:50: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
48 | }
49 |
50 | 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
51 | var dateFormatter = DateFormatter()
52 | dateFormatter.dateFormat = "yyyy-MM-dd"
[92/93] Compiling SwiftBeanCountSheetSync SheetParser.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/SheetParser.swift:50: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
48 | }
49 |
50 | 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
51 | var dateFormatter = DateFormatter()
52 | dateFormatter.dateFormat = "yyyy-MM-dd"
[93/93] Compiling SwiftBeanCountSheetSync Downloader.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:18:26: warning: capture of 'self' with non-sendable type 'Downloader' in a '@Sendable' closure
12 |
13 | /// Downloads transactions from the Sheet and merges them into transactions in the ledgers
14 | public class Downloader: GenericSyncer, Syncer {
| `- note: class 'Downloader' does not conform to the 'Sendable' protocol
15 |
16 | public func start(authentication: Authentication, completion: @escaping (Result<SyncResult, Error>) -> Void) {
17 | DispatchQueue.global(qos: .userInitiated).async { [self] in
18 | let result = readLedgerSettingsAndTransactions()
| `- warning: capture of 'self' with non-sendable type 'Downloader' in a '@Sendable' closure
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:20:86: warning: capture of 'authentication' with non-sendable type 'Authentication' in a '@Sendable' closure
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'authentication' with non-sendable type 'Authentication' in a '@Sendable' closure
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/.build/checkouts/GoogleAuthentication/Sources/GoogleAuthentication/Authentication.swift:15:14: note: class 'Authentication' does not conform to the 'Sendable' protocol
13 |
14 | /// Wraper around OAuthSwift and KeychainAccess to authenticate to Google APIs while automatically saving the tokens into the keychain
15 | public class Authentication {
| `- note: class 'Authentication' does not conform to the 'Sendable' protocol
16 |
17 | private static let keychainKey = "googleOAuthCredentials"
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:10:1: warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'GoogleAuthentication'
8 |
9 | import Foundation
10 | import GoogleAuthentication
| `- warning: add '@preconcurrency' to suppress 'Sendable'-related warnings from module 'GoogleAuthentication'
11 | import SwiftBeanCountModel
12 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:36:13: warning: capture of 'completion' with non-sendable type '(Result<SyncResult, any Error>) -> Void' in a '@Sendable' closure
34 | }
35 | }
36 | completion(result)
| |- warning: capture of 'completion' with non-sendable type '(Result<SyncResult, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
37 | }
38 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:20:45: warning: capture of 'self' with non-sendable type 'Downloader' in an isolated closure; this is an error in the Swift 6 language mode
12 |
13 | /// Downloads transactions from the Sheet and merges them into transactions in the ledgers
14 | public class Downloader: GenericSyncer, Syncer {
| `- note: class 'Downloader' does not conform to the 'Sendable' protocol
15 |
16 | public func start(authentication: Authentication, completion: @escaping (Result<SyncResult, Error>) -> Void) {
:
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'self' with non-sendable type 'Downloader' in an isolated closure; this is an error in the Swift 6 language mode
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/Sources/SwiftBeanCountSheetSync/Downloader.swift:20:86: warning: capture of 'authentication' with non-sendable type 'Authentication' in an isolated closure; this is an error in the Swift 6 language mode
18 | let result = readLedgerSettingsAndTransactions()
19 | .flatMap { ledgerTransactions, ledgerSettings -> Result<SyncResult, Error> in
20 | let sheetTransactions = getTransactionsFromSheet(authentication: authentication, ledgerSettings: ledgerSettings)
| `- warning: capture of 'authentication' with non-sendable type 'Authentication' in an isolated closure; this is an error in the Swift 6 language mode
21 | switch sheetTransactions {
22 | case .success(let (sheetTransactions, sheetParserErrors)):
/Users/admin/builder/spi-builder-workspace/.build/checkouts/GoogleAuthentication/Sources/GoogleAuthentication/Authentication.swift:15:14: note: class 'Authentication' does not conform to the 'Sendable' protocol
13 |
14 | /// Wraper around OAuthSwift and KeychainAccess to authenticate to Google APIs while automatically saving the tokens into the keychain
15 | public class Authentication {
| `- note: class 'Authentication' does not conform to the 'Sendable' protocol
16 |
17 | private static let keychainKey = "googleOAuthCredentials"
Build complete! (33.84s)
Fetching https://github.com/Nef10/GoogleAuthentication.git
Fetching https://github.com/Nef10/SwiftBeanCountModel.git
Fetching https://github.com/Nef10/SwiftBeanCountParser.git
[1/2374] Fetching swiftbeancountparser
[453/3512] Fetching swiftbeancountparser, googleauthentication
[1083/7254] Fetching swiftbeancountparser, googleauthentication, swiftbeancountmodel
Fetched https://github.com/Nef10/SwiftBeanCountParser.git from cache (2.63s)
Fetched https://github.com/Nef10/GoogleAuthentication.git from cache (2.63s)
Fetched https://github.com/Nef10/SwiftBeanCountModel.git from cache (2.63s)
Computing version for https://github.com/Nef10/GoogleAuthentication.git
Computed https://github.com/Nef10/GoogleAuthentication.git at 1.0.3 (3.24s)
Fetching https://github.com/kishikawakatsumi/KeychainAccess.git
Fetching https://github.com/OAuthSwift/OAuthSwift.git
[1/4386] Fetching keychainaccess
[45/9534] Fetching keychainaccess, oauthswift
Fetched https://github.com/kishikawakatsumi/KeychainAccess.git from cache (1.33s)
Fetched https://github.com/OAuthSwift/OAuthSwift.git from cache (1.33s)
Computing version for https://github.com/Nef10/SwiftBeanCountParser.git
Computed https://github.com/Nef10/SwiftBeanCountParser.git at 0.1.9 (1.94s)
Fetching https://github.com/Nef10/SwiftBeanCountParserUtils.git
[1/969] Fetching swiftbeancountparserutils
Fetched https://github.com/Nef10/SwiftBeanCountParserUtils.git from cache (0.80s)
Computing version for https://github.com/Nef10/SwiftBeanCountModel.git
Computed https://github.com/Nef10/SwiftBeanCountModel.git at 0.2.0 (1.39s)
Computing version for https://github.com/OAuthSwift/OAuthSwift.git
Computed https://github.com/OAuthSwift/OAuthSwift.git at 2.2.0 (0.61s)
Fetching https://github.com/tid-kijyun/Kanna.git
Fetching https://github.com/httpswift/swifter.git
Fetching https://github.com/phimage/Erik.git
[1/642] Fetching erik
[168/3032] Fetching erik, kanna
[481/9082] Fetching erik, kanna, swifter
Fetched https://github.com/phimage/Erik.git from cache (0.79s)
[2712/8440] Fetching kanna, swifter
Fetched https://github.com/httpswift/swifter.git from cache (1.41s)
Fetched https://github.com/tid-kijyun/Kanna.git from cache (1.41s)
Computing version for https://github.com/Nef10/SwiftBeanCountParserUtils.git
Computed https://github.com/Nef10/SwiftBeanCountParserUtils.git at 1.0.0 (2.02s)
Computing version for https://github.com/httpswift/swifter.git
Computed https://github.com/httpswift/swifter.git at 1.5.0 (0.59s)
Computing version for https://github.com/kishikawakatsumi/KeychainAccess.git
Computed https://github.com/kishikawakatsumi/KeychainAccess.git at 4.2.2 (0.61s)
Computing version for https://github.com/phimage/Erik.git
Computed https://github.com/phimage/Erik.git at 5.1.0 (0.57s)
Fetching https://github.com/Thomvis/BrightFutures.git
Fetching https://github.com/nvzqz/FileKit.git
[1/4067] Fetching brightfutures
[42/7190] Fetching brightfutures, filekit
Fetched https://github.com/nvzqz/FileKit.git from cache (1.61s)
Fetched https://github.com/Thomvis/BrightFutures.git from cache (1.61s)
Computing version for https://github.com/nvzqz/FileKit.git
Computed https://github.com/nvzqz/FileKit.git at 6.1.0 (2.23s)
Computing version for https://github.com/Thomvis/BrightFutures.git
Computed https://github.com/Thomvis/BrightFutures.git at 8.2.0 (0.57s)
Computing version for https://github.com/tid-kijyun/Kanna.git
Computed https://github.com/tid-kijyun/Kanna.git at 5.3.0 (0.58s)
Creating working copy for https://github.com/Thomvis/BrightFutures.git
Working copy of https://github.com/Thomvis/BrightFutures.git resolved at 8.2.0
Creating working copy for https://github.com/phimage/Erik.git
Working copy of https://github.com/phimage/Erik.git resolved at 5.1.0
Creating working copy for https://github.com/kishikawakatsumi/KeychainAccess.git
Working copy of https://github.com/kishikawakatsumi/KeychainAccess.git resolved at 4.2.2
Creating working copy for https://github.com/httpswift/swifter.git
Working copy of https://github.com/httpswift/swifter.git resolved at 1.5.0
Creating working copy for https://github.com/OAuthSwift/OAuthSwift.git
Working copy of https://github.com/OAuthSwift/OAuthSwift.git resolved at 2.2.0
Creating working copy for https://github.com/tid-kijyun/Kanna.git
Working copy of https://github.com/tid-kijyun/Kanna.git resolved at 5.3.0
Creating working copy for https://github.com/Nef10/SwiftBeanCountParserUtils.git
Working copy of https://github.com/Nef10/SwiftBeanCountParserUtils.git resolved at 1.0.0
Creating working copy for https://github.com/Nef10/GoogleAuthentication.git
Working copy of https://github.com/Nef10/GoogleAuthentication.git resolved at 1.0.3
Creating working copy for https://github.com/Nef10/SwiftBeanCountModel.git
Working copy of https://github.com/Nef10/SwiftBeanCountModel.git resolved at 0.2.0
Creating working copy for https://github.com/Nef10/SwiftBeanCountParser.git
Working copy of https://github.com/Nef10/SwiftBeanCountParser.git resolved at 0.1.9
Creating working copy for https://github.com/nvzqz/FileKit.git
Working copy of https://github.com/nvzqz/FileKit.git resolved at 6.1.0
Build complete.
{
"dependencies" : [
{
"identity" : "swiftbeancountmodel",
"requirement" : {
"exact" : [
"0.2.0"
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/SwiftBeanCountModel.git"
},
{
"identity" : "swiftbeancountparser",
"requirement" : {
"exact" : [
"0.1.9"
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/SwiftBeanCountParser.git"
},
{
"identity" : "googleauthentication",
"requirement" : {
"range" : [
{
"lower_bound" : "1.0.3",
"upper_bound" : "2.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/Nef10/GoogleAuthentication.git"
}
],
"manifest_display_name" : "SwiftBeanCountSheetSync",
"name" : "SwiftBeanCountSheetSync",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "macos",
"version" : "10.15"
}
],
"products" : [
{
"name" : "SwiftBeanCountSheetSync",
"targets" : [
"SwiftBeanCountSheetSync"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SwiftBeanCountSheetSyncTests",
"module_type" : "SwiftTarget",
"name" : "SwiftBeanCountSheetSyncTests",
"path" : "Tests/SwiftBeanCountSheetSyncTests",
"sources" : [
"SwiftBeanCountSheetSyncTests.swift"
],
"target_dependencies" : [
"SwiftBeanCountSheetSync"
],
"type" : "test"
},
{
"c99name" : "SwiftBeanCountSheetSync",
"module_type" : "SwiftTarget",
"name" : "SwiftBeanCountSheetSync",
"path" : "Sources/SwiftBeanCountSheetSync",
"product_dependencies" : [
"SwiftBeanCountModel",
"SwiftBeanCountParser",
"GoogleAuthentication"
],
"product_memberships" : [
"SwiftBeanCountSheetSync"
],
"sources" : [
"Downloader.swift",
"LedgerReader.swift",
"LedgerSettings.swift",
"SheetDownloader.swift",
"SheetParser.swift",
"Syncer.swift",
"TransactionMapper.swift",
"Uploader.swift"
],
"type" : "library"
}
],
"tools_version" : "5.3"
}
Done.