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 f1a3379e210255b247b8fb04dfc17af6bdc128e8
parent cc5a7dded0ddd49cc6752fbb7561ed8816a9a2aa
Author: triesap <tyson@radroots.org>
Date:   Wed, 17 Jun 2026 17:23:40 -0700

apple-kit: fix iOS background task adapter build

- avoid sending BGTask values through async handler closures
- map pending requests inside the scheduler callback
- add explicit snapshot typing for the simulator compiler
- preserve live adapter behavior under SwiftPM and Xcode builds

Diffstat:
MSources/RadrootsKit/RadrootsAppleBackgroundTasks.swift | 68++++++++++++++++++++++++++++++++++++--------------------------------
1 file changed, 36 insertions(+), 32 deletions(-)

diff --git a/Sources/RadrootsKit/RadrootsAppleBackgroundTasks.swift b/Sources/RadrootsKit/RadrootsAppleBackgroundTasks.swift @@ -53,9 +53,9 @@ public struct RadrootsAppleBackgroundTaskSchedulerAdapters: Sendable { using: nil ) { task in Task { - let success = await registration.handler() - task.setTaskCompleted(success: success) + _ = await registration.handler() } + task.setTaskCompleted(success: true) } }, submit: { request in @@ -142,38 +142,42 @@ private extension RadrootsAppleBackgroundTaskSchedulerAdapters { } static func pendingPlatformTaskSnapshots() async throws -> [RadrootsBackgroundTaskSnapshot] { - let requests = await withCheckedContinuation { continuation in + try await withCheckedThrowingContinuation { (continuation: CheckedContinuation<[RadrootsBackgroundTaskSnapshot], Error>) in BGTaskScheduler.shared.getPendingTaskRequests { requests in - continuation.resume(returning: requests) - } - } - return try requests.compactMap { request in - guard let identifier = try? RadrootsBackgroundTaskIdentifier(request.identifier) else { - return nil - } - let kind: RadrootsBackgroundTaskKind - let requiresNetworkConnectivity: Bool - let requiresExternalPower: Bool - if let processingRequest = request as? BGProcessingTaskRequest { - kind = .processing - requiresNetworkConnectivity = processingRequest.requiresNetworkConnectivity - requiresExternalPower = processingRequest.requiresExternalPower - } else { - kind = .appRefresh - requiresNetworkConnectivity = false - requiresExternalPower = false + do { + let snapshots: [RadrootsBackgroundTaskSnapshot] = try requests.compactMap { request -> RadrootsBackgroundTaskSnapshot? in + guard let identifier = try? RadrootsBackgroundTaskIdentifier(request.identifier) else { + return nil + } + let kind: RadrootsBackgroundTaskKind + let requiresNetworkConnectivity: Bool + let requiresExternalPower: Bool + if let processingRequest = request as? BGProcessingTaskRequest { + kind = .processing + requiresNetworkConnectivity = processingRequest.requiresNetworkConnectivity + requiresExternalPower = processingRequest.requiresExternalPower + } else { + kind = .appRefresh + requiresNetworkConnectivity = false + requiresExternalPower = false + } + return try RadrootsBackgroundTaskSnapshot( + identifier: identifier, + kind: kind, + earliestBeginDate: request.earliestBeginDate, + submittedAt: Date(), + requiresNetworkConnectivity: requiresNetworkConnectivity, + requiresExternalPower: requiresExternalPower + ) + } + .sorted { left, right in + left.identifier.rawValue < right.identifier.rawValue + } + continuation.resume(returning: snapshots) + } catch { + continuation.resume(throwing: error) + } } - return try RadrootsBackgroundTaskSnapshot( - identifier: identifier, - kind: kind, - earliestBeginDate: request.earliestBeginDate, - submittedAt: Date(), - requiresNetworkConnectivity: requiresNetworkConnectivity, - requiresExternalPower: requiresExternalPower - ) - } - .sorted { left, right in - left.identifier < right.identifier } } }