@@ -344,18 +344,18 @@ - (AVAudioSessionCategory)categoryFromString:(NSString *)categorySTR
344344{
345345 AVAudioSessionCategory category = 0 ;
346346
347- if ([categorySTR isEqualToString: @" record" ]) {
348- category = AVAudioSessionCategoryRecord;
349- } else if ([categorySTR isEqualToString: @" ambient" ]) {
347+ if ([categorySTR isEqualToString: @" ambient" ]) {
350348 category = AVAudioSessionCategoryAmbient;
351- } else if ([categorySTR isEqualToString: @" playback" ]) {
352- category = AVAudioSessionCategoryPlayback;
353349 } else if ([categorySTR isEqualToString: @" multiRoute" ]) {
354350 category = AVAudioSessionCategoryMultiRoute;
355- } else if ([categorySTR isEqualToString: @" soloAmbient" ]) {
356- category = AVAudioSessionCategorySoloAmbient;
357351 } else if ([categorySTR isEqualToString: @" playAndRecord" ]) {
358352 category = AVAudioSessionCategoryPlayAndRecord;
353+ } else if ([categorySTR isEqualToString: @" playback" ]) {
354+ category = AVAudioSessionCategoryPlayback;
355+ } else if ([categorySTR isEqualToString: @" record" ]) {
356+ category = AVAudioSessionCategoryRecord;
357+ } else if ([categorySTR isEqualToString: @" soloAmbient" ]) {
358+ category = AVAudioSessionCategorySoloAmbient;
359359 }
360360
361361 return category;
@@ -367,22 +367,34 @@ - (AVAudioSessionMode)modeFromString:(NSString *)modeSTR
367367
368368 if ([modeSTR isEqualToString: @" default" ]) {
369369 mode = AVAudioSessionModeDefault;
370+ } else if ([modeSTR isEqualToString: @" dualRoute" ]) {
371+ if (@available (iOS 26.2 , *)) {
372+ mode = AVAudioSessionModeDualRoute;
373+ } else {
374+ mode = AVAudioSessionModeDefault;
375+ }
370376 } else if ([modeSTR isEqualToString: @" gameChat" ]) {
371377 mode = AVAudioSessionModeGameChat;
372- } else if ([modeSTR isEqualToString: @" videoChat" ]) {
373- mode = AVAudioSessionModeVideoChat;
374- } else if ([modeSTR isEqualToString: @" voiceChat" ]) {
375- mode = AVAudioSessionModeVoiceChat;
376378 } else if ([modeSTR isEqualToString: @" measurement" ]) {
377379 mode = AVAudioSessionModeMeasurement;
378- } else if ([modeSTR isEqualToString: @" voicePrompt" ]) {
379- mode = AVAudioSessionModeVoicePrompt;
380- } else if ([modeSTR isEqualToString: @" spokenAudio" ]) {
381- mode = AVAudioSessionModeSpokenAudio;
382380 } else if ([modeSTR isEqualToString: @" moviePlayback" ]) {
383381 mode = AVAudioSessionModeMoviePlayback;
382+ } else if ([modeSTR isEqualToString: @" shortFormVideo" ]) {
383+ if (@available (iOS 26 , *)) {
384+ mode = AVAudioSessionModeShortFormVideo;
385+ } else {
386+ mode = AVAudioSessionModeDefault;
387+ }
388+ } else if ([modeSTR isEqualToString: @" spokenAudio" ]) {
389+ mode = AVAudioSessionModeSpokenAudio;
390+ } else if ([modeSTR isEqualToString: @" videoChat" ]) {
391+ mode = AVAudioSessionModeVideoChat;
384392 } else if ([modeSTR isEqualToString: @" videoRecording" ]) {
385393 mode = AVAudioSessionModeVideoRecording;
394+ } else if ([modeSTR isEqualToString: @" voiceChat" ]) {
395+ mode = AVAudioSessionModeVoiceChat;
396+ } else if ([modeSTR isEqualToString: @" voicePrompt" ]) {
397+ mode = AVAudioSessionModeVoicePrompt;
386398 }
387399
388400 return mode;
@@ -393,41 +405,58 @@ - (AVAudioSessionCategoryOptions)optionsFromArray:(NSArray *)optionsArray
393405 AVAudioSessionCategoryOptions options = 0 ;
394406
395407 for (NSString *option in optionsArray) {
396- if ([option isEqualToString: @" duckOthers" ]) {
397- options |= AVAudioSessionCategoryOptionDuckOthers;
398- }
399-
400408 if ([option isEqualToString: @" allowAirPlay" ]) {
401409 options |= AVAudioSessionCategoryOptionAllowAirPlay;
410+ continue ;
402411 }
403412
404- if ([option isEqualToString: @" mixWithOthers" ]) {
405- options |= AVAudioSessionCategoryOptionMixWithOthers;
413+ if ([option isEqualToString: @" allowBluetoothA2DP" ]) {
414+ options |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
415+ continue ;
406416 }
407417
408418 if ([option isEqualToString: @" allowBluetoothHFP" ]) {
409- // XCode 26.x (default support SDK >= 26.x) uses AVAudioSessionCategoryOptionAllowBluetoothHFP as new standard for every platfrom (down to iOS 1.0)
410- // Older Xcode (default support SDKs) versions doesn't define it at all.
411- // Both (AVAudioSessionCategoryOptionAllowBluetooth in SDK < 26.x) and (AVAudioSessionCategoryOptionAllowBluetoothHFP in SDK >= 26.x) resolve to this value
412- // We use it here directly as there is no reliable way to switch between them (no @available for this).
413- // TODO: replace with AVAudioSessionCategoryOptionAllowBluetoothHFP once XCode 16.x will dig its grave
414- options |= 0x4 ;
419+ options |= AVAudioSessionCategoryOptionAllowBluetoothHFP;
420+ continue ;
421+ }
422+
423+ if ([option isEqualToString: @" bluetoothHighQualityRecording" ]) {
424+ if (@available (iOS 26 , *)) {
425+ options |= AVAudioSessionCategoryOptionBluetoothHighQualityRecording;
426+ }
427+ continue ;
415428 }
416429
417430 if ([option isEqualToString: @" defaultToSpeaker" ]) {
418431 options |= AVAudioSessionCategoryOptionDefaultToSpeaker;
432+ continue ;
419433 }
420434
421- if ([option isEqualToString: @" allowBluetoothA2DP" ]) {
422- options |= AVAudioSessionCategoryOptionAllowBluetoothA2DP;
435+ if ([option isEqualToString: @" duckOthers" ]) {
436+ options |= AVAudioSessionCategoryOptionDuckOthers;
437+ continue ;
423438 }
424439
425- if ([option isEqualToString: @" overrideMutedMicrophoneInterruption" ]) {
426- options |= AVAudioSessionCategoryOptionOverrideMutedMicrophoneInterruption;
440+ if ([option isEqualToString: @" farFieldInput" ]) {
441+ if (@available (iOS 26.2 , *)) {
442+ options |= AVAudioSessionCategoryOptionFarFieldInput;
443+ continue ;
444+ }
427445 }
428446
429447 if ([option isEqualToString: @" interruptSpokenAudioAndMixWithOthers" ]) {
430448 options |= AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers;
449+ continue ;
450+ }
451+
452+ if ([option isEqualToString: @" mixWithOthers" ]) {
453+ options |= AVAudioSessionCategoryOptionMixWithOthers;
454+ continue ;
455+ }
456+
457+ if ([option isEqualToString: @" overrideMutedMicrophoneInterruption" ]) {
458+ options |= AVAudioSessionCategoryOptionOverrideMutedMicrophoneInterruption;
459+ continue ;
431460 }
432461 }
433462
0 commit comments