Build Information
Failed to build SessionReplaySDK, reference main (4028db), with Swift 6.1 for macOS (SPM) on 23 Feb 2026 04:17:05 UTC.
Build Command
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64Build Log
========================================
RunAll
========================================
Builder version: 4.68.0
Interrupt handler set up.
========================================
Checkout
========================================
Clone URL: https://github.com/AlmoutasemNabil/SessionReplaySDK.git
Reference: main
Initialized empty Git repository in /Users/admin/builder/spi-builder-workspace/.git/
From https://github.com/AlmoutasemNabil/SessionReplaySDK
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
HEAD is now at 4028db0 Add async/completion-based stopSession API
Cloned https://github.com/AlmoutasemNabil/SessionReplaySDK.git
Revision (git rev-parse @):
4028db00fb504452e2e94dc51566a9d26a7b851b
SUCCESS checkout https://github.com/AlmoutasemNabil/SessionReplaySDK.git at main
========================================
Build
========================================
Selected platform: macosSpm
Swift version: 6.1
Building package at path: $PWD
https://github.com/AlmoutasemNabil/SessionReplaySDK.git
https://github.com/AlmoutasemNabil/SessionReplaySDK.git
{
"dependencies" : [
],
"manifest_display_name" : "SessionReplaySDK",
"name" : "SessionReplaySDK",
"path" : "/Users/admin/builder/spi-builder-workspace",
"platforms" : [
{
"name" : "ios",
"version" : "15.0"
},
{
"name" : "macos",
"version" : "12.0"
}
],
"products" : [
{
"name" : "SessionReplaySDK",
"targets" : [
"SessionReplaySDK"
],
"type" : {
"library" : [
"automatic"
]
}
}
],
"targets" : [
{
"c99name" : "SessionReplaySDK",
"module_type" : "SwiftTarget",
"name" : "SessionReplaySDK",
"path" : "Sources/SessionReplaySDK",
"product_memberships" : [
"SessionReplaySDK"
],
"sources" : [
"Core/Models.swift",
"Core/SessionReplayManager.swift",
"Integration/SwiftUIIntegration.swift",
"Integration/UIKitIntegration.swift",
"Logging/NetworkInterceptor.swift",
"Logging/SessionLogger.swift",
"SessionReplaySDK.swift",
"Upload/SessionUploader.swift",
"Video/VideoWriter.swift"
],
"type" : "library"
}
],
"tools_version" : "5.9"
}
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64 -Xswiftc -Xfrontend -Xswiftc -stats-output-dir -Xswiftc -Xfrontend -Xswiftc .stats -Xswiftc -strict-concurrency=complete -Xswiftc -enable-upcoming-feature -Xswiftc StrictConcurrency -Xswiftc -enable-upcoming-feature -Xswiftc DisableOutwardActorInference -Xswiftc -enable-upcoming-feature -Xswiftc GlobalActorIsolatedTypesUsability -Xswiftc -enable-upcoming-feature -Xswiftc InferSendableFromCaptures
Building for debugging...
[0/2] Write sources
[1/2] Write swift-version-2F0A5646E1D333AE.txt
[3/12] Compiling SessionReplaySDK VideoWriter.swift
[4/12] Compiling SessionReplaySDK SessionReplaySDK.swift
[5/12] Compiling SessionReplaySDK SessionUploader.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:152:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionUploader' may have shared mutable state; this is an error in the Swift 6 language mode
148 |
149 | /// Main class for uploading session recordings to a backend
150 | public final class SessionUploader {
| `- note: class 'SessionUploader' does not conform to the 'Sendable' protocol
151 |
152 | public static let shared = SessionUploader()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionUploader' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
153 |
154 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:194:19: warning: value 'config' was defined but never used; consider replacing with boolean test
192 | completion: @escaping (Result<SessionUploadResponse, Error>) -> Void
193 | ) {
194 | guard let config = config else {
| `- warning: value 'config' was defined but never used; consider replacing with boolean test
195 | completion(.failure(SessionUploadError.notConfigured))
196 | return
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:280:13: warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
148 |
149 | /// Main class for uploading session recordings to a backend
150 | public final class SessionUploader {
| `- note: class 'SessionUploader' does not conform to the 'Sendable' protocol
151 |
152 | public static let shared = SessionUploader()
:
278 |
279 | uploadQueue.async { [weak self] in
280 | self?.performUpload(
| `- warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
281 | sessionId: sessionId,
282 | videoURL: videoURL,
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:284:25: warning: capture of 'config' with non-sendable type 'SessionUploadConfig' in a '@Sendable' closure
21 |
22 | /// Configuration for session uploads
23 | public struct SessionUploadConfig {
| `- note: consider making struct 'SessionUploadConfig' conform to the 'Sendable' protocol
24 | /// Base URL for the upload endpoint
25 | public var baseURL: URL
:
282 | videoURL: videoURL,
283 | jsonURL: jsonURL,
284 | config: config,
| `- warning: capture of 'config' with non-sendable type 'SessionUploadConfig' in a '@Sendable' closure
285 | completion: completion
286 | )
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:285:29: warning: capture of 'completion' with non-sendable type '(Result<SessionUploadResponse, any Error>) -> Void' in a '@Sendable' closure
283 | jsonURL: jsonURL,
284 | config: config,
285 | completion: completion
| |- warning: capture of 'completion' with non-sendable type '(Result<SessionUploadResponse, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
286 | )
287 | }
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:293:27: warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
148 |
149 | /// Main class for uploading session recordings to a backend
150 | public final class SessionUploader {
| `- note: class 'SessionUploader' does not conform to the 'Sendable' protocol
151 |
152 | public static let shared = SessionUploader()
:
291 | public func cancelUpload(sessionId: String) {
292 | uploadQueue.async { [weak self] in
293 | if let task = self?.activeTasks[sessionId] {
| `- warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
294 | task.cancel()
295 | self?.activeTasks.removeValue(forKey: sessionId)
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:371:13: warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
148 |
149 | /// Main class for uploading session recordings to a backend
150 | public final class SessionUploader {
| `- note: class 'SessionUploader' does not conform to the 'Sendable' protocol
151 |
152 | public static let shared = SessionUploader()
:
369 | // Create upload task
370 | let task = urlSession.dataTask(with: request) { [weak self] data, response, error in
371 | self?.activeTasks.removeValue(forKey: sessionId)
| `- warning: capture of 'self' with non-sendable type 'SessionUploader?' in a '@Sendable' closure
372 |
373 | if let error = error {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:378:25: warning: capture of 'completion' with non-sendable type '(Result<SessionUploadResponse, any Error>) -> Void' in a '@Sendable' closure
376 | self?.uploadStatuses[sessionId] = .cancelled
377 | DispatchQueue.main.async {
378 | completion(.failure(SessionUploadError.uploadCancelled))
| |- warning: capture of 'completion' with non-sendable type '(Result<SessionUploadResponse, any Error>) -> Void' in a '@Sendable' closure
| `- note: a function type must be marked '@Sendable' to conform to 'Sendable'
379 | }
380 | return
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:384:33: warning: capture of 'config' with non-sendable type 'SessionUploadConfig' in a '@Sendable' closure
21 |
22 | /// Configuration for session uploads
23 | public struct SessionUploadConfig {
| `- note: consider making struct 'SessionUploadConfig' conform to the 'Sendable' protocol
24 | /// Base URL for the upload endpoint
25 | public var baseURL: URL
:
382 |
383 | // Retry logic
384 | if retryCount < config.maxRetries {
| `- warning: capture of 'config' with non-sendable type 'SessionUploadConfig' in a '@Sendable' closure
385 | self?.performUpload(
386 | sessionId: sessionId,
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:317:13: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
315 | ) {
316 | DispatchQueue.main.async { [weak self] in
317 | self?.delegate?.uploadDidStart(sessionId: sessionId)
| |- 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
318 | }
319 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:445:17: warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
442 | }
443 |
444 | DispatchQueue.main.async { [weak self] in
| `- note: access can happen concurrently
445 | self?.delegate?.uploadDidComplete(sessionId: sessionId, response: uploadResponse)
| |- warning: sending 'self' risks causing data races; this is an error in the Swift 6 language mode
| `- note: 'self' is captured by a main actor-isolated closure. main actor-isolated uses in closure may race against later nonisolated uses
446 | completion(.success(uploadResponse))
447 | }
[6/12] Compiling SessionReplaySDK NetworkInterceptor.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:27:13: warning: var 'taskIdKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 | // MARK: - Associated Object Keys
26 |
27 | private var taskIdKey: UInt8 = 0
| |- warning: var 'taskIdKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskIdKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskIdKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:28:13: warning: var 'taskStartTimeKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
26 |
27 | private var taskIdKey: UInt8 = 0
28 | private var taskStartTimeKey: UInt8 = 1
| |- warning: var 'taskStartTimeKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskStartTimeKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskStartTimeKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:29:13: warning: var 'taskRequestKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
27 | private var taskIdKey: UInt8 = 0
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
| |- warning: var 'taskRequestKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskRequestKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskRequestKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:30:13: warning: var 'taskResponseDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
| |- warning: var 'taskResponseDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskResponseDataKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskResponseDataKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:31:13: warning: var 'originalDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
| |- warning: var 'originalDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDelegateKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'originalDelegateKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:32:13: warning: var 'hasInjectedDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
| |- warning: var 'hasInjectedDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'hasInjectedDelegateKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'hasInjectedDelegateKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
33 | private var taskObserverKey: UInt8 = 6
34 | private var taskCompletedKey: UInt8 = 7
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:33:13: warning: var 'taskObserverKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
| |- warning: var 'taskObserverKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskObserverKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskObserverKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | private var taskCompletedKey: UInt8 = 7
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:34:13: warning: var 'taskCompletedKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
34 | private var taskCompletedKey: UInt8 = 7
| |- warning: var 'taskCompletedKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskCompletedKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskCompletedKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | // MARK: - Network Interceptor
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:42:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'NetworkInterceptor' may have shared mutable state; this is an error in the Swift 6 language mode
38 | /// Intercepts all network requests using URLSession method swizzling.
39 | /// Works with ALL URLSession configurations including custom sessions with SSL pinning.
40 | public final class NetworkInterceptor {
| `- note: class 'NetworkInterceptor' does not conform to the 'Sendable' protocol
41 |
42 | public static let shared = NetworkInterceptor()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'NetworkInterceptor' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
43 |
44 | private weak var logger: SessionLogger?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:304:13: warning: var 'accumulatedDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
302 | // MARK: - URLSessionTask Extension for Data Accumulation
303 |
304 | private var accumulatedDataKey: UInt8 = 10
| |- warning: var 'accumulatedDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'accumulatedDataKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'accumulatedDataKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | extension URLSessionTask {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:330:24: warning: static property 'hasSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
328 | final class URLSessionSwizzler {
329 |
330 | private static var hasSwizzled = false
| |- warning: static property 'hasSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'hasSwizzled' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'hasSwizzled' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
331 | private static let swizzleLock = NSLock()
332 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:334:24: warning: static property 'originalResumeIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
332 |
333 | // Store original implementations
334 | private static var originalResumeIMP: IMP?
| |- warning: static property 'originalResumeIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalResumeIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalResumeIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:335:24: warning: static property 'originalDataTaskRequestCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
333 | // Store original implementations
334 | private static var originalResumeIMP: IMP?
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
| |- warning: static property 'originalDataTaskRequestCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDataTaskRequestCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalDataTaskRequestCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:336:24: warning: static property 'originalDataTaskURLCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
334 | private static var originalResumeIMP: IMP?
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
| |- warning: static property 'originalDataTaskURLCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDataTaskURLCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalDataTaskURLCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:337:24: warning: static property 'originalUploadTaskDataCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
| |- warning: static property 'originalUploadTaskDataCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalUploadTaskDataCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalUploadTaskDataCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
339 | private static var originalSessionInitIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:338:24: warning: static property 'originalUploadTaskFileCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
| |- warning: static property 'originalUploadTaskFileCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalUploadTaskFileCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalUploadTaskFileCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
339 | private static var originalSessionInitIMP: IMP?
340 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:339:24: warning: static property 'originalSessionInitIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
339 | private static var originalSessionInitIMP: IMP?
| |- warning: static property 'originalSessionInitIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalSessionInitIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalSessionInitIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
340 |
341 | /// Swizzle URLSession methods once. Safe to call multiple times.
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:279:30: warning: capture of 'self' with non-sendable type 'TaskStateObserver?' in a '@Sendable' closure
265 | /// Observes URLSessionTask state changes using KVO to capture completion
266 | /// for delegate-based tasks that don't use completion handlers.
267 | private class TaskStateObserver: NSObject {
| `- note: class 'TaskStateObserver' does not conform to the 'Sendable' protocol
268 | private weak var task: URLSessionTask?
269 | private weak var interceptor: NetworkInterceptor?
:
277 | // Observe task state changes
278 | observation = task.observe(\.state, options: [.new]) { [weak self] task, change in
279 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'TaskStateObserver?' in a '@Sendable' closure
280 |
281 | if task.state == .completed {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:413:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
411 |
412 | private static func swizzleDataTaskWithRequestAndCompletion() {
413 | let selector = #selector(URLSession.dataTask(with:completionHandler:) as (URLSession) -> (URLRequest, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
414 |
415 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:450:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
448 |
449 | private static func swizzleDataTaskWithURLAndCompletion() {
450 | let selector = #selector(URLSession.dataTask(with:completionHandler:) as (URLSession) -> (URL, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
451 |
452 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:482:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
480 |
481 | private static func swizzleUploadTaskWithDataAndCompletion() {
482 | let selector = #selector(URLSession.uploadTask(with:from:completionHandler:) as (URLSession) -> (URLRequest, Data?, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
483 |
484 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:514:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
512 |
513 | private static func swizzleUploadTaskWithFileAndCompletion() {
514 | let selector = #selector(URLSession.uploadTask(with:fromFile:completionHandler:) as (URLSession) -> (URLRequest, URL, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
515 |
516 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
[7/12] Compiling SessionReplaySDK SessionLogger.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:22:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionLogger' may have shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | /// Main class for capturing console logs and network requests during a session.
20 | public final class SessionLogger {
| `- note: class 'SessionLogger' does not conform to the 'Sendable' protocol
21 |
22 | public static let shared = SessionLogger()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionLogger' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:163:30: warning: capture of 'self' with non-sendable type 'SessionLogger?' in a '@Sendable' closure
18 |
19 | /// Main class for capturing console logs and network requests during a session.
20 | public final class SessionLogger {
| `- note: class 'SessionLogger' does not conform to the 'Sendable' protocol
21 |
22 | public static let shared = SessionLogger()
:
161 | internal func addLogEntry(message: String, level: LogLevel, source: String) {
162 | logQueue.async { [weak self] in
163 | guard let self = self, self.isCapturing else { return }
| `- warning: capture of 'self' with non-sendable type 'SessionLogger?' in a '@Sendable' closure
164 | guard let startTime = self.sessionStartTime else { return }
165 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:180:24: warning: capture of 'level' with non-sendable type 'LogLevel' in a '@Sendable' closure
178 | timestamp: now.timeIntervalSince(startTime) * 1000,
179 | absoluteTime: now,
180 | level: level,
| `- warning: capture of 'level' with non-sendable type 'LogLevel' in a '@Sendable' closure
181 | message: sanitizedMessage,
182 | source: source,
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:213:13: note: consider making enum 'LogLevel' conform to the 'Sendable' protocol
211 |
212 | /// Severity level for captured logs
213 | public enum LogLevel: String, Codable, Comparable {
| `- note: consider making enum 'LogLevel' conform to the 'Sendable' protocol
214 | case debug = "debug"
215 | case info = "info"
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:196:30: warning: capture of 'self' with non-sendable type 'SessionLogger?' in a '@Sendable' closure
18 |
19 | /// Main class for capturing console logs and network requests during a session.
20 | public final class SessionLogger {
| `- note: class 'SessionLogger' does not conform to the 'Sendable' protocol
21 |
22 | public static let shared = SessionLogger()
:
194 | internal func addNetworkEntry(_ entry: NetworkEntry) {
195 | logQueue.async { [weak self] in
196 | guard let self = self, self.isCapturing else { return }
| `- warning: capture of 'self' with non-sendable type 'SessionLogger?' in a '@Sendable' closure
197 |
198 | self.networkEntries.append(entry)
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:198:40: warning: capture of 'entry' with non-sendable type 'NetworkEntry' in a '@Sendable' closure
196 | guard let self = self, self.isCapturing else { return }
197 |
198 | self.networkEntries.append(entry)
| `- warning: capture of 'entry' with non-sendable type 'NetworkEntry' in a '@Sendable' closure
199 |
200 | if self.networkEntries.count > self.maxNetworkEntries {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:260:15: note: consider making struct 'NetworkEntry' conform to the 'Sendable' protocol
258 |
259 | /// A captured network request with response
260 | public struct NetworkEntry: Codable {
| `- note: consider making struct 'NetworkEntry' conform to the 'Sendable' protocol
261 | public let id: String
262 | public let timestamp: TimeInterval
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:309:30: warning: capture of 'self' with non-sendable type 'ConsoleCapture?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
281 |
282 | /// Captures stdout/stderr using Unix pipe redirection
283 | private final class ConsoleCapture {
| `- note: class 'ConsoleCapture' does not conform to the 'Sendable' protocol
284 | private let inputPipe = Pipe()
285 | private let originalFD: Int32
:
307 |
308 | inputPipe.fileHandleForReading.readabilityHandler = { [weak self] handle in
309 | guard let self = self else { return }
| `- warning: capture of 'self' with non-sendable type 'ConsoleCapture?' in a '@Sendable' closure; this is an error in the Swift 6 language mode
310 |
311 | let data = handle.availableData
[8/12] Compiling SessionReplaySDK UIKitIntegration.swift
error: emit-module command failed with exit code 1 (use -v to see invocation)
[9/12] Compiling SessionReplaySDK SwiftUIIntegration.swift
[10/12] Compiling SessionReplaySDK SessionReplayManager.swift
[11/12] Compiling SessionReplaySDK Models.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:55:40: error: cannot find type 'UIColor' in scope
53 |
54 | /// Color used to mask sensitive content
55 | public var sensitiveViewMaskColor: UIColor = .gray
| `- error: cannot find type 'UIColor' in scope
56 |
57 | /// Whether to automatically mask text input fields
[12/12] Emitting module SessionReplaySDK
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:55:40: error: cannot find type 'UIColor' in scope
53 |
54 | /// Color used to mask sensitive content
55 | public var sensitiveViewMaskColor: UIColor = .gray
| `- error: cannot find type 'UIColor' in scope
56 |
57 | /// Whether to automatically mask text input fields
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:27:13: warning: var 'taskIdKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
25 | // MARK: - Associated Object Keys
26 |
27 | private var taskIdKey: UInt8 = 0
| |- warning: var 'taskIdKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskIdKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskIdKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:28:13: warning: var 'taskStartTimeKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
26 |
27 | private var taskIdKey: UInt8 = 0
28 | private var taskStartTimeKey: UInt8 = 1
| |- warning: var 'taskStartTimeKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskStartTimeKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskStartTimeKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:29:13: warning: var 'taskRequestKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
27 | private var taskIdKey: UInt8 = 0
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
| |- warning: var 'taskRequestKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskRequestKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskRequestKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:30:13: warning: var 'taskResponseDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
28 | private var taskStartTimeKey: UInt8 = 1
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
| |- warning: var 'taskResponseDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskResponseDataKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskResponseDataKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:31:13: warning: var 'originalDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
29 | private var taskRequestKey: UInt8 = 2
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
| |- warning: var 'originalDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDelegateKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'originalDelegateKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:32:13: warning: var 'hasInjectedDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
30 | private var taskResponseDataKey: UInt8 = 3
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
| |- warning: var 'hasInjectedDelegateKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'hasInjectedDelegateKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'hasInjectedDelegateKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
33 | private var taskObserverKey: UInt8 = 6
34 | private var taskCompletedKey: UInt8 = 7
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:33:13: warning: var 'taskObserverKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
31 | private var originalDelegateKey: UInt8 = 4
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
| |- warning: var 'taskObserverKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskObserverKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskObserverKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
34 | private var taskCompletedKey: UInt8 = 7
35 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:34:13: warning: var 'taskCompletedKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
32 | private var hasInjectedDelegateKey: UInt8 = 5
33 | private var taskObserverKey: UInt8 = 6
34 | private var taskCompletedKey: UInt8 = 7
| |- warning: var 'taskCompletedKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'taskCompletedKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'taskCompletedKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
35 |
36 | // MARK: - Network Interceptor
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:42:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'NetworkInterceptor' may have shared mutable state; this is an error in the Swift 6 language mode
38 | /// Intercepts all network requests using URLSession method swizzling.
39 | /// Works with ALL URLSession configurations including custom sessions with SSL pinning.
40 | public final class NetworkInterceptor {
| `- note: class 'NetworkInterceptor' does not conform to the 'Sendable' protocol
41 |
42 | public static let shared = NetworkInterceptor()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'NetworkInterceptor' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
43 |
44 | private weak var logger: SessionLogger?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:304:13: warning: var 'accumulatedDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
302 | // MARK: - URLSessionTask Extension for Data Accumulation
303 |
304 | private var accumulatedDataKey: UInt8 = 10
| |- warning: var 'accumulatedDataKey' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'accumulatedDataKey' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make var 'accumulatedDataKey' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
305 |
306 | extension URLSessionTask {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:330:24: warning: static property 'hasSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
328 | final class URLSessionSwizzler {
329 |
330 | private static var hasSwizzled = false
| |- warning: static property 'hasSwizzled' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'hasSwizzled' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'hasSwizzled' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
331 | private static let swizzleLock = NSLock()
332 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:334:24: warning: static property 'originalResumeIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
332 |
333 | // Store original implementations
334 | private static var originalResumeIMP: IMP?
| |- warning: static property 'originalResumeIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalResumeIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalResumeIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:335:24: warning: static property 'originalDataTaskRequestCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
333 | // Store original implementations
334 | private static var originalResumeIMP: IMP?
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
| |- warning: static property 'originalDataTaskRequestCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDataTaskRequestCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalDataTaskRequestCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:336:24: warning: static property 'originalDataTaskURLCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
334 | private static var originalResumeIMP: IMP?
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
| |- warning: static property 'originalDataTaskURLCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalDataTaskURLCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalDataTaskURLCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:337:24: warning: static property 'originalUploadTaskDataCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
335 | private static var originalDataTaskRequestCompletionIMP: IMP?
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
| |- warning: static property 'originalUploadTaskDataCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalUploadTaskDataCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalUploadTaskDataCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
339 | private static var originalSessionInitIMP: IMP?
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:338:24: warning: static property 'originalUploadTaskFileCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
336 | private static var originalDataTaskURLCompletionIMP: IMP?
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
| |- warning: static property 'originalUploadTaskFileCompletionIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalUploadTaskFileCompletionIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalUploadTaskFileCompletionIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
339 | private static var originalSessionInitIMP: IMP?
340 |
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:339:24: warning: static property 'originalSessionInitIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
337 | private static var originalUploadTaskDataCompletionIMP: IMP?
338 | private static var originalUploadTaskFileCompletionIMP: IMP?
339 | private static var originalSessionInitIMP: IMP?
| |- warning: static property 'originalSessionInitIMP' is not concurrency-safe because it is nonisolated global shared mutable state; this is an error in the Swift 6 language mode
| |- note: convert 'originalSessionInitIMP' to a 'let' constant to make 'Sendable' shared state immutable
| |- note: add '@MainActor' to make static property 'originalSessionInitIMP' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
340 |
341 | /// Swizzle URLSession methods once. Safe to call multiple times.
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:413:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
411 |
412 | private static func swizzleDataTaskWithRequestAndCompletion() {
413 | let selector = #selector(URLSession.dataTask(with:completionHandler:) as (URLSession) -> (URLRequest, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
414 |
415 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:450:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
448 |
449 | private static func swizzleDataTaskWithURLAndCompletion() {
450 | let selector = #selector(URLSession.dataTask(with:completionHandler:) as (URLSession) -> (URL, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
451 |
452 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:482:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
480 |
481 | private static func swizzleUploadTaskWithDataAndCompletion() {
482 | let selector = #selector(URLSession.uploadTask(with:from:completionHandler:) as (URLSession) -> (URLRequest, Data?, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
483 |
484 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/NetworkInterceptor.swift:514:45: warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
512 |
513 | private static func swizzleUploadTaskWithFileAndCompletion() {
514 | let selector = #selector(URLSession.uploadTask(with:fromFile:completionHandler:) as (URLSession) -> (URLRequest, URL, @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionUploadTask)
| `- warning: converting non-sendable function value to '@Sendable (Data?, URLResponse?, (any Error)?) -> Void' may introduce data races
515 |
516 | guard let originalMethod = class_getInstanceMethod(URLSession.self, selector) else {
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Logging/SessionLogger.swift:22:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionLogger' may have shared mutable state; this is an error in the Swift 6 language mode
18 |
19 | /// Main class for capturing console logs and network requests during a session.
20 | public final class SessionLogger {
| `- note: class 'SessionLogger' does not conform to the 'Sendable' protocol
21 |
22 | public static let shared = SessionLogger()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionLogger' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
23 |
24 | // MARK: - Properties
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:152:23: warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionUploader' may have shared mutable state; this is an error in the Swift 6 language mode
148 |
149 | /// Main class for uploading session recordings to a backend
150 | public final class SessionUploader {
| `- note: class 'SessionUploader' does not conform to the 'Sendable' protocol
151 |
152 | public static let shared = SessionUploader()
| |- warning: static property 'shared' is not concurrency-safe because non-'Sendable' type 'SessionUploader' may have shared mutable state; this is an error in the Swift 6 language mode
| |- note: add '@MainActor' to make static property 'shared' part of global actor 'MainActor'
| `- note: disable concurrency-safety checks if accesses are protected by an external synchronization mechanism
153 |
154 | // MARK: - Properties
Running build ...
env DEVELOPER_DIR=/Applications/Xcode-16.3.0.app xcrun swift build --arch arm64
[0/1] Planning build
Building for debugging...
[0/1] Write swift-version-2F0A5646E1D333AE.txt
[2/11] Compiling SessionReplaySDK SessionReplaySDK.swift
[3/11] Compiling SessionReplaySDK VideoWriter.swift
[4/11] Compiling SessionReplaySDK SessionUploader.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Upload/SessionUploader.swift:194:19: warning: value 'config' was defined but never used; consider replacing with boolean test
192 | completion: @escaping (Result<SessionUploadResponse, Error>) -> Void
193 | ) {
194 | guard let config = config else {
| `- warning: value 'config' was defined but never used; consider replacing with boolean test
195 | completion(.failure(SessionUploadError.notConfigured))
196 | return
[5/11] Compiling SessionReplaySDK SessionLogger.swift
error: emit-module command failed with exit code 1 (use -v to see invocation)
[6/11] Compiling SessionReplaySDK UIKitIntegration.swift
[7/11] Compiling SessionReplaySDK SessionReplayManager.swift
[8/11] Compiling SessionReplaySDK NetworkInterceptor.swift
[9/11] Compiling SessionReplaySDK SwiftUIIntegration.swift
[10/11] Emitting module SessionReplaySDK
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:55:40: error: cannot find type 'UIColor' in scope
53 |
54 | /// Color used to mask sensitive content
55 | public var sensitiveViewMaskColor: UIColor = .gray
| `- error: cannot find type 'UIColor' in scope
56 |
57 | /// Whether to automatically mask text input fields
[11/11] Compiling SessionReplaySDK Models.swift
/Users/admin/builder/spi-builder-workspace/Sources/SessionReplaySDK/Core/Models.swift:55:40: error: cannot find type 'UIColor' in scope
53 |
54 | /// Color used to mask sensitive content
55 | public var sensitiveViewMaskColor: UIColor = .gray
| `- error: cannot find type 'UIColor' in scope
56 |
57 | /// Whether to automatically mask text input fields
BUILD FAILURE 6.1 macosSpm