apple_kit

Apple-native services for Radroots iOS and macOS apps
git clone https://radroots.dev/git/apple_kit.git
Log | Files | Refs | README

commit 486fd1c1e92b40379e61c3bdb3a60e06316266fd
parent 15ed98b2e88ddf2f99f6efc6ac8dde9bb1ffe557
Author: triesap <tyson@radroots.org>
Date:   Wed, 17 Jun 2026 20:41:43 -0700

apple-kit: expose background session event handling

Add the background URLSession event callback to the shared background transfer contract and test fake so app runtimes can bridge iOS lifecycle events without owning transfer execution.

Diffstat:
MSources/RadrootsKit/RadrootsBackgroundTransfer.swift | 11+++++++++++
MSources/RadrootsKitTesting/RadrootsBackgroundTransferTesting.swift | 14++++++++++++++
2 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/Sources/RadrootsKit/RadrootsBackgroundTransfer.swift b/Sources/RadrootsKit/RadrootsBackgroundTransfer.swift @@ -175,6 +175,10 @@ public protocol RadrootsBackgroundTransfer: Sendable { func cancel(_ identifier: RadrootsBackgroundTransferIdentifier) async throws func snapshot(for identifier: RadrootsBackgroundTransferIdentifier) async throws -> RadrootsBackgroundTransferSnapshot? func snapshots() async throws -> [RadrootsBackgroundTransferSnapshot] + func handleEventsForBackgroundURLSession( + identifier: String, + completionHandler: @escaping @Sendable () -> Void + ) async } public protocol RadrootsBackgroundTransferFileResolver: Sendable { @@ -287,6 +291,13 @@ public struct RadrootsUnavailableBackgroundTransfer: RadrootsBackgroundTransfer, public func snapshots() async throws -> [RadrootsBackgroundTransferSnapshot] { throw RadrootsBackgroundTransferError.unavailable(reason) } + + public func handleEventsForBackgroundURLSession( + identifier: String, + completionHandler: @escaping @Sendable () -> Void + ) async { + completionHandler() + } } public enum RadrootsBackgroundTransferValidation { diff --git a/Sources/RadrootsKitTesting/RadrootsBackgroundTransferTesting.swift b/Sources/RadrootsKitTesting/RadrootsBackgroundTransferTesting.swift @@ -32,6 +32,7 @@ public actor RadrootsFakeBackgroundTransfer: RadrootsBackgroundTransfer { private var enqueueOutcome: Result<Void, RadrootsBackgroundTransferError> private var enqueuedRequestsValue: [RadrootsBackgroundTransferRequest] private var cancelledIdentifiersValue: [RadrootsBackgroundTransferIdentifier] + private var handledBackgroundEventIdentifiersValue: [String] private let updatedAt: Date public init( @@ -43,6 +44,7 @@ public actor RadrootsFakeBackgroundTransfer: RadrootsBackgroundTransfer { self.enqueueOutcome = enqueueOutcome self.enqueuedRequestsValue = [] self.cancelledIdentifiersValue = [] + self.handledBackgroundEventIdentifiersValue = [] self.updatedAt = updatedAt } @@ -114,6 +116,14 @@ public actor RadrootsFakeBackgroundTransfer: RadrootsBackgroundTransfer { try await store.loadSnapshots() } + public func handleEventsForBackgroundURLSession( + identifier: String, + completionHandler: @escaping @Sendable () -> Void + ) async { + handledBackgroundEventIdentifiersValue.append(identifier) + completionHandler() + } + public var enqueuedRequests: [RadrootsBackgroundTransferRequest] { enqueuedRequestsValue } @@ -121,4 +131,8 @@ public actor RadrootsFakeBackgroundTransfer: RadrootsBackgroundTransfer { public var cancelledIdentifiers: [RadrootsBackgroundTransferIdentifier] { cancelledIdentifiersValue } + + public var handledBackgroundEventIdentifiers: [String] { + handledBackgroundEventIdentifiersValue + } }