Build Information
Successful build of Statsig, reference 1.62.5 (ffe36d), with Swift 6.1 for macOS (SPM) on 18 Apr 2026 21:38:54 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 InferSendableFromCapturesBuild Log
442 | StatsigUserDefaults.defaults,
443 | storageService.userPayload.storageAdapter
| `- warning: capture of 'storageService' with non-sendable type 'StorageService' in a '@Sendable' closure
444 | )
445 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Storage/StorageService.swift:3:13: note: class 'StorageService' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | final class StorageService {
| `- note: class 'StorageService' does not conform to the 'Sendable' protocol
4 |
5 | private static let servicesLock = NSLock()
[70/86] Compiling Statsig OnDeviceEvalAdapter.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[71/86] Compiling Statsig OverrideAdapter.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[72/86] Compiling Statsig ParameterStore.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[73/86] Compiling Statsig PlatformCompatibility.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[74/86] Compiling Statsig PrintHandler.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[75/86] Compiling Statsig SDKKeyValidator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[76/86] Compiling Statsig SpecsResponse.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[77/86] Compiling Statsig Statsig.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:60: warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'contentViewController' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:651:48: note: property declared here
649 | /*! The main content view controller for the window. This provides the contentView of the window. Assigning this value will remove the existing contentView and will make the contentViewController.view the main contentView for the window. The default value is nil. The contentViewController only controls the contentView, and not the title of the window. The window title can easily be bound to the contentViewController with the following: [window bind:NSTitleBinding toObject:contentViewController withKeyPath:@"title" options:nil]. Setting the contentViewController will cause the window to resize based on the current size of the contentViewController. Autolayout should be used to restrict the size of the window. The value of the contentViewController is encoded in the NIB. Directly assigning a contentView will clear out the contentViewController.
650 | */
651 | @property (nullable, strong) NSViewController *contentViewController API_AVAILABLE(macos(10.10));
| `- note: property declared here
652 |
653 | /*! Convenience method for creating an autoreleased titled window with the given contentViewController. A basic NSWindow with the following attributes is made: titled, closable, resizable, miniaturizable. The window's title is automatically bound to the contentViewController's title. The size of the window can easily be controlled by utilizing autolayout and applying size constraints to the view (or its subviews). The window has isReleasedWhenClosed set to NO, and it must be explicitly retained to keep the window instance alive. To have it automatically be freed when it is closed, do the following: [window retain] and [window setReleasedWhenClosed:YES].
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:49: warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated property 'keyWindow' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:202:48: note: property declared here
200 |
201 | @property (nullable, readonly, weak) NSWindow *mainWindow;
202 | @property (nullable, readonly, weak) NSWindow *keyWindow;
| `- note: property declared here
203 | @property (getter=isActive, readonly) BOOL active;
204 | @property (getter=isHidden, readonly) BOOL hidden;
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PlatformCompatibility.swift:159:42: warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
157 | static func getRootViewControllerClassName(_ callback: @escaping (_ name: String?) -> Void) {
158 | ensureMainThread { [callback] in
159 | if let klass = NSApplication.shared.keyWindow?.contentViewController?.classForCoder {
| `- warning: main actor-isolated class property 'shared' can not be referenced from a nonisolated context; this is an error in the Swift 6 language mode
160 | callback("\(klass)")
161 | } else {
/Applications/Xcode-16.3.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.4.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSApplication.h:193:61: note: class property declared here
191 | APPKIT_EXTERN __kindof NSApplication * _Null_unspecified NSApp NS_SWIFT_UI_ACTOR;
192 |
193 | @property (class, readonly, strong) __kindof NSApplication *sharedApplication;
| `- note: class property declared here
194 | @property (nullable, weak) id<NSApplicationDelegate> delegate;
195 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/PrintHandler.swift:4:24: warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
2 |
3 | public class PrintHandler {
4 | private static var printHandler: ((String) -> Void)?
| |- warning: static property 'printHandler' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'printHandler' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'printHandler' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
5 |
6 | static func setPrintHandler(_ handler: @escaping (String) -> Void) {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:8:25: warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
6 |
7 | public class Statsig {
8 | internal static var client: StatsigClient?
| |- warning: static property 'client' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'client' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'client' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
9 | internal static var pendingListeners: [StatsigListening] = []
10 | internal static let initLock = NSLock()
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Statsig.swift:9:25: warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
7 | public class Statsig {
8 | internal static var client: StatsigClient?
9 | internal static var pendingListeners: [StatsigListening] = []
| |- warning: static property 'pendingListeners' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'pendingListeners' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'pendingListeners' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
10 | internal static let initLock = NSLock()
11 |
[78/86] Compiling Statsig NetworkMarker.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[79/86] Compiling Statsig OverallMarker.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[80/86] Compiling Statsig DynamicConfig.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[81/86] Compiling Statsig ErrorBoundary.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[82/86] Compiling Statsig EvaluationDetails.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[83/86] Compiling Statsig EvaluationResult.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[84/86] Compiling Statsig Evaluator.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[85/86] Compiling Statsig Event.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
[86/86] Compiling Statsig EventLogger.swift
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:49:28: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
47 | logQueue.async { [weak self] in
48 | guard
49 | let self = self,
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
50 | self.networkService.statsigOptions.eventLoggingEnabled
51 | else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:61:21: warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
59 | failedRequests in
60 | logQueue.async {
61 | failedRequestStore.addRequests(failedRequests)
| `- warning: capture of 'failedRequestStore' with non-sendable type 'FailedLogRequestStore' in a '@Sendable' closure
62 | }
63 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/FailedLogRequestStore.swift:92:13: note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
90 | }
91 |
92 | final class FailedLogRequestStore {
| `- note: class 'FailedLogRequestStore' does not conform to the 'Sendable' protocol
93 |
94 | // MARK: Static
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:69:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
67 | func log(_ event: Event, exposureDedupeKey: DedupeKey? = nil) {
68 | logQueue.async { [weak self] in
69 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
70 |
71 | if let key = exposureDedupeKey {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:71:26: warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
69 | guard let self = self else { return }
70 |
71 | if let key = exposureDedupeKey {
| `- warning: capture of 'exposureDedupeKey' with non-sendable type 'DedupeKey?' in a '@Sendable' closure
72 | let now = Date().timeIntervalSince1970
73 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/DedupeKey.swift:1:15: note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
1 | internal enum DedupeKey: Hashable {
| `- note: consider making enum 'DedupeKey' conform to the 'Sendable' protocol
2 | case featureGate(
3 | name: String,
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:82:32: warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
80 | }
81 |
82 | self.events.append(event)
| `- warning: capture of 'event' with non-sendable type 'Event' in a '@Sendable' closure
83 |
84 | if self.events.count >= self.maxEventQueueSize {
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/Event.swift:3:7: note: class 'Event' does not conform to the 'Sendable' protocol
1 | import Foundation
2 |
3 | class Event {
| `- note: class 'Event' does not conform to the 'Sendable' protocol
4 | let name: String
5 | let value: Any?
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:92:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
90 | internal func clearExposuresDedupeDict() {
91 | logQueue.async(flags: .barrier) { [weak self] in
92 | self?.exposuresDedupeDict.removeAll()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
93 | }
94 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:101:17: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
101 | self?.flush()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
102 | }
103 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:114:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
112 | self.flushInternal(isShuttingDown: true, persistPendingEvents: persistPendingEvents) {
113 | guard let completion = completion else { return }
114 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
115 | }
116 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:121:13: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
119 | func flush(persistPendingEvents: Bool = false, completion: (() -> Void)? = nil) {
120 | logQueue.async { [weak self] in
121 | self?.addNonExposedChecksEvent()
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:123:40: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
121 | self?.addNonExposedChecksEvent()
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in an isolated closure; this is an error in the Swift 6 language mode
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
124 | DispatchQueue.global().async { completion() }
125 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:124:48: warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
122 | self?.flushInternal(persistPendingEvents: persistPendingEvents) {
123 | guard let completion = completion else { return }
124 | DispatchQueue.global().async { completion() }
| |- warning: capture of 'completion' with non-sendable type '() -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
125 | }
126 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:195:23: warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
193 | let queuedRequest =
194 | persistPendingEvents
195 | ? self.failedRequestStore.takeRequest(requestData)
| `- warning: capture of 'self' with non-sendable type 'EventLogger' in a '@Sendable' closure
196 | : nil
197 |
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:208:21: warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
206 |
207 | DispatchQueue.global().async {
208 | completion?()
| |- warning: capture of 'completion' with non-sendable type '(() -> Void)?' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
209 | }
210 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:257:30: warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
1 | import Foundation
2 |
3 | class EventLogger {
| `- note: class 'EventLogger' does not conform to the 'Sendable' protocol
4 | private static let eventQueueLabel = "com.Statsig.eventQueue"
5 | private static let nonExposedChecksEvent = "non_exposed_checks"
:
255 | func incrementNonExposedCheck(_ configName: String) {
256 | logQueue.async { [weak self] in
257 | guard let self = self else {
| `- warning: capture of 'self' with non-sendable type 'EventLogger?' in a '@Sendable' closure
258 | return
259 | }
/Users/admin/builder/spi-builder-workspace/Sources/Statsig/EventLogger.swift:98:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
96 | func start(flushInterval: TimeInterval = 60) {
97 | DispatchQueue.main.async { [weak self] in
98 | self?.flushTimer?.invalidate()
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: task-isolated 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
99 | self?.flushTimer = Timer.scheduledTimer(withTimeInterval: flushInterval, repeats: true)
100 | { [weak self] _ in
Build complete! (24.35s)
Fetching https://github.com/erikdoe/ocmock
[1/10914] Fetching ocmock
Fetched https://github.com/erikdoe/ocmock from cache (1.47s)
Fetching https://github.com/AliSoftware/OHHTTPStubs.git
Fetching https://github.com/Quick/Quick.git
Fetching https://github.com/1024jp/GzipSwift
Fetching https://github.com/Quick/Nimble.git
[1/1557] Fetching gzipswift
[173/9459] Fetching gzipswift, ohhttpstubs
[2744/24361] Fetching gzipswift, ohhttpstubs, quick
[8310/44184] Fetching gzipswift, ohhttpstubs, quick, nimble
Fetched https://github.com/AliSoftware/OHHTTPStubs.git from cache (1.40s)
Fetched https://github.com/Quick/Quick.git from cache (1.40s)
[2747/21380] Fetching gzipswift, nimble
Fetched https://github.com/1024jp/GzipSwift from cache (2.57s)
Fetched https://github.com/Quick/Nimble.git from cache (2.57s)
Computing version for https://github.com/Quick/Nimble.git
Computed https://github.com/Quick/Nimble.git at 10.0.0 (3.19s)
Fetching https://github.com/mattgallagher/CwlPreconditionTesting.git
[1/1257] Fetching cwlpreconditiontesting
Fetched https://github.com/mattgallagher/CwlPreconditionTesting.git from cache (0.94s)
Computing version for https://github.com/AliSoftware/OHHTTPStubs.git
Computed https://github.com/AliSoftware/OHHTTPStubs.git at 9.1.0 (1.55s)
Computing version for https://github.com/1024jp/GzipSwift
Computed https://github.com/1024jp/GzipSwift at 5.2.0 (0.57s)
Computing version for https://github.com/Quick/Quick.git
Computed https://github.com/Quick/Quick.git at 5.0.1 (0.60s)
Computing version for https://github.com/mattgallagher/CwlPreconditionTesting.git
Computed https://github.com/mattgallagher/CwlPreconditionTesting.git at 2.2.2 (0.59s)
Fetching https://github.com/mattgallagher/CwlCatchException.git
[1/460] Fetching cwlcatchexception
Fetched https://github.com/mattgallagher/CwlCatchException.git from cache (0.71s)
Computing version for https://github.com/mattgallagher/CwlCatchException.git
Computed https://github.com/mattgallagher/CwlCatchException.git at 2.2.1 (1.32s)
Creating working copy for https://github.com/Quick/Nimble.git
Working copy of https://github.com/Quick/Nimble.git resolved at 10.0.0
Creating working copy for https://github.com/mattgallagher/CwlCatchException.git
Working copy of https://github.com/mattgallagher/CwlCatchException.git resolved at 2.2.1
Creating working copy for https://github.com/1024jp/GzipSwift
Working copy of https://github.com/1024jp/GzipSwift resolved at 5.2.0
Creating working copy for https://github.com/AliSoftware/OHHTTPStubs.git
Working copy of https://github.com/AliSoftware/OHHTTPStubs.git resolved at 9.1.0
Creating working copy for https://github.com/Quick/Quick.git
Working copy of https://github.com/Quick/Quick.git resolved at 5.0.1
Creating working copy for https://github.com/mattgallagher/CwlPreconditionTesting.git
Working copy of https://github.com/mattgallagher/CwlPreconditionTesting.git resolved at 2.2.2
Creating working copy for https://github.com/erikdoe/ocmock
Working copy of https://github.com/erikdoe/ocmock resolved at master (7f6e9e9)
Build complete.
{
"dependencies" : [
{
"identity" : "ohhttpstubs",
"requirement" : {
"range" : [
{
"lower_bound" : "9.1.0",
"upper_bound" : "10.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/AliSoftware/OHHTTPStubs.git"
},
{
"identity" : "nimble",
"requirement" : {
"range" : [
{
"lower_bound" : "10.0.0",
"upper_bound" : "11.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/Quick/Nimble.git"
},
{
"identity" : "quick",
"requirement" : {
"range" : [
{
"lower_bound" : "5.0.0",
"upper_bound" : "6.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/Quick/Quick.git"
},
{
"identity" : "ocmock",
"requirement" : {
"branch" : [
"master"
]
},
"type" : "sourceControl",
"url" : "https://github.com/erikdoe/ocmock"
},
{
"identity" : "gzipswift",
"requirement" : {
"range" : [
{
"lower_bound" : "5.1.1",
"upper_bound" : "6.0.0"
}
]
},
"type" : "sourceControl",
"url" : "https://github.com/1024jp/GzipSwift"
}
],
"manifest_display_name" : "Statsig",
"name" : "Statsig",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "watchos",
"version" : "7.0"
},
{
"name" : "ios",
"version" : "10.0"
},
{
"name" : "tvos",
"version" : "10.0"
},
{
"name" : "macos",
"version" : "10.13"
}
],
"products" : [
{
"name" : "Statsig",
"targets" : [
"Statsig"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"swift_languages_versions" : [
"5"
],
"targets" : [
{
"c99name" : "StatsigTests",
"module_type" : "SwiftTarget",
"name" : "StatsigTests",
"path" : "Tests/StatsigTests",
"product_dependencies" : [
"Quick",
"Nimble",
"OHHTTPStubs",
"Gzip",
"OHHTTPStubsSwift"
],
"sources" : [
"ApiOverrideSpec.swift",
"AppLifecycleSpec.swift",
"AsyncInitVsUpdateSpec.swift",
"AtomicDictionarySpec.swift",
"AutoUpdateSpec.swift",
"BaseSpec.swift",
"CodableSpec.swift",
"ComparisonSpec.swift",
"CompletionCallbackRaceSpec.swift",
"DNSQuerySpec.swift",
"DeviceEnvironmentSpec.swift",
"DiagnosticsSpec.swift",
"DynamicConfigSpec.swift",
"ErrorBoundarySpec.swift",
"EvaluationCallbackSpec.swift",
"EvaluationDetailSpec.swift",
"EventLoggerSpec.swift",
"EventLoggingEnabledSpec.swift",
"EventSpec.swift",
"ExposureLoggingSpec.swift",
"FailedLogRequestStoreSpec.swift",
"FailedLogRequestStoreTestHelpers.swift",
"FileBasedUserDefaultsSpec.swift",
"FileBasedUserDefaultsUsageSpec.swift",
"GzipSpec.swift",
"InitRetriesSpec.swift",
"InitializeSinceTimeSpec.swift",
"InternalStoreAppleUserDefaultsSpec.swift",
"InternalStoreFileBasedUserDefaultsSpec.swift",
"InternalStoreMultiFileSpec.swift",
"InternalStoreSpec.swift",
"LayerConfigSpec.swift",
"LayerExposureSpec.swift",
"LocalOverridesSpec.swift",
"LockedValueSpec.swift",
"LogEventFailureSpec.swift",
"LogFlushTimerSpec.swift",
"ManualFlushSpec.swift",
"ManyThreadsSpec.swift",
"MockUserDefaults.swift",
"MultiClientSupportSpec.swift",
"NetworkFallbackResolverSpec.swift",
"NetworkServiceSpec.swift",
"NotAwaitingInitCallsSpec.swift",
"NullInitialize.swift",
"PerformanceSpec.swift",
"PrintHandlerSpec.swift",
"PublicFuncSpec.swift",
"SDKKeySpec.swift",
"SpiedEventLogger.swift",
"StatsigClientSpec.swift",
"StatsigListeningSpec.swift",
"StatsigMetadataSpec.swift",
"StatsigNetworkMetadataProviderSpec.swift",
"StatsigOptionsSpec.swift",
"StatsigSpec.swift",
"StatsigUserSpec.swift",
"StoragePerformanceSpec.swift",
"StorageProviderBasedUserDefaultsSpec.swift",
"StorageProviderBasedUserDefaultsUsageSpec.swift",
"StoreDeadlockSpec.swift",
"TestUtils.swift",
"ThreadsSpec.swift",
"UserCacheKeyMigrationSpec.swift",
"UserCacheKeySpec.swift",
"UserHashingSpec.swift"
],
"target_dependencies" : [
"Statsig"
],
"type" : "test"
},
{
"c99name" : "StatsigObjcTests",
"module_type" : "ClangTarget",
"name" : "StatsigObjcTests",
"path" : "Tests/StatsigObjcTests",
"product_dependencies" : [
"OCMock"
],
"resources" : [
{
"path" : "/Users/admin/builder/spi-builder-workspace/Tests/StatsigObjcTests/Resources/initialize.json",
"rule" : {
"process" : {
}
}
}
],
"sources" : [
"ObjcManualExposureSpec.m",
"ObjcParameterStoreSpec.m",
"ObjcStableIDSpec.m",
"ObjcStatsigUserSpec.m",
"ObjcTestUtils.m",
"ObjcUsageSpec.m"
],
"target_dependencies" : [
"Statsig"
],
"type" : "test"
},
{
"c99name" : "Statsig",
"module_type" : "SwiftTarget",
"name" : "Statsig",
"path" : "Sources/Statsig",
"product_memberships" : [
"Statsig"
],
"sources" : [
"AtomicDictionary.swift",
"BootstrapValidator.swift",
"ClientError.swift",
"Comparison.swift",
"Concurrency/LockedValue.swift",
"ConfigBase.swift",
"ConfigProtocol.swift",
"CryptoSwift.swift",
"DNSQuery.swift",
"Data+Statsig.swift",
"DedupeKey.swift",
"DeviceEnvironment.swift",
"Diagnostics/CreateCacheMarker.swift",
"Diagnostics/Diagnostics.swift",
"Diagnostics/DiagnosticsEvent.swift",
"Diagnostics/InitializeMarker.swift",
"Diagnostics/InitializeStepMarker.swift",
"Diagnostics/MarkerBase.swift",
"Diagnostics/NetworkMarker.swift",
"Diagnostics/OverallMarker.swift",
"DynamicConfig.swift",
"ErrorBoundary.swift",
"EvaluationDetails.swift",
"EvaluationResult.swift",
"Evaluator.swift",
"Event.swift",
"EventLogger.swift",
"ExternalInitializeResponse.swift",
"FailedLogRequestStore.swift",
"FeatureGate.swift",
"Gzip.swift",
"JsonValue.swift",
"Layer.swift",
"NetworkFallbackResolver.swift",
"NetworkService.swift",
"ObjectiveC/DynamicConfigObjC.swift",
"ObjectiveC/FeatureGateObjC.swift",
"ObjectiveC/LayerObjC.swift",
"ObjectiveC/ParameterStoreObjC.swift",
"ObjectiveC/StatsigObjC.swift",
"ObjectiveC/StatsigOptionsObjC.swift",
"ObjectiveC/StatsigOverridesObjC.swift",
"ObjectiveC/StatsigUserObjC.swift",
"OverrideAdapter/OnDeviceEvalAdapter.swift",
"OverrideAdapter/OverrideAdapter.swift",
"ParameterStore.swift",
"PlatformCompatibility.swift",
"PrintHandler.swift",
"SDKKeyValidator.swift",
"SpecsResponse.swift",
"Statsig.swift",
"StatsigClient+AppLifecycle.swift",
"StatsigClient.swift",
"StatsigDebugViewController.swift",
"StatsigDynamicConfigValue.swift",
"StatsigEnvironment.swift",
"StatsigError.swift",
"StatsigListening.swift",
"StatsigMetadata.swift",
"StatsigNetworkMetadataProvider.swift",
"StatsigOptions.swift",
"StatsigUser.swift",
"StatsigUserCustomTypeConvertible.swift",
"Storage/BootstrapMetadata.swift",
"Storage/FileStorageAdapter.swift",
"Storage/InternalStore.swift",
"Storage/SDKConfigs.swift",
"Storage/SDKFlags.swift",
"Storage/StatsigValuesCache.swift",
"Storage/StorageAdapter.swift",
"Storage/StorageProviderToAdapter.swift",
"Storage/StorageService.swift",
"Storage/StorageServiceMigrationStatus.swift",
"Storage/StoreItems/UserPayloadIndex.swift",
"Storage/StoreItems/UserPayloadStore.swift",
"Storage/UserDefaults/FileBasedUserDefaults.swift",
"Storage/UserDefaults/StatsigUserDefaults.swift",
"Storage/UserDefaults/StorageProviderBasedUserDefaults.swift",
"Storage/UserDefaultsKeys.swift",
"Threads.swift",
"Time.swift",
"URLResponse+Statsig.swift",
"UserCacheKey.swift"
],
"type" : "library"
}
],
"tools_version" : "5.3"
}
Done.