I am currently in the process of converting my app to use aync await, however I have hit a blocker when it comes to using older asynchronous Swift API methods, more specifically the requestRecordPermission on AVAudioSession.
The ideal would be doing something like this:
@MainActor func startCall(sip: SIP, meeting: Meeting) async throws {
let granted = try await AVAudioSession.sharedInstance().requestRecordPermission()
if granted {
// more stuff here...
let call = try await callAgent?.startCall(participants: [pstnCallee], options: startCallOptions)
self.call = call
self.call?.delegate = self
} else {
throw SomeError.custom
}
}
So I have tried to use the old API using withCheckedThrowingContinuation.
func startCall(sip: SIP, meeting: Meeting) async throws {
return try await withCheckedThrowingContinuation { continutation -> Void in
AVAudioSession.sharedInstance().requestRecordPermission { [weak self] granted in
guard let strongSelf = self else {
continutation.resume(throwing: SomeError.custom)
}
if granted {
// more stuff here
do {
let call = try await strongSelf.callAgent?.startCall(participants: [pstnCallee], options: startCallOptions)
strongSelf.call = call
strongSelf.call?.delegate = strongSelf
continutation.resume(returning: ())
} catch {
continutation.resume(throwing: error)
}
}
}
}
}
But Xcode is throwing the following error on line 3:
Cannot pass function of type '(Bool) async -> Void' to parameter expecting synchronous function type
Any suggestions on how to fix this?