@@ -24,7 +24,7 @@ import Foundation
2424import CoreLocation
2525
2626public typealias AuthotizationContinuation = CheckedContinuation < CLAuthorizationStatus , Never >
27- public typealias AccuracyAuthorizationContinuation = CheckedContinuation < CLAccuracyAuthorization ? , Never >
27+ public typealias AccuracyAuthorizationContinuation = CheckedContinuation < CLAccuracyAuthorization ? , Error >
2828public typealias LocationOnceContinuation = CheckedContinuation < LocationUpdateEvent ? , Error >
2929public typealias LocationEnabledStream = AsyncStream < LocationEnabledEvent >
3030public typealias LocationStream = AsyncStream < LocationUpdateEvent >
@@ -197,8 +197,8 @@ public final class AsyncLocationManager {
197197 }
198198
199199 @available ( iOS 14 , watchOS 7 , * )
200- public func requestTemporaryFullAccuracyAuthorization( purposeKey: String ) async -> CLAccuracyAuthorization ? {
201- await locationPermissionTemporaryFullAccuracy ( purposeKey: purposeKey)
200+ public func requestTemporaryFullAccuracyAuthorization( purposeKey: String ) async throws -> CLAccuracyAuthorization ? {
201+ try await locationPermissionTemporaryFullAccuracy ( purposeKey: purposeKey)
202202 }
203203
204204 public func startUpdatingLocation( ) async -> LocationStream {
@@ -361,20 +361,25 @@ extension AsyncLocationManager {
361361 }
362362
363363 @available ( iOS 14 , watchOS 7 , * )
364- private func locationPermissionTemporaryFullAccuracy( purposeKey: String ) async -> CLAccuracyAuthorization ? {
364+ private func locationPermissionTemporaryFullAccuracy( purposeKey: String ) async throws -> CLAccuracyAuthorization ? {
365365 let authorizationPerformer = RequestAccuracyAuthorizationPerformer ( )
366- return await withTaskCancellationHandler ( operation: {
367- await withCheckedContinuation { continuation in
368- if locationManager. authorizationStatus != . notDetermined && locationManager. accuracyAuthorization == . fullAccuracy {
369- continuation. resume ( with: . success( locationManager. accuracyAuthorization) )
370- } else if locationManager. authorizationStatus == . notDetermined {
366+ return try await withTaskCancellationHandler ( operation: {
367+ try await withCheckedThrowingContinuation { ( continuation: CheckedContinuation < CLAccuracyAuthorization ? , Error > ) in
368+ if locationManager. authorizationStatus == . notDetermined {
371369 continuation. resume ( with: . success( nil ) )
370+ } else if locationManager. accuracyAuthorization == . fullAccuracy {
371+ continuation. resume ( with: . success( locationManager. accuracyAuthorization) )
372372 } else if !CLLocationManager. locationServicesEnabled ( ) {
373373 continuation. resume ( with: . success( nil ) )
374374 } else {
375375 authorizationPerformer. linkContinuation ( continuation)
376376 proxyDelegate. addPerformer ( authorizationPerformer)
377- locationManager. requestTemporaryFullAccuracyAuthorization ( withPurposeKey: purposeKey)
377+ locationManager. requestTemporaryFullAccuracyAuthorization ( withPurposeKey: purposeKey) { error in
378+ if let error {
379+ continuation. resume ( with: . failure( error) )
380+ return
381+ }
382+ }
378383 }
379384 }
380385 } , onCancel: {
0 commit comments