Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error: 'AVAudioSessionCategoryOptions' has been renamed to 'AVAudioSession.CategoryOptions' with: AVAudioSessionCategoryOptions.defaultToSpeaker) #37

Open
AteqEjaz opened this issue Sep 3, 2019 · 11 comments

Comments

@AteqEjaz
Copy link

AteqEjaz commented Sep 3, 2019

Hi Guys,

Using latest version of Audio_recorder plugin and it is not working on IOS, i have target ios version(10), Any thoughts?

Xcode's output:

=== BUILD TARGET sqflite OF PROJECT Pods WITH CONFIGURATION Debug ===
/Users/user/flutter-dev/flutter/.pub-cache/hosted/pub.dartlang.org/audio_recorder-1.0.1/ios/Classes/SwiftAudioRecorderPlugin.swift:40:23: error:
'AVAudioSessionCategoryOptions' has been renamed to 'AVAudioSession.CategoryOptions'
with: AVAudioSessionCategoryOptions.defaultToSpeaker)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AVAudioSession.CategoryOptions
AVFoundation.AVAudioSessionCategoryOptions:2:18: note: 'AVAudioSessionCategoryOptions' was obsoleted in Swift 4.2
public typealias AVAudioSessionCategoryOptions = AVAudioSession.CategoryOptions
^
/Users/user/flutter-dev/flutter/.pub-cache/hosted/pub.dartlang.org/audio_recorder-1.0.1/ios/Classes/SwiftAudioRecorderPlugin.swift:68:68: error: cannot call value of
non-function type 'AVAudioSession.RecordPermission'
switch AVAudioSession.sharedInstance().recordPermission(){
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~

Could not build the application for the simulator.
Error launching application on iPhone Xʀ.

@lucygeneric
Copy link

Not a working solution but if you want your build to build you can change

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSession.CategoryOptions.defaultToSpeaker)
to
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, options: AVAudioSession.CategoryOptions.defaultToSpeaker);

@DyaryRaoof
Copy link

Had the same issue resolved by @lucygeneric mentioned;

@DyaryRaoof
Copy link

also change this line
switch AVAudioSession.sharedInstanc.recordPermission(){
case AVAudioSession.RecordPermission.granted:
to
switch AVAudioSession.sharedInstance().recordPermission{
case AVAudioSession.RecordPermission.granted:

to resolve the other error

@devhci
Copy link

devhci commented Apr 14, 2020

@DyaryRaoof any work around this issue ?

kenjenkins added a commit to kenjenkins/audio_recorder that referenced this issue Apr 21, 2020
Some iOS APIs have changed: hasPermission is now a property instead of a
method, and the AVAudioSession.setCategory() method has a different
signature (cf. ZaraclaJ#37).
@LarrySimiyu
Copy link

I tried the solutions @DyaryRaoof and @lucygeneric wrote but now when I click the start record button my entire application just crashes...if anyone could help it would be greatly appreciated

@DyaryRaoof
Copy link

DyaryRaoof commented Jun 5, 2020

what error do you get when it crashes ? have you tried flutter run --verbose to see the error message ?

@MrudulAddipalli
Copy link

MrudulAddipalli commented Jun 7, 2021

@DyaryRaoof @LarrySimiyu , Hi Dyaru , I have followed all the changes mentioned , but My app is crashing too, here the error, please let me know how can I solve this issue.

Flutter Output :
Fatal error: Unexpectedly found nil while unwrapping an Optional value: file audio_recorder/SwiftAudioRecorderPlugin.swift, line 42
Lost connection to device.

Line 42 SwiftAudioRecorderPlugin.swift -
audioRecorder = try AVAudioRecorder(url: URL(string: mPath)!, settings: settings)

Full Block Code -

do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, options:
AVAudioSession.CategoryOptions.defaultToSpeaker);
try AVAudioSession.sharedInstance().setActive(true)

--------> audioRecorder = try AVAudioRecorder(url: URL(string: mPath)!, settings: settings)
audioRecorder.delegate = self
audioRecorder.record()
} catch {
print("fail")
result(FlutterError(code: "", message: "Failed to record", details: nil))
}

And as per the suggestions in github I have made below changes,

@DyaryRaoof

also change this line
switch AVAudioSession.sharedInstanc.recordPermission(){
case AVAudioSession.RecordPermission.granted:
to
switch AVAudioSession.sharedInstance().recordPermission{
case AVAudioSession.RecordPermission.granted:

@lucygeneric

Not a working solution but if you want your build to build you can change

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSession.CategoryOptions.defaultToSpeaker)
to
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playAndRecord, options: AVAudioSession.CategoryOptions.defaultToSpeaker);

@DyaryRaoof
Copy link

Hi. I haven't used the plugin in a while. I am surprised they haven't yet fixed the issue.

Your error shows that "unexpectedly found nill while unwrapping optional" . It means the value that that that line depends on is null. Probably you don't get the permission to use the microphone , either haven't added the necessary line in info.plist or you need to use permission_handler package to get permission to use the mic before start recording.

Also try changing this line Line 42 SwiftAudioRecorderPlugin.swift -
audioRecorder = try AVAudioRecorder(url: URL(string: mPath)!, settings: settings)

Remove the ! After mPath)

Also look at the plugin in Xcode it will show you errors and will try to give suggestions to fox the error in the after you run the app.

Hope this helps.

@MrudulAddipalli
Copy link

Hi @DyaryRaoof , yes I have permission handler, and also Microphone is allowed in App Settings,

after changing the ! , I am getting below error for the same,

d/ios/Classes/SwiftAudioRecorderPlugin.swift:42:58: error: value of optional type
'URL?' must be unwrapped to a value of type 'URL'
audioRecorder = try AVAudioRecorder(url: URL(string: mPath), settings: settings)

I am testing on emulator , is it because of that I am using Emulator Audio Recording is not working

@DyaryRaoof
Copy link

Probably. I am not sure.

@DKsanjana
Copy link

DKsanjana commented Jan 19, 2022

Hi , im having the same issue i tried the above solution.After change it the xcode build done correctly but giving errors in xcode output.I'm using an ios emulator could that be the problem? Do we need a physical device to test these?

/Users/user/flutter/.pub-cache/hosted/pub.dartlang.org/audio_recorder-1.0.2/ios/Classes/SwiftAudioRecorderPlugin.swift:42:58: error: value of optional type 'URL?' must be unwrapped to a value of type 'URL'
audioRecorder = try AVAudioRecorder(url: URL(string: mPath), settings: settings)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants