Build Information
Successful build of Optimizely, reference v5.2.1 (2eae2b), with Swift 6.1 for macOS (SPM) on 26 Jan 2026 22:11:29 UTC.
Swift 6 data race errors: 10
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCapturesBuild Log
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[95/102] Compiling Optimizely OptimizelyClient+Decide.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[96/102] Compiling Optimizely OptimizelyDecideOption.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[97/102] Compiling Optimizely OptimizelyDecision.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[98/102] Compiling Optimizely OptimizelyUserContext+ObjC.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[99/102] Compiling Optimizely OptimizelyUserContext.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[100/102] Compiling Optimizely OptimizelyClient+ObjC.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[101/102] Compiling Optimizely OptimizelyClient.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
[102/102] Compiling Optimizely OptimizelyConfig+ObjC.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:104:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
102 | completion: @escaping DecideCompletion) {
103 | decisionQueue.async {
104 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:105:81: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
103 | decisionQueue.async {
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
106 | completion(decision)
107 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:106:17: warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
104 | guard let config = self.config else {
105 | let decision = OptimizelyDecision.errorDecision(key: key, user: user, error: .sdkNotReady)
106 | completion(decision)
| |- warning: capture of 'completion' with non-sendable type 'DecideCompletion' (aka '(OptimizelyDecision) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
107 | return
108 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:116:59: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
114 | }
115 |
116 | var allOptions = self.defaultDecideOptions + (options ?? [])
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
117 | // Filtering out `enabledFlagsOnly` to ensure users always get a result.
118 | allOptions.removeAll(where: { $0 == .enabledFlagsOnly })
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:121:97: warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
119 |
120 | let decisionMap = self.decide(user: user, keys: [key], options: allOptions, isAsync: true, ignoreDefaultOptions: true)
121 | let decision = decisionMap[key] ?? OptimizelyDecision.errorDecision(key: key, user: user, error: .generic)
| `- warning: implicit capture of 'user' requires that 'OptimizelyUserContext' conforms to 'Sendable'; this is an error in the Swift 6 language mode
122 | completion(decision)
123 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:29: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:47: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:151:74: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
149 | completion: @escaping DecideForKeysCompletion) {
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
152 | completion(decisions)
153 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:152:13: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
150 | decisionQueue.async {
151 | let decisions = self.decide(user: user, keys: keys, options: options, isAsync: true)
152 | completion(decisions)
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
153 | }
154 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:278:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
276 |
277 | decisionQueue.async {
278 | guard let config = self.config else {
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:22:12: note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:280:17: warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
278 | guard let config = self.config else {
279 | self.logger.e(OptimizelyError.sdkNotReady)
280 | completion([:])
| |- warning: capture of 'completion' with non-sendable type 'DecideForKeysCompletion' (aka '(Dictionary<String, OptimizelyDecision>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
281 | return
282 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:46: warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'user' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:23:14: note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyClient+Decide.swift:284:91: warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
282 | }
283 |
284 | let decision = self.decide(user: user, keys: config.featureFlagKeys, options: options, isAsync: true, ignoreDefaultOptions: false)
| `- warning: capture of 'options' with non-sendable type '[OptimizelyDecideOption]?' in a '@Sendable' closure
285 | completion(decision)
286 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyDecideOption.swift:20:19: note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
18 |
19 | /// Options controlling flag decisions.
20 | @objc public enum OptimizelyDecideOption: Int {
| `- note: consider making enum 'OptimizelyDecideOption' conform to the 'Sendable' protocol
21 | /// disable decision event tracking.
22 | case disableDecisionEvent
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:93:17: warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
21 |
22 | /// An object for user contexts that the SDK will use to make decisions for.
23 | public class OptimizelyUserContext {
| `- note: class 'OptimizelyUserContext' does not conform to the 'Sendable' protocol
24 | weak var optimizely: OptimizelyClient?
25 | public var userId: String
:
91 | // async call so event building overhead is not blocking context creation
92 | lock.async {
93 | self.optimizely?.identifyUserToOdp(userId: userId)
| `- warning: capture of 'self' with non-sendable type 'OptimizelyUserContext' in a '@Sendable' closure
94 | }
95 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:833:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
831 | // non-blocking (event data serialization takes time)
832 | eventLock.async {
833 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:836:82: warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
834 |
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
| `- warning: capture of 'experiment' with non-sendable type '(any ExperimentCore)?' in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/ExperimentCore.swift:19:10: note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | protocol ExperimentCore: OptimizelyExperiment {
| `- note: protocol 'ExperimentCore' does not conform to the 'Sendable' protocol
20 | var audiences: String { get set }
21 | var layerId: String { get }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:837:81: warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
835 | guard let body = BatchEventBuilder.createImpressionEvent(config: config,
836 | experiment: experiment,
837 | variation: variation,
| `- warning: capture of 'variation' with non-sendable type 'Variation?' in a '@Sendable' closure
838 | userId: userId,
839 | attributes: attributes,
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/Variation.swift:19:8: note: consider making struct 'Variation' conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | struct Variation: Codable, OptimizelyVariation {
| `- note: consider making struct 'Variation' conform to the 'Sendable' protocol
20 | var id: String
21 | var key: String
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:839:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
837 | variation: variation,
838 | userId: userId,
839 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
840 | flagKey: flagKey,
841 | ruleType: ruleType,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:873:32: warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
20 | public typealias OptimizelyEventTags = [String: Any]
21 |
22 | open class OptimizelyClient: NSObject {
| `- note: class 'OptimizelyClient' does not conform to the 'Sendable' protocol
23 |
24 | // MARK: - Properties
:
871 | // non-blocking (event data serialization takes time)
872 | eventLock.async {
873 | guard let config = self.config else { return }
| `- warning: capture of 'self' with non-sendable type 'OptimizelyClient' in a '@Sendable' closure
874 |
875 | guard let body = BatchEventBuilder.createConversionEvent(config: config,
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:878:82: warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
876 | eventKey: eventKey,
877 | userId: userId,
878 | attributes: attributes,
| `- warning: capture of 'attributes' with non-sendable type 'OptimizelyAttributes?' (aka 'Optional<Dictionary<String, Optional<Any>>>') in a '@Sendable' closure
879 | eventTags: eventTags) else {
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:879:81: warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
877 | userId: userId,
878 | attributes: attributes,
879 | eventTags: eventTags) else {
| `- warning: capture of 'eventTags' with non-sendable type 'OptimizelyEventTags?' (aka 'Optional<Dictionary<String, Any>>') in a '@Sendable' closure
880 | self.logger.e(OptimizelyError.eventBuildFailure(eventKey))
881 | return
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyClient.swift:967:17: warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
965 | if async {
966 | eventLock.async {
967 | notify()
| |- warning: capture of 'notify' with non-sendable type '() -> ()?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
968 | }
969 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:161:30: warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
159 | return await withCheckedContinuation { continuation in
160 | decideAsync(key: key, options: options) { decision in
161 | continuation.resume(returning: decision)
| |- warning: sending 'decision' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decision' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
162 | }
163 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:221:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
219 | return await withCheckedContinuation { continuation in
220 | decideAsync(keys: keys, options: options) { decisions in
221 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely+Decide/OptimizelyUserContext.swift:267:30: warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
265 | return await withCheckedContinuation { continuation in
266 | decideAllAsync(options: options) { decisions in
267 | continuation.resume(returning: decisions)
| |- warning: sending 'decisions' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'decisions' is passed as a 'sending' parameter; Uses in callee may race with later task-isolated uses
268 | }
269 | }
Build complete! (8.20s)
warning: 'spi-builder-workspace': Invalid Exclude '/Users/admin/builder/spi-builder-workspace/Sources/CLAUDE.md': File not found.
warning: 'spi-builder-workspace': found 1 file(s) which are unhandled; explicitly declare them as resources or exclude from the target
/Users/admin/builder/spi-builder-workspace/Sources/Supporting Files/Info.plist
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "Optimizely",
"name" : "Optimizely",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "10.0"
},
{
"name" : "tvos",
"version" : "10.0"
},
{
"name" : "macos",
"version" : "10.14"
},
{
"name" : "watchos",
"version" : "3.0"
}
],
"products" : [
{
"name" : "Optimizely",
"targets" : [
"Optimizely"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"swift_languages_versions" : [
"5"
],
"targets" : [
{
"c99name" : "Optimizely",
"module_type" : "SwiftTarget",
"name" : "Optimizely",
"path" : "Sources",
"product_memberships" : [
"Optimizely"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Sources/Supporting Files/PrivacyInfo.xcprivacy",
"rule" : {
"copy" : {
}
}
}
],
"sources" : [
"CMAB/CmabClient.swift",
"CMAB/CmabConfig.swift",
"CMAB/CmabService.swift",
"Customization/DefaultDatafileHandler.swift",
"Customization/DefaultEventDispatcher.swift",
"Customization/DefaultLogger.swift",
"Customization/DefaultUserProfileService.swift",
"Customization/Protocols/OPTDatafileHandler.swift",
"Customization/Protocols/OPTEventDispatcher.swift",
"Customization/Protocols/OPTLogger.swift",
"Customization/Protocols/OPTUserProfileService.swift",
"Data Model/Attribute.swift",
"Data Model/Audience/AttributeValue.swift",
"Data Model/Audience/Audience.swift",
"Data Model/Audience/ConditionHolder.swift",
"Data Model/Audience/ConditionLeaf.swift",
"Data Model/Audience/SemanticVersion.swift",
"Data Model/Audience/UserAttribute.swift",
"Data Model/Cmab.swift",
"Data Model/DispatchEvents/BatchEvent.swift",
"Data Model/DispatchEvents/EventForDispatch.swift",
"Data Model/Event.swift",
"Data Model/Experiment.swift",
"Data Model/ExperimentCore.swift",
"Data Model/FeatureFlag.swift",
"Data Model/FeatureVariable.swift",
"Data Model/Group.swift",
"Data Model/Holdout.swift",
"Data Model/HoldoutConfig.swift",
"Data Model/Integration.swift",
"Data Model/Project.swift",
"Data Model/ProjectConfig.swift",
"Data Model/Rollout.swift",
"Data Model/TrafficAllocation.swift",
"Data Model/Variable.swift",
"Data Model/Variation.swift",
"Extensions/Array+Extension.swift",
"Extensions/ArrayEventForDispatch+Extension.swift",
"Extensions/DataStoreQueueStackImpl+Extension.swift",
"Extensions/OptimizelyClient+Extension.swift",
"Implementation/Datastore/DataStoreFile.swift",
"Implementation/Datastore/DataStoreMemory.swift",
"Implementation/Datastore/DataStoreQueueStackImpl.swift",
"Implementation/Datastore/DataStoreUserDefaults.swift",
"Implementation/DecisionInfo.swift",
"Implementation/DecisionReasons.swift",
"Implementation/DecisionResponse.swift",
"Implementation/DefaultBucketer.swift",
"Implementation/DefaultDecisionService.swift",
"Implementation/DefaultNotificationCenter.swift",
"Implementation/Events/BatchEventBuilder.swift",
"Implementation/UserProfileTracker.swift",
"ODP/LruCache.swift",
"ODP/OdpConfig.swift",
"ODP/OdpEvent.swift",
"ODP/OdpEventApiManager.swift",
"ODP/OdpEventManager.swift",
"ODP/OdpManager.swift",
"ODP/OdpSegmentApiManager.swift",
"ODP/OdpSegmentManager.swift",
"ODP/OptimizelySdkSettings.swift",
"ODP/OptimizelySegmentOption.swift",
"Optimizely+Decide/OptimizelyClient+Decide.swift",
"Optimizely+Decide/OptimizelyDecideOption.swift",
"Optimizely+Decide/OptimizelyDecision.swift",
"Optimizely+Decide/OptimizelyUserContext+ObjC.swift",
"Optimizely+Decide/OptimizelyUserContext.swift",
"Optimizely/OptimizelyClient+ObjC.swift",
"Optimizely/OptimizelyClient.swift",
"Optimizely/OptimizelyConfig+ObjC.swift",
"Optimizely/OptimizelyConfig.swift",
"Optimizely/OptimizelyError.swift",
"Optimizely/OptimizelyJSON+ObjC.swift",
"Optimizely/OptimizelyJSON.swift",
"Optimizely/OptimizelyLogLevel.swift",
"Optimizely/OptimizelyResult.swift",
"Optimizely/VuidManager.swift",
"Protocols/BackgroundingCallbacks.swift",
"Protocols/DataStoreQueueStack.swift",
"Protocols/OPTBucketer.swift",
"Protocols/OPTDataStore.swift",
"Protocols/OPTDecisionService.swift",
"Protocols/OPTNotificationCenter.swift",
"Utils/AtomicArray.swift",
"Utils/AtomicDictionary.swift",
"Utils/AtomicProperty.swift",
"Utils/Constants.swift",
"Utils/HandlerRegistryService.swift",
"Utils/LogMessage.swift",
"Utils/MurmurHash3.swift",
"Utils/NetworkReachability.swift",
"Utils/Notifications.swift",
"Utils/RetryStrategy.swift",
"Utils/SDKVersion.swift",
"Utils/ThreadSafeLogger.swift",
"Utils/Utils.swift",
"watchOS/WatchBackgroundNotifier.swift"
],
"type" : "library"
}
],
"tools_version" : "5.3"
}
warning: 'spi-builder-workspace': Invalid Exclude '/Users/admin/builder/spi-builder-workspace/Sources/CLAUDE.md': File not found.
Done.