Build Information
Successful build of swift-configs, reference main (fb2394
), with Swift 6.1 for macOS (SPM) on 1 Sep 2025 13:35:39 UTC.
Swift 6 data race errors: 28
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64
Build Log
========================================
RunAll
========================================
Builder version: 4.67.1
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/dankinsoid/swift-configs.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/dankinsoid/swift-configs
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at fb23946 Refactor configuration key access to use ConfigKey for consistency across multiple handlers
Cloned https://github.com/dankinsoid/swift-configs.git
Revision (git rev-parse @):
fb23946a6e8188f1fce9c4cec8ea58657e49ac8b
SUCCESS checkout https://github.com/dankinsoid/swift-configs.git at main
========================================
ResolveProductDependencies
========================================
Resolving dependencies ...
{
"identity": ".resolve-product-dependencies",
"name": "resolve-dependencies",
"url": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies",
"dependencies": [
{
"identity": "swift-configs",
"name": "swift-configs",
"url": "https://github.com/dankinsoid/swift-configs.git",
"version": "unspecified",
"path": "/Users/admin/builder/spi-builder-workspace/.resolve-product-dependencies/.build/checkouts/swift-configs",
"dependencies": [
]
}
]
}
Fetching https://github.com/dankinsoid/swift-configs.git
[1/839] Fetching swift-configs
Fetched https://github.com/dankinsoid/swift-configs.git from cache (0.85s)
Creating working copy for https://github.com/dankinsoid/swift-configs.git
Working copy of https://github.com/dankinsoid/swift-configs.git resolved at main (fb23946)
warning: '.resolve-product-dependencies': dependency 'swift-configs' is not used by any target
Found 0 product dependencies
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/dankinsoid/swift-configs.git
https://github.com/dankinsoid/swift-configs.git
{
"dependencies" : [
],
"manifest_display_name" : "swift-configs",
"name" : "swift-configs",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "SwiftConfigs",
"targets" : [
"SwiftConfigs"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SwiftConfigsTests",
"module_type" : "SwiftTarget",
"name" : "SwiftConfigsTests",
"path" : "Tests/SwiftConfigsTests",
"sources" : [
"ConfigStoreObserverTests.swift",
"MigrationConfigKeyTests.swift",
"SwiftConfigsTests.swift"
],
"target_dependencies" : [
"SwiftConfigs"
],
"type" : "test"
},
{
"c99name" : "SwiftConfigs",
"module_type" : "SwiftTarget",
"name" : "SwiftConfigs",
"path" : "Sources/SwiftConfigs",
"product_memberships" : [
"SwiftConfigs"
],
"sources" : [
"ConfigCategory.swift",
"ConfigFail.swift",
"ConfigKey+constant.swift",
"ConfigKey.swift",
"ConfigState.swift",
"ConfigStore.swift",
"ConfigStoreObserver.swift",
"ConfigTransformer.swift",
"ConfigWrapper.swift",
"Configs.swift",
"ConfigsAsyncSequences.swift",
"ConfigsCancellation.swift",
"ConfigsNamespace.swift",
"ConfigsProtocol.swift",
"ConfigsSystem.swift",
"ConfigsType.swift",
"EnvironmentVariableConfigsHandler.swift",
"InMemoryConfigsHandler.swift",
"InfoPlistConfigStore.swift",
"KeychainConfigs.swift",
"Locks.swift",
"MigrationConfigKey.swift",
"MigrationConfigsHandler.swift",
"MultiplexConfigsHandler.swift",
"NOOPConfigsHandler.swift",
"PrefixConfigsHandler.swift",
"StoreRegistry.swift",
"UbiquitousKeyValueStoreConfigsHandler.swift",
"UserDefaultsConfigsHandler.swift"
],
"type" : "library"
}
],
"tools_version" : "5.6"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/30] Emitting module SwiftConfigs
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:31:16: warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
29 | ]
30 |
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
| |- warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'registry' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/StoreRegistry.swift:12:20: note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
10 |
11 | /// The main configuration store that manages multiple category stores
12 | public final class StoreRegistry: StoreRegistryType {
| `- note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
13 |
14 | /// Whether any store has completed a fetch operation
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:33:32: warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
| |- warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'errorHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'errorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | @Locked private static var isBootstrapped = false
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:34:32: warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
34 | @Locked private static var isBootstrapped = false
| |- warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isBootstrapped' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isBootstrapped' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | /// Bootstraps the configuration system with category-specific stores
<unknown>:0: note: a function type must be marked '@Sendable' to conform to 'Sendable'
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:89:23: warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
87 |
88 | /// The default error handler which triggers a fatal error in debug builds.
89 | public static let defaultErrorHandler: (ConfigFail) -> Void = { error in
| |- warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'defaultErrorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 | #if DEBUG
91 | fatalError(error.localizedDescription)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InMemoryConfigsHandler.swift:60:17: warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
58 | public static let shared = InMemoryConfigStore()
59 |
60 | private var _values: [String: String]
| `- warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
61 | private let lock = ReadWriteLock()
62 | private let listenHelper = ConfigStoreObserver()
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InfoPlistConfigStore.swift:10:25: warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
8 | /// The bundle whose Info.plist is used as the configuration source
9 | public let bundle: Bundle
10 | @Locked private var cache: [String: String] = [:]
| `- warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
11 | @Locked private var missing: Set<String> = []
12 | private let encoder = JSONEncoder()
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:75:21: warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
75 | public static var `default` = KeychainConfigStore()
| |- warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'default' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
76 |
77 | /// Creates a keychain configuration store with specified security options
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:246:22: warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
244 | /// Most secure option for normal use. Requires the device to be actively unlocked.
245 | /// - Note: May cause issues for background app operations
246 | public static let whenUnlocked = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlocked)
| |- warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlocked' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
247 |
248 | /// Item is accessible after the first device unlock (default)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:252:22: warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
250 | /// Recommended for most configuration data. Accessible once the device has been
251 | /// unlocked at least once since boot, even when subsequently locked.
252 | public static let afterFirstUnlock = SecAttrAccessible(rawValue: kSecAttrAccessibleAfterFirstUnlock)
| |- warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'afterFirstUnlock' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
253 |
254 | /// Item is always accessible regardless of device lock state
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:258:22: warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
256 | /// - Warning: Least secure option. Use only for non-sensitive configuration data
257 | @available(iOS, introduced: 4.0, deprecated: 12.0, message: "Use an accessibility level that provides some user protection, such as afterFirstUnlock")
258 | public static let always = SecAttrAccessible(rawValue: kSecAttrAccessibleAlways)
| |- warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'always' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
259 |
260 | /// Item is accessible only when unlocked and never syncs to iCloud
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:263:22: warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
261 | ///
262 | /// Like `whenUnlocked` but explicitly prevents iCloud synchronization.
263 | public static let whenUnlockedThisDeviceOnly = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
| |- warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlockedThisDeviceOnly' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
264 | }
265 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:293:22: warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
291 | /// The most common requirement - accepts Touch ID, Face ID, or device passcode.
292 | /// Recommended for most Secure Enclave use cases.
293 | public static let userPresence = SecureEnclaveAccessControl(rawValue: .userPresence)
| |- warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'userPresence' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
294 |
295 | /// Requires device passcode entry (no biometrics accepted)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:299:22: warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
297 | /// Forces passcode entry even if biometrics are available. Use when requiring
298 | /// the highest level of deliberate user action.
299 | public static let devicePasscode = SecureEnclaveAccessControl(rawValue: .devicePasscode)
| |- warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'devicePasscode' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
300 |
301 | /// Allows cryptographic operations with private keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:304:22: warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
302 | ///
303 | /// Required for key generation and signing operations in the Secure Enclave.
304 | public static let privateKeyUsage = SecureEnclaveAccessControl(rawValue: .privateKeyUsage)
| |- warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'privateKeyUsage' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | #if os(iOS)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:324:22: warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
322 | /// Accepts any enrolled biometric, even if additional biometrics are enrolled later.
323 | /// Falls back to passcode if biometrics are unavailable.
324 | public static let biometryAny = SecureEnclaveAccessControl(rawValue: .biometryAny)
| |- warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryAny' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
325 |
326 | @available(macOS 10.13.4, *)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:331:22: warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
329 | /// Invalidated when new biometrics are enrolled. More secure than `biometryAny`
330 | /// as it ensures only the originally enrolled biometrics can access the data.
331 | public static let biometryCurrentSet = SecureEnclaveAccessControl(rawValue: .biometryCurrentSet)
| |- warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryCurrentSet' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
332 | #endif
333 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:354:22: warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
352 | /// The most common and flexible keychain item type. Suitable for storing
353 | /// configuration values, tokens, and other password-like data.
354 | public static let genericPassword = SecClass(rawValue: kSecClassGenericPassword)
| |- warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'genericPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
355 |
356 | /// Internet password items for web credentials
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:360:22: warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
358 | /// Specifically designed for storing credentials associated with internet services.
359 | /// Includes additional attributes like server, protocol, and path.
360 | public static let internetPassword = SecClass(rawValue: kSecClassInternetPassword)
| |- warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'internetPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
361 |
362 | /// Digital certificates
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:365:22: warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
363 | ///
364 | /// For storing X.509 certificates and other certificate data.
365 | public static let certificate = SecClass(rawValue: kSecClassCertificate)
| |- warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'certificate' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
366 |
367 | /// Cryptographic keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:371:22: warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
369 | /// For storing public/private key pairs and symmetric keys.
370 | /// Used with Secure Enclave for hardware-backed key storage.
371 | public static let key = SecClass(rawValue: kSecClassKey)
| |- warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'key' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 | /// Identity items (certificate + private key pairs)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:376:22: warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
374 | ///
375 | /// Combines a certificate with its associated private key.
376 | public static let identity = SecClass(rawValue: kSecClassIdentity)
| |- warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'identity' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
377 | }
378 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:50:14: warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
48 |
49 | /// Keychain security class determining the type of item stored
50 | public let secClass: SecClass
| `- warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
51 |
52 | /// Whether items sync across devices via iCloud Keychain
:
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:58:14: warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
56 |
57 | /// Accessibility level controlling when items can be accessed
58 | public let attrAccessible: SecAttrAccessible
| `- warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
59 |
60 | /// Whether to use hardware-backed Secure Enclave protection
:
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:69:14: warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
67 | ///
68 | /// Specifies authentication requirements (biometrics, passcode, etc.) for accessing protected keys.
69 | public let secureEnclaveAccessControl: SecureEnclaveAccessControl?
| `- warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
:
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:72:21: warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
72 | private let listenHelper = ConfigStoreObserver()
| `- warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:29:20: note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
27 | /// }
28 | /// ```
29 | public final class ConfigStoreObserver {
| `- note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
30 |
31 | private var observers: [UUID: () -> Void] = [:]
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:87:23: warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
85 |
86 | /// Write the migrated value to the new key location
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
| |- warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'writeToNew' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:89:23: warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
| |- warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'removeOld' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 |
91 | /// Default policy: write to new key and delete old key
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:92:23: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
90 |
91 | /// Default policy: write to new key and delete old key
92 | public static let `default`: MigrationFirstReadPolicy = [.writeToNew, .removeOld]
| |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
93 | }
94 |
[4/32] Compiling SwiftConfigs InfoPlistConfigStore.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InfoPlistConfigStore.swift:10:25: warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
8 | /// The bundle whose Info.plist is used as the configuration source
9 | public let bundle: Bundle
10 | @Locked private var cache: [String: String] = [:]
| `- warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
11 | @Locked private var missing: Set<String> = []
12 | private let encoder = JSONEncoder()
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:75:21: warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
75 | public static var `default` = KeychainConfigStore()
| |- warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'default' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
76 |
77 | /// Creates a keychain configuration store with specified security options
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:246:22: warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
244 | /// Most secure option for normal use. Requires the device to be actively unlocked.
245 | /// - Note: May cause issues for background app operations
246 | public static let whenUnlocked = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlocked)
| |- warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlocked' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
247 |
248 | /// Item is accessible after the first device unlock (default)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:252:22: warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
250 | /// Recommended for most configuration data. Accessible once the device has been
251 | /// unlocked at least once since boot, even when subsequently locked.
252 | public static let afterFirstUnlock = SecAttrAccessible(rawValue: kSecAttrAccessibleAfterFirstUnlock)
| |- warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'afterFirstUnlock' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
253 |
254 | /// Item is always accessible regardless of device lock state
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:258:22: warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
256 | /// - Warning: Least secure option. Use only for non-sensitive configuration data
257 | @available(iOS, introduced: 4.0, deprecated: 12.0, message: "Use an accessibility level that provides some user protection, such as afterFirstUnlock")
258 | public static let always = SecAttrAccessible(rawValue: kSecAttrAccessibleAlways)
| |- warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'always' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
259 |
260 | /// Item is accessible only when unlocked and never syncs to iCloud
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:263:22: warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
261 | ///
262 | /// Like `whenUnlocked` but explicitly prevents iCloud synchronization.
263 | public static let whenUnlockedThisDeviceOnly = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
| |- warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlockedThisDeviceOnly' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
264 | }
265 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:293:22: warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
291 | /// The most common requirement - accepts Touch ID, Face ID, or device passcode.
292 | /// Recommended for most Secure Enclave use cases.
293 | public static let userPresence = SecureEnclaveAccessControl(rawValue: .userPresence)
| |- warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'userPresence' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
294 |
295 | /// Requires device passcode entry (no biometrics accepted)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:299:22: warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
297 | /// Forces passcode entry even if biometrics are available. Use when requiring
298 | /// the highest level of deliberate user action.
299 | public static let devicePasscode = SecureEnclaveAccessControl(rawValue: .devicePasscode)
| |- warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'devicePasscode' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
300 |
301 | /// Allows cryptographic operations with private keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:304:22: warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
302 | ///
303 | /// Required for key generation and signing operations in the Secure Enclave.
304 | public static let privateKeyUsage = SecureEnclaveAccessControl(rawValue: .privateKeyUsage)
| |- warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'privateKeyUsage' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | #if os(iOS)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:324:22: warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
322 | /// Accepts any enrolled biometric, even if additional biometrics are enrolled later.
323 | /// Falls back to passcode if biometrics are unavailable.
324 | public static let biometryAny = SecureEnclaveAccessControl(rawValue: .biometryAny)
| |- warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryAny' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
325 |
326 | @available(macOS 10.13.4, *)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:331:22: warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
329 | /// Invalidated when new biometrics are enrolled. More secure than `biometryAny`
330 | /// as it ensures only the originally enrolled biometrics can access the data.
331 | public static let biometryCurrentSet = SecureEnclaveAccessControl(rawValue: .biometryCurrentSet)
| |- warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryCurrentSet' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
332 | #endif
333 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:354:22: warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
352 | /// The most common and flexible keychain item type. Suitable for storing
353 | /// configuration values, tokens, and other password-like data.
354 | public static let genericPassword = SecClass(rawValue: kSecClassGenericPassword)
| |- warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'genericPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
355 |
356 | /// Internet password items for web credentials
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:360:22: warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
358 | /// Specifically designed for storing credentials associated with internet services.
359 | /// Includes additional attributes like server, protocol, and path.
360 | public static let internetPassword = SecClass(rawValue: kSecClassInternetPassword)
| |- warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'internetPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
361 |
362 | /// Digital certificates
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:365:22: warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
363 | ///
364 | /// For storing X.509 certificates and other certificate data.
365 | public static let certificate = SecClass(rawValue: kSecClassCertificate)
| |- warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'certificate' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
366 |
367 | /// Cryptographic keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:371:22: warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
369 | /// For storing public/private key pairs and symmetric keys.
370 | /// Used with Secure Enclave for hardware-backed key storage.
371 | public static let key = SecClass(rawValue: kSecClassKey)
| |- warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'key' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 | /// Identity items (certificate + private key pairs)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:376:22: warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
374 | ///
375 | /// Combines a certificate with its associated private key.
376 | public static let identity = SecClass(rawValue: kSecClassIdentity)
| |- warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'identity' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
377 | }
378 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:50:14: warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
48 |
49 | /// Keychain security class determining the type of item stored
50 | public let secClass: SecClass
| `- warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
51 |
52 | /// Whether items sync across devices via iCloud Keychain
:
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:58:14: warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
56 |
57 | /// Accessibility level controlling when items can be accessed
58 | public let attrAccessible: SecAttrAccessible
| `- warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
59 |
60 | /// Whether to use hardware-backed Secure Enclave protection
:
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:69:14: warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
67 | ///
68 | /// Specifies authentication requirements (biometrics, passcode, etc.) for accessing protected keys.
69 | public let secureEnclaveAccessControl: SecureEnclaveAccessControl?
| `- warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
:
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:72:21: warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
72 | private let listenHelper = ConfigStoreObserver()
| `- warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:29:20: note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
27 | /// }
28 | /// ```
29 | public final class ConfigStoreObserver {
| `- note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
30 |
31 | private var observers: [UUID: () -> Void] = [:]
[5/32] Compiling SwiftConfigs KeychainConfigs.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InfoPlistConfigStore.swift:10:25: warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
8 | /// The bundle whose Info.plist is used as the configuration source
9 | public let bundle: Bundle
10 | @Locked private var cache: [String: String] = [:]
| `- warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
11 | @Locked private var missing: Set<String> = []
12 | private let encoder = JSONEncoder()
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:75:21: warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
75 | public static var `default` = KeychainConfigStore()
| |- warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'default' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
76 |
77 | /// Creates a keychain configuration store with specified security options
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:246:22: warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
244 | /// Most secure option for normal use. Requires the device to be actively unlocked.
245 | /// - Note: May cause issues for background app operations
246 | public static let whenUnlocked = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlocked)
| |- warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlocked' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
247 |
248 | /// Item is accessible after the first device unlock (default)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:252:22: warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
250 | /// Recommended for most configuration data. Accessible once the device has been
251 | /// unlocked at least once since boot, even when subsequently locked.
252 | public static let afterFirstUnlock = SecAttrAccessible(rawValue: kSecAttrAccessibleAfterFirstUnlock)
| |- warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'afterFirstUnlock' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
253 |
254 | /// Item is always accessible regardless of device lock state
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:258:22: warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
256 | /// - Warning: Least secure option. Use only for non-sensitive configuration data
257 | @available(iOS, introduced: 4.0, deprecated: 12.0, message: "Use an accessibility level that provides some user protection, such as afterFirstUnlock")
258 | public static let always = SecAttrAccessible(rawValue: kSecAttrAccessibleAlways)
| |- warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'always' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
259 |
260 | /// Item is accessible only when unlocked and never syncs to iCloud
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:263:22: warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
261 | ///
262 | /// Like `whenUnlocked` but explicitly prevents iCloud synchronization.
263 | public static let whenUnlockedThisDeviceOnly = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
| |- warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlockedThisDeviceOnly' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
264 | }
265 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:293:22: warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
291 | /// The most common requirement - accepts Touch ID, Face ID, or device passcode.
292 | /// Recommended for most Secure Enclave use cases.
293 | public static let userPresence = SecureEnclaveAccessControl(rawValue: .userPresence)
| |- warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'userPresence' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
294 |
295 | /// Requires device passcode entry (no biometrics accepted)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:299:22: warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
297 | /// Forces passcode entry even if biometrics are available. Use when requiring
298 | /// the highest level of deliberate user action.
299 | public static let devicePasscode = SecureEnclaveAccessControl(rawValue: .devicePasscode)
| |- warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'devicePasscode' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
300 |
301 | /// Allows cryptographic operations with private keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:304:22: warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
302 | ///
303 | /// Required for key generation and signing operations in the Secure Enclave.
304 | public static let privateKeyUsage = SecureEnclaveAccessControl(rawValue: .privateKeyUsage)
| |- warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'privateKeyUsage' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | #if os(iOS)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:324:22: warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
322 | /// Accepts any enrolled biometric, even if additional biometrics are enrolled later.
323 | /// Falls back to passcode if biometrics are unavailable.
324 | public static let biometryAny = SecureEnclaveAccessControl(rawValue: .biometryAny)
| |- warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryAny' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
325 |
326 | @available(macOS 10.13.4, *)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:331:22: warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
329 | /// Invalidated when new biometrics are enrolled. More secure than `biometryAny`
330 | /// as it ensures only the originally enrolled biometrics can access the data.
331 | public static let biometryCurrentSet = SecureEnclaveAccessControl(rawValue: .biometryCurrentSet)
| |- warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryCurrentSet' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
332 | #endif
333 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:354:22: warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
352 | /// The most common and flexible keychain item type. Suitable for storing
353 | /// configuration values, tokens, and other password-like data.
354 | public static let genericPassword = SecClass(rawValue: kSecClassGenericPassword)
| |- warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'genericPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
355 |
356 | /// Internet password items for web credentials
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:360:22: warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
358 | /// Specifically designed for storing credentials associated with internet services.
359 | /// Includes additional attributes like server, protocol, and path.
360 | public static let internetPassword = SecClass(rawValue: kSecClassInternetPassword)
| |- warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'internetPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
361 |
362 | /// Digital certificates
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:365:22: warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
363 | ///
364 | /// For storing X.509 certificates and other certificate data.
365 | public static let certificate = SecClass(rawValue: kSecClassCertificate)
| |- warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'certificate' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
366 |
367 | /// Cryptographic keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:371:22: warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
369 | /// For storing public/private key pairs and symmetric keys.
370 | /// Used with Secure Enclave for hardware-backed key storage.
371 | public static let key = SecClass(rawValue: kSecClassKey)
| |- warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'key' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 | /// Identity items (certificate + private key pairs)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:376:22: warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
374 | ///
375 | /// Combines a certificate with its associated private key.
376 | public static let identity = SecClass(rawValue: kSecClassIdentity)
| |- warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'identity' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
377 | }
378 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:50:14: warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
48 |
49 | /// Keychain security class determining the type of item stored
50 | public let secClass: SecClass
| `- warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
51 |
52 | /// Whether items sync across devices via iCloud Keychain
:
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:58:14: warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
56 |
57 | /// Accessibility level controlling when items can be accessed
58 | public let attrAccessible: SecAttrAccessible
| `- warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
59 |
60 | /// Whether to use hardware-backed Secure Enclave protection
:
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:69:14: warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
67 | ///
68 | /// Specifies authentication requirements (biometrics, passcode, etc.) for accessing protected keys.
69 | public let secureEnclaveAccessControl: SecureEnclaveAccessControl?
| `- warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
:
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:72:21: warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
72 | private let listenHelper = ConfigStoreObserver()
| `- warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:29:20: note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
27 | /// }
28 | /// ```
29 | public final class ConfigStoreObserver {
| `- note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
30 |
31 | private var observers: [UUID: () -> Void] = [:]
[6/32] Compiling SwiftConfigs Locks.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InfoPlistConfigStore.swift:10:25: warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
8 | /// The bundle whose Info.plist is used as the configuration source
9 | public let bundle: Bundle
10 | @Locked private var cache: [String: String] = [:]
| `- warning: stored property '_cache' of 'Sendable'-conforming class 'InfoPlistConfigStore' is mutable; this is an error in the Swift 6 language mode
11 | @Locked private var missing: Set<String> = []
12 | private let encoder = JSONEncoder()
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:75:21: warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
75 | public static var `default` = KeychainConfigStore()
| |- warning: static property 'default' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'default' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
76 |
77 | /// Creates a keychain configuration store with specified security options
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:246:22: warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
244 | /// Most secure option for normal use. Requires the device to be actively unlocked.
245 | /// - Note: May cause issues for background app operations
246 | public static let whenUnlocked = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlocked)
| |- warning: static property 'whenUnlocked' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlocked' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
247 |
248 | /// Item is accessible after the first device unlock (default)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:252:22: warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
250 | /// Recommended for most configuration data. Accessible once the device has been
251 | /// unlocked at least once since boot, even when subsequently locked.
252 | public static let afterFirstUnlock = SecAttrAccessible(rawValue: kSecAttrAccessibleAfterFirstUnlock)
| |- warning: static property 'afterFirstUnlock' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'afterFirstUnlock' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
253 |
254 | /// Item is always accessible regardless of device lock state
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:258:22: warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
256 | /// - Warning: Least secure option. Use only for non-sensitive configuration data
257 | @available(iOS, introduced: 4.0, deprecated: 12.0, message: "Use an accessibility level that provides some user protection, such as afterFirstUnlock")
258 | public static let always = SecAttrAccessible(rawValue: kSecAttrAccessibleAlways)
| |- warning: static property 'always' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'always' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
259 |
260 | /// Item is accessible only when unlocked and never syncs to iCloud
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:263:22: warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
:
261 | ///
262 | /// Like `whenUnlocked` but explicitly prevents iCloud synchronization.
263 | public static let whenUnlockedThisDeviceOnly = SecAttrAccessible(rawValue: kSecAttrAccessibleWhenUnlockedThisDeviceOnly)
| |- warning: static property 'whenUnlockedThisDeviceOnly' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecAttrAccessible' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'whenUnlockedThisDeviceOnly' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
264 | }
265 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:293:22: warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
291 | /// The most common requirement - accepts Touch ID, Face ID, or device passcode.
292 | /// Recommended for most Secure Enclave use cases.
293 | public static let userPresence = SecureEnclaveAccessControl(rawValue: .userPresence)
| |- warning: static property 'userPresence' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'userPresence' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
294 |
295 | /// Requires device passcode entry (no biometrics accepted)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:299:22: warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
297 | /// Forces passcode entry even if biometrics are available. Use when requiring
298 | /// the highest level of deliberate user action.
299 | public static let devicePasscode = SecureEnclaveAccessControl(rawValue: .devicePasscode)
| |- warning: static property 'devicePasscode' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'devicePasscode' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
300 |
301 | /// Allows cryptographic operations with private keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:304:22: warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
302 | ///
303 | /// Required for key generation and signing operations in the Secure Enclave.
304 | public static let privateKeyUsage = SecureEnclaveAccessControl(rawValue: .privateKeyUsage)
| |- warning: static property 'privateKeyUsage' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'privateKeyUsage' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | #if os(iOS)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:324:22: warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
322 | /// Accepts any enrolled biometric, even if additional biometrics are enrolled later.
323 | /// Falls back to passcode if biometrics are unavailable.
324 | public static let biometryAny = SecureEnclaveAccessControl(rawValue: .biometryAny)
| |- warning: static property 'biometryAny' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryAny' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
325 |
326 | @available(macOS 10.13.4, *)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:331:22: warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
:
329 | /// Invalidated when new biometrics are enrolled. More secure than `biometryAny`
330 | /// as it ensures only the originally enrolled biometrics can access the data.
331 | public static let biometryCurrentSet = SecureEnclaveAccessControl(rawValue: .biometryCurrentSet)
| |- warning: static property 'biometryCurrentSet' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecureEnclaveAccessControl' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'biometryCurrentSet' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
332 | #endif
333 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:354:22: warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
352 | /// The most common and flexible keychain item type. Suitable for storing
353 | /// configuration values, tokens, and other password-like data.
354 | public static let genericPassword = SecClass(rawValue: kSecClassGenericPassword)
| |- warning: static property 'genericPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'genericPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
355 |
356 | /// Internet password items for web credentials
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:360:22: warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
358 | /// Specifically designed for storing credentials associated with internet services.
359 | /// Includes additional attributes like server, protocol, and path.
360 | public static let internetPassword = SecClass(rawValue: kSecClassInternetPassword)
| |- warning: static property 'internetPassword' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'internetPassword' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
361 |
362 | /// Digital certificates
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:365:22: warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
363 | ///
364 | /// For storing X.509 certificates and other certificate data.
365 | public static let certificate = SecClass(rawValue: kSecClassCertificate)
| |- warning: static property 'certificate' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'certificate' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
366 |
367 | /// Cryptographic keys
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:371:22: warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
369 | /// For storing public/private key pairs and symmetric keys.
370 | /// Used with Secure Enclave for hardware-backed key storage.
371 | public static let key = SecClass(rawValue: kSecClassKey)
| |- warning: static property 'key' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'key' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
372 |
373 | /// Identity items (certificate + private key pairs)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:376:22: warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
:
374 | ///
375 | /// Combines a certificate with its associated private key.
376 | public static let identity = SecClass(rawValue: kSecClassIdentity)
| |- warning: static property 'identity' is not concurrency-safe because non-'Sendable' type 'KeychainConfigStore.SecClass' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'identity' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
377 | }
378 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:50:14: warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
48 |
49 | /// Keychain security class determining the type of item stored
50 | public let secClass: SecClass
| `- warning: stored property 'secClass' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecClass'; this is an error in the Swift 6 language mode
51 |
52 | /// Whether items sync across devices via iCloud Keychain
:
337 | /// Each security class has different attributes and behaviors in the keychain.
338 | /// Most configuration stores should use `genericPassword`.
339 | public struct SecClass: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecClass' conform to the 'Sendable' protocol
340 | public let rawValue: CFString
341 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:58:14: warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
56 |
57 | /// Accessibility level controlling when items can be accessed
58 | public let attrAccessible: SecAttrAccessible
| `- warning: stored property 'attrAccessible' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecAttrAccessible'; this is an error in the Swift 6 language mode
59 |
60 | /// Whether to use hardware-backed Secure Enclave protection
:
232 | /// These values determine when your configuration values are accessible relative to
233 | /// device lock state and synchronization capabilities.
234 | public struct SecAttrAccessible: RawRepresentable {
| `- note: consider making struct 'SecAttrAccessible' conform to the 'Sendable' protocol
235 |
236 | public let rawValue: CFString
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:69:14: warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
67 | ///
68 | /// Specifies authentication requirements (biometrics, passcode, etc.) for accessing protected keys.
69 | public let secureEnclaveAccessControl: SecureEnclaveAccessControl?
| `- warning: stored property 'secureEnclaveAccessControl' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'KeychainConfigStore.SecureEnclaveAccessControl?'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
:
268 | /// These options specify authentication requirements when accessing keys stored in the Secure Enclave.
269 | /// Multiple options can be combined for layered security.
270 | public struct SecureEnclaveAccessControl: RawRepresentable, CaseIterable {
| `- note: consider making struct 'SecureEnclaveAccessControl' conform to the 'Sendable' protocol
271 | public let rawValue: SecAccessControlCreateFlags
272 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/KeychainConfigs.swift:72:21: warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
70 |
71 | // Observers for keychain changes
72 | private let listenHelper = ConfigStoreObserver()
| `- warning: stored property 'listenHelper' of 'Sendable'-conforming class 'KeychainConfigStore' has non-sendable type 'ConfigStoreObserver'; this is an error in the Swift 6 language mode
73 |
74 | /// Shared default keychain configuration store
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:29:20: note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
27 | /// }
28 | /// ```
29 | public final class ConfigStoreObserver {
| `- note: class 'ConfigStoreObserver' does not conform to the 'Sendable' protocol
30 |
31 | private var observers: [UUID: () -> Void] = [:]
[7/32] Compiling SwiftConfigs NOOPConfigsHandler.swift
[8/32] Compiling SwiftConfigs PrefixConfigsHandler.swift
[9/32] Compiling SwiftConfigs StoreRegistry.swift
[10/32] Compiling SwiftConfigs Configs.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsAsyncSequences.swift:40:34: warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
38 |
39 | cancellation = onChange { element in
40 | continuation.yield(element)
| |- warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'element' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
41 | }
42 | }
[11/32] Compiling SwiftConfigs ConfigsAsyncSequences.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsAsyncSequences.swift:40:34: warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
38 |
39 | cancellation = onChange { element in
40 | continuation.yield(element)
| |- warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'element' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
41 | }
42 | }
[12/32] Compiling SwiftConfigs ConfigsCancellation.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsAsyncSequences.swift:40:34: warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
38 |
39 | cancellation = onChange { element in
40 | continuation.yield(element)
| |- warning: sending 'element' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'element' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
41 | }
42 | }
[13/32] Compiling SwiftConfigs ConfigCategory.swift
[14/32] Compiling SwiftConfigs ConfigFail.swift
[15/32] Compiling SwiftConfigs ConfigKey+constant.swift
[16/32] Compiling SwiftConfigs MigrationConfigKey.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:87:23: warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
85 |
86 | /// Write the migrated value to the new key location
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
| |- warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'writeToNew' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:89:23: warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
| |- warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'removeOld' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 |
91 | /// Default policy: write to new key and delete old key
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:92:23: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
90 |
91 | /// Default policy: write to new key and delete old key
92 | public static let `default`: MigrationFirstReadPolicy = [.writeToNew, .removeOld]
| |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
93 | }
94 |
[17/32] Compiling SwiftConfigs MigrationConfigsHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:87:23: warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
85 |
86 | /// Write the migrated value to the new key location
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
| |- warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'writeToNew' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:89:23: warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
| |- warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'removeOld' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 |
91 | /// Default policy: write to new key and delete old key
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:92:23: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
90 |
91 | /// Default policy: write to new key and delete old key
92 | public static let `default`: MigrationFirstReadPolicy = [.writeToNew, .removeOld]
| |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
93 | }
94 |
[18/32] Compiling SwiftConfigs MultiplexConfigsHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:87:23: warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
85 |
86 | /// Write the migrated value to the new key location
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
| |- warning: static property 'writeToNew' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'writeToNew' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:89:23: warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
87 | public static let writeToNew = MigrationFirstReadPolicy(rawValue: 1 << 0)
88 | /// Remove the old key after successful migration
89 | public static let removeOld = MigrationFirstReadPolicy(rawValue: 1 << 1)
| |- warning: static property 'removeOld' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'removeOld' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 |
91 | /// Default policy: write to new key and delete old key
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/MigrationConfigKey.swift:92:23: warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
70 |
71 | /// Policy options for handling the first read during migration
72 | public struct MigrationFirstReadPolicy: OptionSet, Hashable, CaseIterable {
| `- note: consider making struct 'MigrationFirstReadPolicy' conform to the 'Sendable' protocol
73 |
74 | public var rawValue: UInt8
:
90 |
91 | /// Default policy: write to new key and delete old key
92 | public static let `default`: MigrationFirstReadPolicy = [.writeToNew, .removeOld]
| |- warning: static property 'default' is not concurrency-safe because non-'Sendable' type 'MigrationFirstReadPolicy' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'default' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
93 | }
94 |
[19/32] Compiling SwiftConfigs ConfigStoreObserver.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:130:13: warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
128 | } else {
129 | DispatchQueue.main.async {
130 | block()
| |- warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'block' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
131 | }
132 | }
[20/32] Compiling SwiftConfigs ConfigTransformer.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:130:13: warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
128 | } else {
129 | DispatchQueue.main.async {
130 | block()
| |- warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'block' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
131 | }
132 | }
[21/32] Compiling SwiftConfigs ConfigWrapper.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigStoreObserver.swift:130:13: warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
128 | } else {
129 | DispatchQueue.main.async {
130 | block()
| |- warning: sending 'block' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'block' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
131 | }
132 | }
[22/32] Compiling SwiftConfigs ConfigsNamespace.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:31:16: warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
29 | ]
30 |
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
| |- warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'registry' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/StoreRegistry.swift:12:20: note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
10 |
11 | /// The main configuration store that manages multiple category stores
12 | public final class StoreRegistry: StoreRegistryType {
| `- note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
13 |
14 | /// Whether any store has completed a fetch operation
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:33:32: warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
| |- warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'errorHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'errorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | @Locked private static var isBootstrapped = false
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:34:32: warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
34 | @Locked private static var isBootstrapped = false
| |- warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isBootstrapped' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isBootstrapped' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | /// Bootstraps the configuration system with category-specific stores
<unknown>:0: note: a function type must be marked '@Sendable' to conform to 'Sendable'
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:89:23: warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
87 |
88 | /// The default error handler which triggers a fatal error in debug builds.
89 | public static let defaultErrorHandler: (ConfigFail) -> Void = { error in
| |- warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'defaultErrorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 | #if DEBUG
91 | fatalError(error.localizedDescription)
[23/32] Compiling SwiftConfigs ConfigsProtocol.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:31:16: warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
29 | ]
30 |
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
| |- warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'registry' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/StoreRegistry.swift:12:20: note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
10 |
11 | /// The main configuration store that manages multiple category stores
12 | public final class StoreRegistry: StoreRegistryType {
| `- note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
13 |
14 | /// Whether any store has completed a fetch operation
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:33:32: warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
| |- warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'errorHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'errorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | @Locked private static var isBootstrapped = false
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:34:32: warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
34 | @Locked private static var isBootstrapped = false
| |- warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isBootstrapped' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isBootstrapped' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | /// Bootstraps the configuration system with category-specific stores
<unknown>:0: note: a function type must be marked '@Sendable' to conform to 'Sendable'
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:89:23: warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
87 |
88 | /// The default error handler which triggers a fatal error in debug builds.
89 | public static let defaultErrorHandler: (ConfigFail) -> Void = { error in
| |- warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'defaultErrorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 | #if DEBUG
91 | fatalError(error.localizedDescription)
[24/32] Compiling SwiftConfigs ConfigsSystem.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:31:16: warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
29 | ]
30 |
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
| |- warning: static property 'registry' is not concurrency-safe because non-'Sendable' type 'StoreRegistry' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'registry' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/StoreRegistry.swift:12:20: note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
10 |
11 | /// The main configuration store that manages multiple category stores
12 | public final class StoreRegistry: StoreRegistryType {
| `- note: class 'StoreRegistry' does not conform to the 'Sendable' protocol
13 |
14 | /// Whether any store has completed a fetch operation
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:33:32: warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | static let registry = StoreRegistry(isPreview ? mockStores : defaultStores)
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
| |- warning: static property 'errorHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'errorHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'errorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | @Locked private static var isBootstrapped = false
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:34:32: warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 |
33 | @Locked private static var errorHandler: (ConfigFail) -> Void = defaultErrorHandler
34 | @Locked private static var isBootstrapped = false
| |- warning: static property 'isBootstrapped' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'isBootstrapped' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'isBootstrapped' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | /// Bootstraps the configuration system with category-specific stores
<unknown>:0: note: a function type must be marked '@Sendable' to conform to 'Sendable'
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigsSystem.swift:89:23: warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
87 |
88 | /// The default error handler which triggers a fatal error in debug builds.
89 | public static let defaultErrorHandler: (ConfigFail) -> Void = { error in
| |- warning: static property 'defaultErrorHandler' is not concurrency-safe because non-'Sendable' type '(ConfigFail) -> Void' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'defaultErrorHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
90 | #if DEBUG
91 | fatalError(error.localizedDescription)
[25/32] Compiling SwiftConfigs ConfigsType.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InMemoryConfigsHandler.swift:60:17: warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
58 | public static let shared = InMemoryConfigStore()
59 |
60 | private var _values: [String: String]
| `- warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
61 | private let lock = ReadWriteLock()
62 | private let listenHelper = ConfigStoreObserver()
[26/32] Compiling SwiftConfigs EnvironmentVariableConfigsHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InMemoryConfigsHandler.swift:60:17: warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
58 | public static let shared = InMemoryConfigStore()
59 |
60 | private var _values: [String: String]
| `- warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
61 | private let lock = ReadWriteLock()
62 | private let listenHelper = ConfigStoreObserver()
[27/32] Compiling SwiftConfigs InMemoryConfigsHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/InMemoryConfigsHandler.swift:60:17: warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
58 | public static let shared = InMemoryConfigStore()
59 |
60 | private var _values: [String: String]
| `- warning: stored property '_values' of 'Sendable'-conforming class 'InMemoryConfigStore' is mutable; this is an error in the Swift 6 language mode
61 | private let lock = ReadWriteLock()
62 | private let listenHelper = ConfigStoreObserver()
[28/32] Compiling SwiftConfigs UbiquitousKeyValueStoreConfigsHandler.swift
[29/32] Compiling SwiftConfigs UserDefaultsConfigsHandler.swift
[30/32] Compiling SwiftConfigs ConfigKey.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:28:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
26 | self.key = key
27 | self.configs = configs
28 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
29 | }
30 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:60:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
58 | self.key = key
59 | self.configs = configs
60 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
61 | }
62 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
[31/32] Compiling SwiftConfigs ConfigState.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:28:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
26 | self.key = key
27 | self.configs = configs
28 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
29 | }
30 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:60:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
58 | self.key = key
59 | self.configs = configs
60 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
61 | }
62 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
[32/32] Compiling SwiftConfigs ConfigStore.swift
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:28:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
26 | self.key = key
27 | self.configs = configs
28 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
29 | }
30 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
/Users/admin/builder/spi-builder-workspace/Sources/SwiftConfigs/ConfigState.swift:60:47: error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
58 | self.key = key
59 | self.configs = configs
60 | _observer = StateObject(wrappedValue: ConfigObserver(configs: configs, key: key))
| `- error: call to main actor-isolated initializer 'init(configs:key:)' in a synchronous nonisolated context
61 | }
62 | }
:
69 | @Published var updater = false
70 |
71 | init<Access>(configs: Configs, key: ConfigKey<Value, Access>) {
| `- note: calls to initializer 'init(configs:key:)' from outside of its actor context are implicitly asynchronous
72 | startObservingIfNeeded(configs: configs, key: key)
73 | }
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64
[0/1] Planning build
Building for debugging...
[0/1] Write swift-version-2F0A5646E1D333AE.txt
[2/29] Emitting module SwiftConfigs
[3/31] Compiling SwiftConfigs ConfigsType.swift
[4/31] Compiling SwiftConfigs EnvironmentVariableConfigsHandler.swift
[5/31] Compiling SwiftConfigs InMemoryConfigsHandler.swift
[6/31] Compiling SwiftConfigs ConfigCategory.swift
[7/31] Compiling SwiftConfigs ConfigFail.swift
[8/31] Compiling SwiftConfigs ConfigKey+constant.swift
[9/31] Compiling SwiftConfigs Configs.swift
[10/31] Compiling SwiftConfigs ConfigsAsyncSequences.swift
[11/31] Compiling SwiftConfigs ConfigsCancellation.swift
[12/31] Compiling SwiftConfigs ConfigStoreObserver.swift
[13/31] Compiling SwiftConfigs ConfigTransformer.swift
[14/31] Compiling SwiftConfigs ConfigWrapper.swift
[15/31] Compiling SwiftConfigs MigrationConfigKey.swift
[16/31] Compiling SwiftConfigs MigrationConfigsHandler.swift
[17/31] Compiling SwiftConfigs MultiplexConfigsHandler.swift
[18/31] Compiling SwiftConfigs InfoPlistConfigStore.swift
[19/31] Compiling SwiftConfigs KeychainConfigs.swift
[20/31] Compiling SwiftConfigs Locks.swift
[21/31] Compiling SwiftConfigs NOOPConfigsHandler.swift
[22/31] Compiling SwiftConfigs PrefixConfigsHandler.swift
[23/31] Compiling SwiftConfigs StoreRegistry.swift
[24/31] Compiling SwiftConfigs UbiquitousKeyValueStoreConfigsHandler.swift
[25/31] Compiling SwiftConfigs UserDefaultsConfigsHandler.swift
[26/31] Compiling SwiftConfigs ConfigKey.swift
[27/31] Compiling SwiftConfigs ConfigState.swift
[28/31] Compiling SwiftConfigs ConfigStore.swift
[29/31] Compiling SwiftConfigs ConfigsNamespace.swift
[30/31] Compiling SwiftConfigs ConfigsProtocol.swift
[31/31] Compiling SwiftConfigs ConfigsSystem.swift
Build complete! (1.94s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "swift-configs",
"name" : "swift-configs",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
],
"products" : [
{
"name" : "SwiftConfigs",
"targets" : [
"SwiftConfigs"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SwiftConfigsTests",
"module_type" : "SwiftTarget",
"name" : "SwiftConfigsTests",
"path" : "Tests/SwiftConfigsTests",
"sources" : [
"ConfigStoreObserverTests.swift",
"MigrationConfigKeyTests.swift",
"SwiftConfigsTests.swift"
],
"target_dependencies" : [
"SwiftConfigs"
],
"type" : "test"
},
{
"c99name" : "SwiftConfigs",
"module_type" : "SwiftTarget",
"name" : "SwiftConfigs",
"path" : "Sources/SwiftConfigs",
"product_memberships" : [
"SwiftConfigs"
],
"sources" : [
"ConfigCategory.swift",
"ConfigFail.swift",
"ConfigKey+constant.swift",
"ConfigKey.swift",
"ConfigState.swift",
"ConfigStore.swift",
"ConfigStoreObserver.swift",
"ConfigTransformer.swift",
"ConfigWrapper.swift",
"Configs.swift",
"ConfigsAsyncSequences.swift",
"ConfigsCancellation.swift",
"ConfigsNamespace.swift",
"ConfigsProtocol.swift",
"ConfigsSystem.swift",
"ConfigsType.swift",
"EnvironmentVariableConfigsHandler.swift",
"InMemoryConfigsHandler.swift",
"InfoPlistConfigStore.swift",
"KeychainConfigs.swift",
"Locks.swift",
"MigrationConfigKey.swift",
"MigrationConfigsHandler.swift",
"MultiplexConfigsHandler.swift",
"NOOPConfigsHandler.swift",
"PrefixConfigsHandler.swift",
"StoreRegistry.swift",
"UbiquitousKeyValueStoreConfigsHandler.swift",
"UserDefaultsConfigsHandler.swift"
],
"type" : "library"
}
],
"tools_version" : "5.6"
}
Done.