Build Information
Successful build of Optimizely, reference v6.0.1 (d46026), with Swift 6.1 for macOS (SPM) on 29 Oct 2026 18:59:33 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
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[79/102] Compiling Optimizely DefaultLogger.swift
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:61: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:139:33: warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
139 | attemptFetch()
| |- warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 | }
141 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:33: warning: mutation of captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: mutation of captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:47: warning: reference to captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:104: warning: reference to captured var 'attempt' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'attempt' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:121:14: warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
119 | var backoff = retryConfig.initialBackoff
120 |
121 | func attemptFetch() {
| `- warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
122 | doFetch(url: url, requestBody: requestBody, timeout: timeout) { result in
123 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:173:17: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
171 | let task = session.dataTask(with: request) { data, response, error in
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
175 | return
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:174:17: warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
| |- warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 | return
176 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:67:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
65 |
66 | let result = OptimizelyResult<Data?>.failure(optError)
67 | completionHandler(returnCached(result))
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
68 | return
69 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:86:21: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
84 | if error != nil {
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
87 | result = returnCached(.failure(optError)) // error recovery
88 | } else if let response = response as? HTTPURLResponse {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:87:30: warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
87 | result = returnCached(.failure(optError)) // error recovery
| |- warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
88 | } else if let response = response as? HTTPURLResponse {
89 | switch response.statusCode {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:112:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
110 | self.reachability.updateNumContiguousFails(isError: (error != nil))
111 |
112 | completionHandler(result)
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
113 | session.finishTasksAndInvalidate()
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:54:18: warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
52 | downloadQueue.async {
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
| `- warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
56 | return .success(data)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:254:17: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
252 |
253 | let timer = Timer.scheduledTimer(withTimeInterval: TimeInterval(updateInterval), repeats: false) { (timer) in
254 | self.performPerodicDownload(sdkKey: sdkKey,
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:24:16: warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
| |- warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'sharedInstance' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | // timer-interval for batching (0 = no batching, negative = use default)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:137:20: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
135 | open func flushEvents() {
136 | queueLock.async {
137 | guard !self.isFlushing else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
138 |
139 | self.isFlushing = true
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:192:25: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
190 | let delay = self.calculateRetryDelay(attempt: attempt)
191 | self.queueLock.asyncAfter(deadline: .now() + delay) {
192 | self.processNextBatch(failureCount: attempt)
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
193 | }
194 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:255:17: warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
253 | let task = session.uploadTask(with: request, from: event.body) { (_, _, error) in
254 | if let error = error {
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
| |- warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
256 | } else {
257 | self.logger.d("Event Sent")
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:257:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
256 | } else {
257 | self.logger.d("Event Sent")
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
258 | completionHandler(.success(event.body))
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:258:44: warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
256 | } else {
257 | self.logger.d("Event Sent")
258 | completionHandler(.success(event.body))
| `- warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
259 | }
260 |
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/DispatchEvents/EventForDispatch.swift:19:27: note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | @objcMembers public class EventForDispatch: NSObject, Codable {
| `- note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
20 | public static var eventEndpoint = "https://logx.optimizely.com/v1/events"
21 | public static var euEventEndpoint = "https://eu.logx.optimizely.com/v1/events"
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:319:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
320 | if self.eventQueue.count > 0 {
321 | self.flushEvents()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:320:24: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
320 | if self.eventQueue.count > 0 {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
321 | self.flushEvents()
322 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultLogger.swift:21:24: warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |
20 | open class DefaultLogger: OPTLogger {
21 | private static var _logLevel: OptimizelyLogLevel?
| |- warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert '_logLevel' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property '_logLevel' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 | public static var logLevel: OptimizelyLogLevel {
23 | get {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:83:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
81 | public required init() {
82 | lock.async {
83 | self.profiles = UserDefaults.standard.dictionary(forKey: self.kStorageName) as? UserProfileData ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
84 |
85 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:38: warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:29: warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:249:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
247 | let now = Date()
248 | DispatchQueue.main.async {
249 | if let timer = self.timers.property?[sdkKey]?.timer, timer.isValid {
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[80/102] Compiling Optimizely DefaultUserProfileService.swift
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:61: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:139:33: warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
139 | attemptFetch()
| |- warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 | }
141 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:33: warning: mutation of captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: mutation of captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:47: warning: reference to captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:104: warning: reference to captured var 'attempt' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'attempt' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:121:14: warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
119 | var backoff = retryConfig.initialBackoff
120 |
121 | func attemptFetch() {
| `- warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
122 | doFetch(url: url, requestBody: requestBody, timeout: timeout) { result in
123 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:173:17: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
171 | let task = session.dataTask(with: request) { data, response, error in
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
175 | return
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:174:17: warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
| |- warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 | return
176 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:67:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
65 |
66 | let result = OptimizelyResult<Data?>.failure(optError)
67 | completionHandler(returnCached(result))
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
68 | return
69 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:86:21: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
84 | if error != nil {
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
87 | result = returnCached(.failure(optError)) // error recovery
88 | } else if let response = response as? HTTPURLResponse {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:87:30: warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
87 | result = returnCached(.failure(optError)) // error recovery
| |- warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
88 | } else if let response = response as? HTTPURLResponse {
89 | switch response.statusCode {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:112:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
110 | self.reachability.updateNumContiguousFails(isError: (error != nil))
111 |
112 | completionHandler(result)
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
113 | session.finishTasksAndInvalidate()
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:54:18: warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
52 | downloadQueue.async {
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
| `- warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
56 | return .success(data)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:254:17: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
252 |
253 | let timer = Timer.scheduledTimer(withTimeInterval: TimeInterval(updateInterval), repeats: false) { (timer) in
254 | self.performPerodicDownload(sdkKey: sdkKey,
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:24:16: warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
| |- warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'sharedInstance' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | // timer-interval for batching (0 = no batching, negative = use default)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:137:20: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
135 | open func flushEvents() {
136 | queueLock.async {
137 | guard !self.isFlushing else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
138 |
139 | self.isFlushing = true
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:192:25: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
190 | let delay = self.calculateRetryDelay(attempt: attempt)
191 | self.queueLock.asyncAfter(deadline: .now() + delay) {
192 | self.processNextBatch(failureCount: attempt)
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
193 | }
194 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:255:17: warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
253 | let task = session.uploadTask(with: request, from: event.body) { (_, _, error) in
254 | if let error = error {
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
| |- warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
256 | } else {
257 | self.logger.d("Event Sent")
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:257:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
256 | } else {
257 | self.logger.d("Event Sent")
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
258 | completionHandler(.success(event.body))
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:258:44: warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
256 | } else {
257 | self.logger.d("Event Sent")
258 | completionHandler(.success(event.body))
| `- warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
259 | }
260 |
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/DispatchEvents/EventForDispatch.swift:19:27: note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | @objcMembers public class EventForDispatch: NSObject, Codable {
| `- note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
20 | public static var eventEndpoint = "https://logx.optimizely.com/v1/events"
21 | public static var euEventEndpoint = "https://eu.logx.optimizely.com/v1/events"
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:319:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
320 | if self.eventQueue.count > 0 {
321 | self.flushEvents()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:320:24: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
320 | if self.eventQueue.count > 0 {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
321 | self.flushEvents()
322 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultLogger.swift:21:24: warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |
20 | open class DefaultLogger: OPTLogger {
21 | private static var _logLevel: OptimizelyLogLevel?
| |- warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert '_logLevel' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property '_logLevel' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 | public static var logLevel: OptimizelyLogLevel {
23 | get {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:83:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
81 | public required init() {
82 | lock.async {
83 | self.profiles = UserDefaults.standard.dictionary(forKey: self.kStorageName) as? UserProfileData ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
84 |
85 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:38: warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:29: warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:249:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
247 | let now = Date()
248 | DispatchQueue.main.async {
249 | if let timer = self.timers.property?[sdkKey]?.timer, timer.isValid {
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[81/102] Compiling Optimizely OPTDatafileHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:61: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:139:33: warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
139 | attemptFetch()
| |- warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 | }
141 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:33: warning: mutation of captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: mutation of captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:47: warning: reference to captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:104: warning: reference to captured var 'attempt' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'attempt' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:121:14: warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
119 | var backoff = retryConfig.initialBackoff
120 |
121 | func attemptFetch() {
| `- warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
122 | doFetch(url: url, requestBody: requestBody, timeout: timeout) { result in
123 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:173:17: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
171 | let task = session.dataTask(with: request) { data, response, error in
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
175 | return
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:174:17: warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
| |- warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 | return
176 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:67:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
65 |
66 | let result = OptimizelyResult<Data?>.failure(optError)
67 | completionHandler(returnCached(result))
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
68 | return
69 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:86:21: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
84 | if error != nil {
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
87 | result = returnCached(.failure(optError)) // error recovery
88 | } else if let response = response as? HTTPURLResponse {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:87:30: warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
87 | result = returnCached(.failure(optError)) // error recovery
| |- warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
88 | } else if let response = response as? HTTPURLResponse {
89 | switch response.statusCode {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:112:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
110 | self.reachability.updateNumContiguousFails(isError: (error != nil))
111 |
112 | completionHandler(result)
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
113 | session.finishTasksAndInvalidate()
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:54:18: warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
52 | downloadQueue.async {
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
| `- warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
56 | return .success(data)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:254:17: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
252 |
253 | let timer = Timer.scheduledTimer(withTimeInterval: TimeInterval(updateInterval), repeats: false) { (timer) in
254 | self.performPerodicDownload(sdkKey: sdkKey,
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:24:16: warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
| |- warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'sharedInstance' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | // timer-interval for batching (0 = no batching, negative = use default)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:137:20: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
135 | open func flushEvents() {
136 | queueLock.async {
137 | guard !self.isFlushing else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
138 |
139 | self.isFlushing = true
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:192:25: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
190 | let delay = self.calculateRetryDelay(attempt: attempt)
191 | self.queueLock.asyncAfter(deadline: .now() + delay) {
192 | self.processNextBatch(failureCount: attempt)
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
193 | }
194 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:255:17: warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
253 | let task = session.uploadTask(with: request, from: event.body) { (_, _, error) in
254 | if let error = error {
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
| |- warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
256 | } else {
257 | self.logger.d("Event Sent")
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:257:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
256 | } else {
257 | self.logger.d("Event Sent")
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
258 | completionHandler(.success(event.body))
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:258:44: warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
256 | } else {
257 | self.logger.d("Event Sent")
258 | completionHandler(.success(event.body))
| `- warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
259 | }
260 |
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/DispatchEvents/EventForDispatch.swift:19:27: note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | @objcMembers public class EventForDispatch: NSObject, Codable {
| `- note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
20 | public static var eventEndpoint = "https://logx.optimizely.com/v1/events"
21 | public static var euEventEndpoint = "https://eu.logx.optimizely.com/v1/events"
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:319:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
320 | if self.eventQueue.count > 0 {
321 | self.flushEvents()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:320:24: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
320 | if self.eventQueue.count > 0 {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
321 | self.flushEvents()
322 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultLogger.swift:21:24: warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |
20 | open class DefaultLogger: OPTLogger {
21 | private static var _logLevel: OptimizelyLogLevel?
| |- warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert '_logLevel' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property '_logLevel' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 | public static var logLevel: OptimizelyLogLevel {
23 | get {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:83:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
81 | public required init() {
82 | lock.async {
83 | self.profiles = UserDefaults.standard.dictionary(forKey: self.kStorageName) as? UserProfileData ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
84 |
85 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:38: warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:29: warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:249:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
247 | let now = Date()
248 | DispatchQueue.main.async {
249 | if let timer = self.timers.property?[sdkKey]?.timer, timer.isValid {
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[82/102] Compiling Optimizely OPTEventDispatcher.swift
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:61: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:139:33: warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
139 | attemptFetch()
| |- warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 | }
141 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:33: warning: mutation of captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: mutation of captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:47: warning: reference to captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:104: warning: reference to captured var 'attempt' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'attempt' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:121:14: warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
119 | var backoff = retryConfig.initialBackoff
120 |
121 | func attemptFetch() {
| `- warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
122 | doFetch(url: url, requestBody: requestBody, timeout: timeout) { result in
123 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:173:17: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
171 | let task = session.dataTask(with: request) { data, response, error in
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
175 | return
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:174:17: warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
| |- warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 | return
176 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:67:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
65 |
66 | let result = OptimizelyResult<Data?>.failure(optError)
67 | completionHandler(returnCached(result))
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
68 | return
69 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:86:21: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
84 | if error != nil {
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
87 | result = returnCached(.failure(optError)) // error recovery
88 | } else if let response = response as? HTTPURLResponse {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:87:30: warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
87 | result = returnCached(.failure(optError)) // error recovery
| |- warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
88 | } else if let response = response as? HTTPURLResponse {
89 | switch response.statusCode {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:112:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
110 | self.reachability.updateNumContiguousFails(isError: (error != nil))
111 |
112 | completionHandler(result)
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
113 | session.finishTasksAndInvalidate()
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:54:18: warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
52 | downloadQueue.async {
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
| `- warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
56 | return .success(data)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:254:17: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
252 |
253 | let timer = Timer.scheduledTimer(withTimeInterval: TimeInterval(updateInterval), repeats: false) { (timer) in
254 | self.performPerodicDownload(sdkKey: sdkKey,
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:24:16: warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
| |- warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'sharedInstance' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | // timer-interval for batching (0 = no batching, negative = use default)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:137:20: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
135 | open func flushEvents() {
136 | queueLock.async {
137 | guard !self.isFlushing else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
138 |
139 | self.isFlushing = true
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:192:25: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
190 | let delay = self.calculateRetryDelay(attempt: attempt)
191 | self.queueLock.asyncAfter(deadline: .now() + delay) {
192 | self.processNextBatch(failureCount: attempt)
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
193 | }
194 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:255:17: warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
253 | let task = session.uploadTask(with: request, from: event.body) { (_, _, error) in
254 | if let error = error {
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
| |- warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
256 | } else {
257 | self.logger.d("Event Sent")
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:257:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
256 | } else {
257 | self.logger.d("Event Sent")
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
258 | completionHandler(.success(event.body))
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:258:44: warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
256 | } else {
257 | self.logger.d("Event Sent")
258 | completionHandler(.success(event.body))
| `- warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
259 | }
260 |
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/DispatchEvents/EventForDispatch.swift:19:27: note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | @objcMembers public class EventForDispatch: NSObject, Codable {
| `- note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
20 | public static var eventEndpoint = "https://logx.optimizely.com/v1/events"
21 | public static var euEventEndpoint = "https://eu.logx.optimizely.com/v1/events"
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:319:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
320 | if self.eventQueue.count > 0 {
321 | self.flushEvents()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:320:24: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
320 | if self.eventQueue.count > 0 {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
321 | self.flushEvents()
322 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultLogger.swift:21:24: warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |
20 | open class DefaultLogger: OPTLogger {
21 | private static var _logLevel: OptimizelyLogLevel?
| |- warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert '_logLevel' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property '_logLevel' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 | public static var logLevel: OptimizelyLogLevel {
23 | get {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:83:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
81 | public required init() {
82 | lock.async {
83 | self.profiles = UserDefaults.standard.dictionary(forKey: self.kStorageName) as? UserProfileData ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
84 |
85 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:38: warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:29: warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:249:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
247 | let now = Date()
248 | DispatchQueue.main.async {
249 | if let timer = self.timers.property?[sdkKey]?.timer, timer.isValid {
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[83/102] Compiling Optimizely OPTLogger.swift
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:61: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:139:33: warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
139 | attemptFetch()
| |- warning: capture of 'attemptFetch()' with non-sendable type '() -> ()' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
140 | }
141 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:33: warning: mutation of captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: mutation of captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:47: warning: reference to captured var 'backoff' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'backoff' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:138:104: warning: reference to captured var 'attempt' in concurrently-executing code
136 | attempt += 1
137 | self.cmabQueue.asyncAfter(deadline: .now() + backoff) {
138 | backoff = min(backoff * pow(self.retryConfig.backoffMultiplier, Double(attempt)), self.retryConfig.maxBackoff)
| `- warning: reference to captured var 'attempt' in concurrently-executing code
139 | attemptFetch()
140 | }
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:121:14: warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
119 | var backoff = retryConfig.initialBackoff
120 |
121 | func attemptFetch() {
| `- warning: concurrently-executed local function 'attemptFetch()' must be marked as '@Sendable'
122 | doFetch(url: url, requestBody: requestBody, timeout: timeout) { result in
123 | switch result {
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:173:17: warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
49 | }
50 |
51 | class DefaultCmabClient: CmabClient {
| `- note: class 'DefaultCmabClient' does not conform to the 'Sendable' protocol
52 | let session: URLSession
53 | let retryConfig: CmabRetryConfig
:
171 | let task = session.dataTask(with: request) { data, response, error in
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
| `- warning: capture of 'self' with non-sendable type 'DefaultCmabClient' in a '@Sendable' closure
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
175 | return
/Users/admin/builder/spi-builder-workspace/Sources/CMAB/CmabClient.swift:174:17: warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
172 | if let error = error {
173 | self.logger.e(error.localizedDescription)
174 | completion(.failure(CmabClientError.fetchFailed(error.localizedDescription)))
| |- warning: capture of 'completion' with non-sendable type '(Result<String, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
175 | return
176 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:67:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
65 |
66 | let result = OptimizelyResult<Data?>.failure(optError)
67 | completionHandler(returnCached(result))
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
68 | return
69 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:55:31: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in an isolated local function; this is an error in the Swift 6 language mode
56 | return .success(data)
57 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:86:21: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
84 | if error != nil {
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
87 | result = returnCached(.failure(optError)) // error recovery
88 | } else if let response = response as? HTTPURLResponse {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:87:30: warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
85 | let optError = OptimizelyError.datafileDownloadFailed(error.debugDescription)
86 | self.logger.e(optError)
87 | result = returnCached(.failure(optError)) // error recovery
| |- warning: capture of 'returnCached' with non-sendable type '(OptimizelyResult<Data?>?) -> OptimizelyResult<Data?>' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
88 | } else if let response = response as? HTTPURLResponse {
89 | switch response.statusCode {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:112:17: warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
110 | self.reachability.updateNumContiguousFails(isError: (error != nil))
111 |
112 | completionHandler(result)
| |- warning: capture of 'completionHandler' with non-sendable type 'DatafileDownloadCompletionHandler' (aka '(OptimizelyResult<Optional<Data>>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
113 | session.finishTasksAndInvalidate()
114 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:54:18: warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
52 | downloadQueue.async {
53 |
54 | func returnCached(_ result: OptimizelyResult<Data?>? = nil) -> OptimizelyResult<Data?> {
| `- warning: concurrently-executed local function 'returnCached' must be marked as '@Sendable'
55 | if let data = self.loadSavedDatafile(sdkKey: sdkKey) {
56 | return .success(data)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:254:17: warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
17 | import Foundation
18 |
19 | open class DefaultDatafileHandler: OPTDatafileHandler {
| `- note: class 'DefaultDatafileHandler' does not conform to the 'Sendable' protocol
20 | // endpoint used to get the datafile. This is settable after you create a OptimizelyClient instance.
21 | public var endPointStringFormat = "https://cdn.optimizely.com/datafiles/%@.json"
:
252 |
253 | let timer = Timer.scheduledTimer(withTimeInterval: TimeInterval(updateInterval), repeats: false) { (timer) in
254 | self.performPerodicDownload(sdkKey: sdkKey,
| `- warning: capture of 'self' with non-sendable type 'DefaultDatafileHandler' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: capture of 'datafileChangeNotification' with non-sendable type '((Data) -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:24:16: warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
| |- warning: static property 'sharedInstance' is not concurrency-safe because non-'Sendable' type 'DefaultEventDispatcher' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'sharedInstance' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | // timer-interval for batching (0 = no batching, negative = use default)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:137:20: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
135 | open func flushEvents() {
136 | queueLock.async {
137 | guard !self.isFlushing else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
138 |
139 | self.isFlushing = true
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:192:25: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
190 | let delay = self.calculateRetryDelay(attempt: attempt)
191 | self.queueLock.asyncAfter(deadline: .now() + delay) {
192 | self.processNextBatch(failureCount: attempt)
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
193 | }
194 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:255:17: warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
253 | let task = session.uploadTask(with: request, from: event.body) { (_, _, error) in
254 | if let error = error {
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
| |- warning: capture of 'completionHandler' with non-sendable type 'DispatchCompletionHandler' (aka '(OptimizelyResult<Data>) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
256 | } else {
257 | self.logger.d("Event Sent")
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:257:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
255 | completionHandler(.failure(.eventDispatchFailed(error.localizedDescription)))
256 | } else {
257 | self.logger.d("Event Sent")
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
258 | completionHandler(.success(event.body))
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:258:44: warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
256 | } else {
257 | self.logger.d("Event Sent")
258 | completionHandler(.success(event.body))
| `- warning: capture of 'event' with non-sendable type 'EventForDispatch' in a '@Sendable' closure
259 | }
260 |
/Users/admin/builder/spi-builder-workspace/Sources/Data Model/DispatchEvents/EventForDispatch.swift:19:27: note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
17 | import Foundation
18 |
19 | @objcMembers public class EventForDispatch: NSObject, Codable {
| `- note: class 'EventForDispatch' does not conform to the 'Sendable' protocol
20 | public static var eventEndpoint = "https://logx.optimizely.com/v1/events"
21 | public static var euEventEndpoint = "https://eu.logx.optimizely.com/v1/events"
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:319:17: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
320 | if self.eventQueue.count > 0 {
321 | self.flushEvents()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:320:24: warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
21 | }
22 |
23 | open class DefaultEventDispatcher: BackgroundingCallbacks, OPTEventDispatcher {
| `- note: class 'DefaultEventDispatcher' does not conform to the 'Sendable' protocol
24 | static let sharedInstance = DefaultEventDispatcher()
25 |
:
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
319 | self.queueLock.async {
320 | if self.eventQueue.count > 0 {
| `- warning: capture of 'self' with non-sendable type 'DefaultEventDispatcher' in a '@Sendable' closure
321 | self.flushEvents()
322 | } else {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultLogger.swift:21:24: warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
19 |
20 | open class DefaultLogger: OPTLogger {
21 | private static var _logLevel: OptimizelyLogLevel?
| |- warning: static property '_logLevel' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert '_logLevel' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property '_logLevel' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
22 | public static var logLevel: OptimizelyLogLevel {
23 | get {
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:83:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
81 | public required init() {
82 | lock.async {
83 | self.profiles = UserDefaults.standard.dictionary(forKey: self.kStorageName) as? UserProfileData ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
84 |
85 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:100:38: warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
98 |
99 | lock.async {
100 | self.profiles?[userId] = userProfile
| `- warning: capture of 'userProfile' with non-sendable type 'DefaultUserProfileService.UPProfile' (aka 'Dictionary<String, Any>') in a '@Sendable' closure
101 | let defaults = UserDefaults.standard
102 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:13: warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
72 | // }
73 |
74 | open class DefaultUserProfileService: OPTUserProfileService {
| `- note: class 'DefaultUserProfileService' does not conform to the 'Sendable' protocol
75 | public typealias UserProfileData = [String: UPProfile]
76 |
:
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'self' with non-sendable type 'DefaultUserProfileService' in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultUserProfileService.swift:109:29: warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
107 | open func reset(userProfiles: UserProfileData? = nil) {
108 | lock.async {
109 | self.profiles = userProfiles ?? UserProfileData()
| `- warning: capture of 'userProfiles' with non-sendable type 'DefaultUserProfileService.UserProfileData?' (aka 'Optional<Dictionary<String, Dictionary<String, Any>>>') in a '@Sendable' closure
110 | let defaults = UserDefaults.standard
111 | defaults.set(self.profiles, forKey: self.kStorageName)
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:249:28: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
247 | let now = Date()
248 | DispatchQueue.main.async {
249 | if let timer = self.timers.property?[sdkKey]?.timer, timer.isValid {
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
250 | return
251 | }
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultDatafileHandler.swift:257:73: warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
255 | startTime: now,
256 | updateInterval: updateInterval,
257 | datafileChangeNotification: datafileChangeNotification)
| |- warning: sending 'datafileChangeNotification' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'datafileChangeNotification' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
258 |
259 | timer.invalidate()
/Users/admin/builder/spi-builder-workspace/Sources/Customization/DefaultEventDispatcher.swift:316:19: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
314 | DispatchQueue.main.async {
315 | // should check here again
316 | guard self.timer.property == nil else { return }
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
317 |
318 | self.timer.property = Timer.scheduledTimer(withTimeInterval: self.timerInterval, repeats: true) { _ in
[84/102] Compiling Optimizely MurmurHash3.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[85/102] Compiling Optimizely NetworkReachability.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[86/102] Compiling Optimizely Notifications.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[87/102] Compiling Optimizely RetryStrategy.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[88/102] Compiling Optimizely SDKVersion.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[89/102] Compiling Optimizely ThreadSafeLogger.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[90/102] Compiling Optimizely Utils.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[91/102] Compiling Optimizely WatchBackgroundNotifier.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[92/102] Compiling Optimizely resource_bundle_accessor.swift
/Users/admin/builder/spi-builder-workspace/Sources/Utils/NetworkReachability.swift:78:21: warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
18 | import Network
19 |
20 | class NetworkReachability {
| `- note: class 'NetworkReachability' does not conform to the 'Sendable' protocol
21 |
22 | private let queue = DispatchQueue(label: "reachability")
:
76 | self.monitor = pathMonitor
77 | pathMonitor.pathUpdateHandler = { [weak self] path in
78 | self?._connected = (path.status == .satisfied)
| `- warning: capture of 'self' with non-sendable type 'NetworkReachability?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
79 | }
80 | monitorToStart = pathMonitor
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:30:16: warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 |
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
| |- warning: static property 'sdkVersion' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'sdkVersion' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'sdkVersion' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | static var swiftSdkClientName = "swift-sdk"
32 |
/Users/admin/builder/spi-builder-workspace/Sources/Utils/Utils.swift:31:16: warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | // from auto-generated variable OPTIMIZELYSDKVERSION
30 | static var sdkVersion: String = OPTIMIZELYSDKVERSION
31 | static var swiftSdkClientName = "swift-sdk"
| |- warning: static property 'swiftSdkClientName' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'swiftSdkClientName' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'swiftSdkClientName' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 |
33 | static var os: String {
[93/102] Compiling Optimizely OptimizelyConfig.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[94/102] Compiling Optimizely OptimizelyError.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[95/102] Compiling Optimizely OptimizelyJSON+ObjC.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[96/102] Compiling Optimizely OptimizelyJSON.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[97/102] Compiling Optimizely OptimizelyLogLevel.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[98/102] Compiling Optimizely OptimizelyResult.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[99/102] Compiling Optimizely VuidManager.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[100/102] Compiling Optimizely BackgroundingCallbacks.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[101/102] Compiling Optimizely DataStoreQueueStack.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
[102/102] Compiling Optimizely OPTBucketer.swift
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/OptimizelyError.swift:54:10: warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
52 | case conditionCannotBeEvaluated(_ hint: String)
53 | case evaluateAttributeInvalidCondition(_ condition: String)
54 | case evaluateAttributeInvalidType(_ condition: String, _ value: Any, _ key: String)
| `- warning: associated value 'evaluateAttributeInvalidType' of 'Sendable'-conforming enum 'OptimizelyError' has non-sendable type 'Any'; this is an error in the Swift 6 language mode
55 | case evaluateAttributeValueOutOfRange(_ condition: String, _ key: String)
56 | case evaluateAttributeInvalidFormat(_ hint: String)
/Users/admin/builder/spi-builder-workspace/Sources/Optimizely/VuidManager.swift:24:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
17 | import Foundation
18 |
19 | public class VuidManager {
| `- note: class 'VuidManager' does not conform to the 'Sendable' protocol
20 | private var _vuid: String = ""
21 | private(set) var enable: Bool = false
22 | let logger = OPTLoggerFactory.getLogger()
23 | // a single vuid should be shared for all SDK instances
24 | public static let shared = VuidManager()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'VuidManager' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
25 |
26 | public func configure(enable: Bool) {
Build complete! (8.19s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "Optimizely",
"name" : "Optimizely",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "15.0"
},
{
"name" : "tvos",
"version" : "15.0"
},
{
"name" : "macos",
"version" : "12.0"
},
{
"name" : "watchos",
"version" : "9.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"
}
Done.