Build Information
Successful build of Split, reference 3.3.1-rc2 (77352e
), with Swift 6.1 for macOS (SPM) on 11 Jun 2025 00:04:59 UTC.
Swift 6 data race errors: 21
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 InferSendableFromCaptures
Build Log
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[350/360] Compiling Split EventsSynchronizer.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[351/360] Compiling Split FeatureFlagsSynchronizer.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[352/360] Compiling Split ImpressionsTracker.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[353/360] Compiling Split MySegmentsSynchronizer.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[354/360] Compiling Split SyncCommons.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[355/360] Compiling Split SyncGuardian.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[356/360] Compiling Split SyncManager.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[357/360] Compiling Split SyncManagerBuilder.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[358/360] Compiling Split Synchronizer.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[359/360] Compiling Split TelemetrySynchronizer.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
[360/360] Compiling Split UniqueKeyTracker.swift
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:54:30: warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
23 | }
24 |
25 | class DefaultSseClient: SseClient {
| `- note: class 'DefaultSseClient' does not conform to the 'Sendable' protocol
26 |
27 | ///
:
52 | func connect(token: String, channels: [String], completion: @escaping CompletionHandler) {
53 | queue.async(flags: .barrier) { [weak self] in
54 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSseClient?' in a '@Sendable' closure
55 | let parameters: [String: Any] = [
56 | SseClientConstants.pushNotificationTokenParam: token,
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseClient.swift:65:80: warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
63 | parameters: HttpParameters(values: parameters),
64 | headers: self.endpoint.headers)
65 | .getResponse(responseHandler: self.responseHandler(completion: completion),
| |- warning: capture of 'completion' with non-sendable type 'DefaultSseClient.CompletionHandler' (aka '(Bool) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
66 | incomingDataHandler: self.incommingDataHandler(completion: completion),
67 | closeHandler: self.closeHandler(),
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SseConnectionHandler.swift:37:30: warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SseConnectionHandler {
| `- note: class 'SseConnectionHandler' does not conform to the 'Sendable' protocol
12 | private let clientLock = NSLock()
13 | private let sseClientFactory: SseClientFactory
:
35 | clearClientId()
36 | DispatchQueue.general.async { [weak self] in
37 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SseConnectionHandler?' in a '@Sendable' closure
38 | guard let clientId = disconnectingClientId else { return }
39 | let cli = self.getSseClient(id: clientId)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:43:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
41 | func push(event: SyncStatusEvent) {
42 | messageQueue.async { [weak self] in
43 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
44 | for handler in self.handlers {
45 | handler(event)
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:52:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
50 | func register(handler: @escaping IncomingMessageHandler) {
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
53 | self.handlers.append(handler)
54 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:53:34: warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
51 | messageQueue.async(flags: .barrier) { [weak self] in
52 | guard let self = self else { return }
53 | self.handlers.append(handler)
| |- warning: capture of 'handler' with non-sendable type 'DefaultSyncEventBroadcaster.IncomingMessageHandler' (aka '(SyncStatusEvent) -> ()') in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
54 | }
55 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncEventBroadcaster.swift:59:30: warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
33 | /// to other components
34 | ///
35 | class DefaultSyncEventBroadcaster: SyncEventBroadcaster {
| `- note: class 'DefaultSyncEventBroadcaster' does not conform to the 'Sendable' protocol
36 | let messageQueue = DispatchQueue(label: "split-sync-event-broadcaster",
37 | attributes: .concurrent)
:
57 | func destroy() {
58 | messageQueue.async(flags: .barrier) { [weak self] in
59 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSyncEventBroadcaster?' in a '@Sendable' closure
60 | self.handlers.removeAll()
61 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncSegmentsUpdateWorker.swift:37:13: warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
9 | import Foundation
10 |
11 | class SegmentsUpdateWorker: UpdateWorker<MembershipsUpdateNotification> {
| `- note: class 'SegmentsUpdateWorker' does not conform to the 'Sendable' protocol
12 |
13 | private let synchronizer: SegmentsSynchronizerWrapper
:
35 | override func process(notification: MembershipsUpdateNotification) throws {
36 | processQueue.async {
37 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SegmentsUpdateWorker' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:61:30: warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
25 | }
26 |
27 | class SplitsUpdateWorker: UpdateWorker<TargetingRuleUpdateNotification> {
| `- note: class 'SplitsUpdateWorker' does not conform to the 'Sendable' protocol
28 |
29 | private let synchronizer: Synchronizer
:
59 | processQueue.async { [weak self] in
60 |
61 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'SplitsUpdateWorker?' in a '@Sendable' closure
62 | let storedChangeNumber = getChangeNumber(notification.type)
63 | if storedChangeNumber >= notification.changeNumber {
/Users/admin/builder/spi-builder-workspace/Split/Network/Streaming/SyncUpdateWorker.swift:221:13: warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
206 | }
207 |
208 | class SplitKillWorker: UpdateWorker<SplitKillNotification> {
| `- note: class 'SplitKillWorker' does not conform to the 'Sendable' protocol
209 |
210 | private let synchronizer: Synchronizer
:
219 | override func process(notification: SplitKillNotification) throws {
220 | processQueue.async {
221 | self.process(notification)
| `- warning: capture of 'self' with non-sendable type 'SplitKillWorker' in a '@Sendable' closure
222 | }
223 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:84:13: warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
22 | }
23 |
24 | class DefaultFeatureFlagsSynchronizer: FeatureFlagsSynchronizer {
| `- note: class 'DefaultFeatureFlagsSynchronizer' does not conform to the 'Sendable' protocol
25 |
26 | private var storageContainer: SplitStorageContainer
:
82 | DispatchQueue.general.async {
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
| `- warning: capture of 'self' with non-sendable type 'DefaultFeatureFlagsSynchronizer' in a '@Sendable' closure
85 | splitsStorage.loadLocal()
86 | if splitsStorage.getAll().count > 0 {
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/FeatureFlagsSynchronizer.swift:85:13: warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
83 | let start = Date.nowMillis()
84 | self.filterSplitsInCache()
85 | splitsStorage.loadLocal()
| `- warning: capture of 'splitsStorage' with non-sendable type 'any SplitsStorage' in a '@Sendable' closure
86 | if splitsStorage.getAll().count > 0 {
87 | self.splitEventsManager.notifyInternalEvent(.splitsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Storage/Splits/SplitsStorage.swift:15:10: note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
13 | }
14 |
15 | protocol SplitsStorage: SyncSplitsStorage {
| `- note: protocol 'SplitsStorage' does not conform to the 'Sendable' protocol
16 | var changeNumber: Int64 { get }
17 | var updateTimestamp: Int64 { get }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/MySegmentsSynchronizer.swift:81:30: warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
20 | }
21 |
22 | class DefaultMySegmentsSynchronizer: MySegmentsSynchronizer {
| `- note: class 'DefaultMySegmentsSynchronizer' does not conform to the 'Sendable' protocol
23 |
24 | private let mySegmentsStorage: ByKeyMySegmentsStorage
:
79 | }
80 | DispatchQueue.general.async { [weak self] in
81 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultMySegmentsSynchronizer?' in a '@Sendable' closure
82 | self.mySegmentsStorage.loadLocal()
83 | self.eventsManager.notifyInternalEvent(.mySegmentsLoadedFromCache)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:197:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
195 | func pushEvent(event: EventDTO) {
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
198 | self.eventsSynchronizer.push(event)
199 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:198:42: warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
196 | flushQueue.async { [weak self] in
197 | guard let self = self else { return }
198 | self.eventsSynchronizer.push(event)
| `- warning: capture of 'event' with non-sendable type 'EventDTO' in a '@Sendable' closure
199 | }
200 | }
/Users/admin/builder/spi-builder-workspace/Split/Track/Models/EventDTO.swift:11:7: note: class 'EventDTO' does not conform to the 'Sendable' protocol
9 |
10 | // TODO: Rename to Event
11 | class EventDTO: DynamicCodable {
| `- note: class 'EventDTO' does not conform to the 'Sendable' protocol
12 | var storageId: String?
13 | var key: String?
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:204:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
202 | func pushImpression(impression: DecoratedImpression) {
203 | flushQueue.async { [weak self] in
204 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
205 |
206 | self.impressionsTracker.push(impression)
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/Synchronizer.swift:245:30: warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
45 | }
46 |
47 | class DefaultSynchronizer: Synchronizer {
| `- note: class 'DefaultSynchronizer' does not conform to the 'Sendable' protocol
48 |
49 | private let splitConfig: SplitClientConfig
:
243 | func flush() {
244 | flushQueue.async { [weak self] in
245 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'DefaultSynchronizer?' in a '@Sendable' closure
246 |
247 | self.impressionsTracker.flush()
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:37:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
35 | func synchronizeConfig() {
36 | syncQueue.async {
37 | self.configRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
38 | }
39 | }
/Users/admin/builder/spi-builder-workspace/Split/Network/Sync/TelemetrySynchronizer.swift:43:13: warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
18 | }
19 |
20 | class DefaultTelemetrySynchronizer: TelemetrySynchronizer {
| `- note: class 'DefaultTelemetrySynchronizer' does not conform to the 'Sendable' protocol
21 |
22 | private let configRecorderWorker: RecorderWorker
:
41 | func synchronizeStats() {
42 | syncQueue.async {
43 | self.statsRecorderWorker.flush()
| `- warning: capture of 'self' with non-sendable type 'DefaultTelemetrySynchronizer' in a '@Sendable' closure
44 | }
45 | }
Build complete! (9.69s)
Build complete.
{
"dependencies" : [
],
"manifest_display_name" : "Split",
"name" : "Split",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "9.0"
},
{
"name" : "macos",
"version" : "10.11"
},
{
"name" : "watchos",
"version" : "7.0"
},
{
"name" : "tvos",
"version" : "9.0"
}
],
"products" : [
{
"name" : "Split",
"targets" : [
"Split"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "Split",
"module_type" : "SwiftTarget",
"name" : "Split",
"path" : "Split",
"product_memberships" : [
"Split"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Split/Storage/split_cache.xcdatamodeld",
"rule" : {
"process" : {
}
}
}
],
"sources" : [
"Api/CertificatePinningConfig.swift",
"Api/DefaultSplitClient.swift",
"Api/DefaultSplitFactory.swift",
"Api/DefaultSplitFactoryBuilder.swift",
"Api/DefaultSplitManager.swift",
"Api/Destroyable.swift",
"Api/EvaluationOptions.swift",
"Api/EventsTracker.swift",
"Api/FailHelpers.swift",
"Api/FilterBuilder.swift",
"Api/FlagSetsValidator.swift",
"Api/InternalSplitClient.swift",
"Api/LocalhostSplitClient.swift",
"Api/LocalhostSplitFactory.swift",
"Api/RolloutCacheConfiguration.swift",
"Api/SplitApiFacade.swift",
"Api/SplitCertPinningAuthenticator.swift",
"Api/SplitClient.swift",
"Api/SplitClientConfig.swift",
"Api/SplitClientManager.swift",
"Api/SplitDatabaseHelper.swift",
"Api/SplitEncryptionLevel.swift",
"Api/SplitError.swift",
"Api/SplitFactory.swift",
"Api/SplitFactoryBuilder.swift",
"Api/SplitFilter.swift",
"Api/SplitHttpsAuthenticator.swift",
"Api/SplitLocalhostDataSource.swift",
"Api/SplitLogLevel.swift",
"Api/SplitManager.swift",
"Api/SplitResult.swift",
"Api/SplitView.swift",
"Api/SyncConfig.swift",
"Api/TelemetryConfigHelper.swift",
"Api/UserConsentManager.swift",
"Common/Config/UserConsent.swift",
"Common/Extensions/Array+Chunked.swift",
"Common/Extensions/Array+DynamicCodable.swift",
"Common/Extensions/Array+asSet.swift",
"Common/Extensions/Bundle+Finder.swift",
"Common/Extensions/Bundle+Name.swift",
"Common/Extensions/Data+StringRepresentation.swift",
"Common/Extensions/Date+Utils.swift",
"Common/Extensions/Dictionary+DynamicCodable.swift",
"Common/Extensions/Dictionary+Extensions.swift",
"Common/Extensions/Dictionary+JSON.swift",
"Common/Extensions/Int+Extension.swift",
"Common/Extensions/Set+Extension.swift",
"Common/Extensions/SplitView+StringConvertible.swift",
"Common/Extensions/String+Utils.swift",
"Common/Extensions/UInt64+bits.swift",
"Common/ServiceConstants.swift",
"Common/Structs/BlockingQueue.swift",
"Common/Structs/ConcurrentArrayQueue.swift",
"Common/Structs/ConcurrentDictionary.swift",
"Common/Structs/ConcurrentDictionaryList.swift",
"Common/Structs/ConcurrentSet.swift",
"Common/Structs/KeyStorage.swift",
"Common/Structs/LRUCache.swift",
"Common/Structs/SynchronizedDictionary.swift",
"Common/Structs/SynchronizedDictionaryComposed.swift",
"Common/Structs/SynchronizedDictionarySet.swift",
"Common/Structs/SynchronizedList.swift",
"Common/Utils/Atomic.swift",
"Common/Utils/Base64Utils.swift",
"Common/Utils/CastUtils.swift",
"Common/Utils/Cipher.swift",
"Common/Utils/CompressionUtil.swift",
"Common/Utils/DbCipher.swift",
"Common/Utils/FileUtil.swift",
"Common/Utils/InfoUtils.swift",
"Common/Utils/Logger.swift",
"Common/Utils/NotificationsHelper.swift",
"Common/Utils/PeriodicTaskManager.swift",
"Common/Utils/Spec.swift",
"Common/Utils/SplitHelper.swift",
"Common/Utils/Stopwatch.swift",
"Common/Utils/ThreadUtils.swift",
"Common/Utils/Version.swift",
"Common/Validators/AnyValueValidator.swift",
"Common/Validators/ApiKeyValidator.swift",
"Common/Validators/EventValidator.swift",
"Common/Validators/FactoryMonitor.swift",
"Common/Validators/KeyValidator.swift",
"Common/Validators/PropertyValidator.swift",
"Common/Validators/SplitValidator.swift",
"Common/Validators/ValidationConfig.swift",
"Common/Validators/ValidationErrorInfo.swift",
"Common/Validators/ValidatorMessageLogger.swift",
"Common/Yaml/YAMLOperators.swift",
"Common/Yaml/YAMLParser.swift",
"Common/Yaml/YAMLRegex.swift",
"Common/Yaml/YAMLResult.swift",
"Common/Yaml/YAMLTokenizer.swift",
"Common/Yaml/Yaml.swift",
"Engine/Constants/SplitConstants.swift",
"Engine/DefaultTreatmentManager.swift",
"Engine/Evaluator.swift",
"Engine/EvaluatorError.swift",
"Engine/Hashing/LegacyHash.swift",
"Engine/Hashing/Murmur3Hash.swift",
"Engine/Hashing/Murmur64x128.swift",
"Engine/Partition.swift",
"Engine/Splitter.swift",
"Engine/TreatmentManager.swift",
"Events/EventsManagerCoordinator.swift",
"Events/SplitEvent.swift",
"Events/SplitEventActionTask.swift",
"Events/SplitEventTask.swift",
"Events/SplitEventsManager.swift",
"Events/SplitInternalEvent.swift",
"FetcherEngine/HttpMySegmentsFetcher.swift",
"FetcherEngine/HttpSplitFetcher.swift",
"FetcherEngine/Recorder/EventsRecorder.swift",
"FetcherEngine/Recorder/EventsRecorderWorker.swift",
"FetcherEngine/Recorder/ImpressionsCountRecorder.swift",
"FetcherEngine/Recorder/ImpressionsCountRecorderWorker.swift",
"FetcherEngine/Recorder/ImpressionsRecorder.swift",
"FetcherEngine/Recorder/ImpressionsRecorderWorker.swift",
"FetcherEngine/Recorder/PeriodicRecorderWorker.swift",
"FetcherEngine/Recorder/RecorderWorker.swift",
"FetcherEngine/Recorder/TelemetryConfigRecorder.swift",
"FetcherEngine/Recorder/TelemetryConfigRecorderWorker.swift",
"FetcherEngine/Recorder/TelemetryStatsRecorder.swift",
"FetcherEngine/Recorder/TelemetryStatsRecorderWorker.swift",
"FetcherEngine/Recorder/UniqueKeysRecorder.swift",
"FetcherEngine/Recorder/UniqueKeysRecorderWorker.swift",
"FetcherEngine/Refresh/BackgroundSyncWorker.swift",
"FetcherEngine/Refresh/ChangesChecker.swift",
"FetcherEngine/Refresh/EmptyMySegmentsStorage.swift",
"FetcherEngine/Refresh/PeriodicSyncWorker.swift",
"FetcherEngine/Refresh/QueryableMySegmentsFetcher.swift",
"FetcherEngine/Refresh/RetryableSegmentsSyncWorker.swift",
"FetcherEngine/Refresh/RetryableSyncWorker.swift",
"FetcherEngine/Refresh/SplitBgSynchronizer.swift",
"FetcherEngine/Refresh/SplitsSyncHelper.swift",
"FetcherEngine/SyncHelper.swift",
"Impressions/DecoratedImpression.swift",
"Impressions/DefaultImpressionsObserver.swift",
"Impressions/HashedImpression.swift",
"Impressions/Impression.swift",
"Impressions/ImpressionsConstants.swift",
"Impressions/ImpressionsCount.swift",
"Impressions/ImpressionsCountEntity.swift",
"Impressions/ImpressionsCountPerFeature.swift",
"Impressions/ImpressionsCounter.swift",
"Impressions/ImpressionsTest.swift",
"Impressions/KeyImpression.swift",
"Impressions/UniqueKey.swift",
"Impressions/UniqueKeys.swift",
"Initialization/RolloutCacheManager.swift",
"Initialization/SplitComponentCatalog.swift",
"Initialization/SplitComponentFactory.swift",
"Localhost/LocalhostApiDataSource.swift",
"Localhost/LocalhostClientManager.swift",
"Localhost/LocalhostFileDataSource.swift",
"Localhost/LocalhostSplitsParser.swift",
"Localhost/LocalhostSplitsStorage.swift",
"Localhost/LocalhostSynchronizer.swift",
"Localhost/SpaceDelimitedLocalhostSplitsParser.swift",
"Localhost/YamlLocalhostSplitsParser.swift",
"Matchers/AllKeysMatcher.swift",
"Matchers/BaseMatcher.swift",
"Matchers/BetweenMatcher.swift",
"Matchers/ContainsAllOfSetMatcher.swift",
"Matchers/ContainsAnyOfSetMatcher.swift",
"Matchers/ContainsStringMatcher.swift",
"Matchers/DataType/DateTime.swift",
"Matchers/DependencyMatcher.swift",
"Matchers/EndsWithMatcher.swift",
"Matchers/EqualToBooleanMatcher.swift",
"Matchers/EqualToMatcher.swift",
"Matchers/EqualToSetMatcher.swift",
"Matchers/GreaterThanOrEqualToMatcher.swift",
"Matchers/InRuleBasedSegmentMatcher.swift",
"Matchers/InSegmentMatcher.swift",
"Matchers/LessThanOrEqualToMatcher.swift",
"Matchers/MatchesStringMatcher.swift",
"Matchers/PartOfSetMatcher.swift",
"Matchers/PrerequisitesMatcher.swift",
"Matchers/Semver/BetweenSemverMatcher.swift",
"Matchers/Semver/EqualToSemverMatcher.swift",
"Matchers/Semver/GreaterThanOrEqualToSemverMatcher.swift",
"Matchers/Semver/InListSemverMatcher.swift",
"Matchers/Semver/LessThanOrEqualToSemverMatcher.swift",
"Matchers/Semver/Semver.swift",
"Matchers/StartWithMatcher.swift",
"Matchers/Whitelist.swift",
"Models/BetweenMatcherData.swift",
"Models/BetweenStringMatcherData.swift",
"Models/Condition.swift",
"Models/ConditionType.swift",
"Models/DataType.swift",
"Models/DependencyMatcherData.swift",
"Models/Extensions/SplitModels+StringConvertible.swift",
"Models/Key.swift",
"Models/KeySelector.swift",
"Models/Matcher.swift",
"Models/MatcherCombiner.swift",
"Models/MatcherGroup.swift",
"Models/MatcherProtocol.swift",
"Models/MatcherType.swift",
"Models/Segment.swift",
"Models/SplitModel/RuleBasedSegmentChange.swift",
"Models/SplitModel/Split.swift",
"Models/SplitModel/SplitBase.swift",
"Models/SplitModel/SplitChange.swift",
"Models/SplitModel/TargetingRulesChange.swift",
"Models/SplitModel/TargetingRulesChangeDecoder.swift",
"Models/Status.swift",
"Models/TrafficType.swift",
"Models/Treatment.swift",
"Models/UnaryNumericMatcherData.swift",
"Models/UserDefinedSegmentMatcherData.swift",
"Models/WhitelistMatcherData.swift",
"Network/Configuration/RestClientConfiguration.swift",
"Network/DataParsing/Json.swift",
"Network/Endpoints/Endpoint.swift",
"Network/Endpoints/EndpointFactory.swift",
"Network/Endpoints/ServiceEndpoints.swift",
"Network/Errors/GenericError.swift",
"Network/HttpClient/HttpClient.swift",
"Network/HttpClient/HttpDataRequest.swift",
"Network/HttpClient/HttpDataResponse.swift",
"Network/HttpClient/HttpError.swift",
"Network/HttpClient/HttpParameter.swift",
"Network/HttpClient/HttpParameters.swift",
"Network/HttpClient/HttpRequest.swift",
"Network/HttpClient/HttpRequestList.swift",
"Network/HttpClient/HttpRequestManager.swift",
"Network/HttpClient/HttpResponse.swift",
"Network/HttpClient/HttpSession.swift",
"Network/HttpClient/HttpStreamRequest.swift",
"Network/HttpClient/HttpStreamResponse.swift",
"Network/HttpClient/HttpTask.swift",
"Network/HttpClient/OutdatedSplitProxyHandler.swift",
"Network/NetworkReachabilityManager.swift",
"Network/RestClient/RestClient+Impressions.swift",
"Network/RestClient/RestClient+ImpressionsCount.swift",
"Network/RestClient/RestClient+MySegments.swift",
"Network/RestClient/RestClient+SplitChanges.swift",
"Network/RestClient/RestClient+SseAuthenticator.swift",
"Network/RestClient/RestClient+TelemetryConfig.swift",
"Network/RestClient/RestClient+TelemetryStats.swift",
"Network/RestClient/RestClient+TrackEvents.swift",
"Network/RestClient/RestClient+UniqueKeys.swift",
"Network/RestClient/RestClient.swift",
"Network/Results/AllSegmentsChange.swift",
"Network/Results/DataResult.swift",
"Network/Results/SegmentsChange.swift",
"Network/Security/HostDomainFilter.swift",
"Network/Security/PublicKeyHeaders.swift",
"Network/Security/TlsPinChecker.swift",
"Network/Streaming/BackoffCounterTimer.swift",
"Network/Streaming/DefaultSseNotificationParser.swift",
"Network/Streaming/EventStreamParser.swift",
"Network/Streaming/FeatureFlagsPayloadDecoder.swift",
"Network/Streaming/JwtTokenParser.swift",
"Network/Streaming/MySegmentsPayloadDecoder.swift",
"Network/Streaming/NotificationManagerKeeper.swift",
"Network/Streaming/PushNotificationManager.swift",
"Network/Streaming/ReconnectBackoffCounter.swift",
"Network/Streaming/RetryableSplitsUpdateWorkerFactory.swift",
"Network/Streaming/SegmentsPayloadDecoder.swift",
"Network/Streaming/SseAuthenticator.swift",
"Network/Streaming/SseClient.swift",
"Network/Streaming/SseClientFactory.swift",
"Network/Streaming/SseConnectionHandler.swift",
"Network/Streaming/SseHandler.swift",
"Network/Streaming/SseNotificationProcessor.swift",
"Network/Streaming/SseNotifications.swift",
"Network/Streaming/SyncEventBroadcaster.swift",
"Network/Streaming/SyncSegmentsUpdateWorker.swift",
"Network/Streaming/SyncUpdateWorker.swift",
"Network/Streaming/Timers.swift",
"Network/Sync/ByKeyFacade.swift",
"Network/Sync/EventsSynchronizer.swift",
"Network/Sync/FeatureFlagsSynchronizer.swift",
"Network/Sync/ImpressionsTracker.swift",
"Network/Sync/MySegmentsSynchronizer.swift",
"Network/Sync/SyncCommons.swift",
"Network/Sync/SyncGuardian.swift",
"Network/Sync/SyncManager.swift",
"Network/Sync/SyncManagerBuilder.swift",
"Network/Sync/Synchronizer.swift",
"Network/Sync/TelemetrySynchronizer.swift",
"Network/Sync/UniqueKeyTracker.swift",
"Secure/SecureDataStore.swift",
"Storage/Attributes/AttributeEntity.swift",
"Storage/Attributes/AttributeMap.swift",
"Storage/Attributes/AttributesDao.swift",
"Storage/Attributes/AttributesStorage.swift",
"Storage/Attributes/ByKeyAttributesStorage.swift",
"Storage/Attributes/OneKeyAttributesStorage.swift",
"Storage/Attributes/OneKeyPersistentAttributesStorage.swift",
"Storage/Attributes/PersistentAttributesStorage.swift",
"Storage/CoreDataContextBuilder.swift",
"Storage/CoreDataHelper.swift",
"Storage/DefaultFileStorage.swift",
"Storage/Events/EventDao.swift",
"Storage/Events/EventEntity.swift",
"Storage/Events/EventsStorage.swift",
"Storage/Events/PersistentEventsStorage.swift",
"Storage/FileStorage.swift",
"Storage/GeneralInfo/GeneralInfoDao.swift",
"Storage/GeneralInfo/GeneralInfoEntity.swift",
"Storage/GeneralInfo/GeneralInfoStorage.swift",
"Storage/Global/GlobalSecureStorage.swift",
"Storage/Global/KeyValueStorage.swift",
"Storage/HashedImpression/HashedImpressionDao.swift",
"Storage/HashedImpression/HashedImpressionEntity.swift",
"Storage/HashedImpression/HashedImpressionStorage.swift",
"Storage/HashedImpression/PersistentHashedImpressionsStorage.swift",
"Storage/Impressions/ImpressionDao.swift",
"Storage/Impressions/ImpressionEntity.swift",
"Storage/Impressions/ImpressionsCountDao.swift",
"Storage/Impressions/ImpressionsMode.swift",
"Storage/Impressions/ImpressionsStorage.swift",
"Storage/Impressions/PersistentImpressionsCountStorage.swift",
"Storage/Impressions/PersistentImpressionsStorage.swift",
"Storage/LegacyStorageCleaner.swift",
"Storage/MySegments/ByKeyMySegmentsStorage.swift",
"Storage/MySegments/MyLargeSegmentsStorage.swift",
"Storage/MySegments/MySegmentEntity.swift",
"Storage/MySegments/MySegmentsDao.swift",
"Storage/MySegments/MySegmentsStorage.swift",
"Storage/MySegments/PersistentMySegmentsStorage.swift",
"Storage/RolloutDefinitionsCache.swift",
"Storage/RuleBasedSegments/PersistentRuleBasedSegmentsStorage.swift",
"Storage/RuleBasedSegments/ProcessedRuleBasedSegmentChange.swift",
"Storage/RuleBasedSegments/RuleBasedSegment.swift",
"Storage/RuleBasedSegments/RuleBasedSegmentDao.swift",
"Storage/RuleBasedSegments/RuleBasedSegmentEntity.swift",
"Storage/RuleBasedSegments/RuleBasedSegmentsDecoder.swift",
"Storage/RuleBasedSegments/RuleBasedSegmentsEncoder.swift",
"Storage/RuleBasedSegments/RuleBasedSegmentsStorage.swift",
"Storage/SplitDatabase.swift",
"Storage/Splits/FlagSetsCache.swift",
"Storage/Splits/PersistentSplitsStorage.swift",
"Storage/Splits/ProcessedSplitChange.swift",
"Storage/Splits/SplitDao.swift",
"Storage/Splits/SplitEntity.swift",
"Storage/Splits/SplitsDecoder.swift",
"Storage/Splits/SplitsEncoder.swift",
"Storage/Splits/SplitsSnapshot.swift",
"Storage/Splits/SplitsStorage.swift",
"Storage/UniqueKeys/PersistentUniqueKeysStorage.swift",
"Storage/UniqueKeys/UniqueKeyDao.swift",
"Storage/UniqueKeys/UniqueKeyEntity.swift",
"Telemetry/LatencyCounter.swift",
"Telemetry/Storage/TelemetryConfig.swift",
"Telemetry/Storage/TelemetryInMemoryStorage.swift",
"Telemetry/Storage/TelemetryStats.swift",
"Telemetry/Storage/TelemetryStorage.swift",
"Track/Models/EventDTO.swift"
],
"type" : "library"
}
],
"tools_version" : "5.3"
}
Done.