Skip to content

Commit e9788ff

Browse files
committed
fix: requestTemporaryFullAccuracy gets stuck if NSLocationTemporaryUsageDescriptionDictionary is missing
1 parent 4018f64 commit e9788ff

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

Sources/AsyncLocationKit/AsyncLocationManager.swift

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import Foundation
2424
import CoreLocation
2525

2626
public typealias AuthotizationContinuation = CheckedContinuation<CLAuthorizationStatus, Never>
27-
public typealias AccuracyAuthorizationContinuation = CheckedContinuation<CLAccuracyAuthorization?, Never>
27+
public typealias AccuracyAuthorizationContinuation = CheckedContinuation<CLAccuracyAuthorization?, Error>
2828
public typealias LocationOnceContinuation = CheckedContinuation<LocationUpdateEvent?, Error>
2929
public typealias LocationEnabledStream = AsyncStream<LocationEnabledEvent>
3030
public 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

Comments
 (0)