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:
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
}
}
}