Skip to content

Release 2.12.0 - #1191

Merged
hiroshihorie merged 1 commit into
mainfrom
release/2.12.0
Sep 7, 2026
Merged

Release 2.12.0#1191
hiroshihorie merged 1 commit into
mainfrom
release/2.12.0

Conversation

@hiroshihorie

@hiroshihorie hiroshihorie commented Sep 4, 2026

Copy link
Copy Markdown
Member

Minor release. Main theme is iOS audio robustness: the audio session is resolved from engine state before any policy is pushed (fixes audio engine error -9001 in pre-connect / pre-join / playout-only flows) and microphone permission is requested before capture starts. Also raises the floor to Flutter 3.38 / Dart 3.10 for native assets.

Changes

Added

  • AudioSessionException for iOS audio session failures

Changed

  • Microphone permission and audio session failures throw TrackCreateException / AudioSessionException instead of AudioProcessingException
  • Minimum Flutter 3.38 / Dart 3.10; json_annotation 4.12 / json_serializable 6.14 regen

Fixed

  • iOS: audio session configured from engine state before a policy is pushed (-9001)
  • iOS/macOS: microphone permission requested before capture starts
  • Android: failed local recording pre-warm no longer aborts capture
  • Linux: use-after-free in TaskRunnerLinux::EnqueueTask
  • Subscriber data channel state events report the right channel and no longer leak listeners
  • sendText declares the UTF-8 byte length in the stream header
  • BaseKeyProvider.create honors discardFrameWhenCryptorNotReady
  • CachingTokenSource.fetch awaits its result
  • Pre-connect audio buffer is reusable after a failed recording start

Review notes

Diff reviewed against v2.11.0. Analyze, format, import order, version check, and 407 tests pass. Version fields, changelog, and consumed changesets are consistent. The #1170 reformat is behavior-neutral. No blockers; follow-ups to consider:

  • iOS permission gate rejects applicationState == .inactive (visible Split View, pre-didBecomeActive launch); != .background would avoid the false positive.
  • Default recording preset now applies whenever nothing was pushed in automatic mode; apps that own AVAudioSession and start the engine before Dart syncs need manual mode. Worth a changelog note.
  • Android pre-warm catch also swallows failures from applying processing options.
  • on AudioProcessingException catch sites no longer see permission / session failures; changeset is patch.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown

Warning

No changeset found

If this PR includes user-facing changes, please add a changeset file in .changes/

Format: level type="kind" "description"

patch type="fixed" "Fix audio frame generation"
minor type="added" "Add support for custom audio processing"
major type="changed" "Breaking: Rename Room.connect() to Room.join()"

@hiroshihorie
hiroshihorie marked this pull request as ready for review September 7, 2026 12:41

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Devin Review

@hiroshihorie
hiroshihorie merged commit 2baacc4 into main Sep 7, 2026
15 checks passed
@hiroshihorie
hiroshihorie deleted the release/2.12.0 branch September 7, 2026 12:54
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

Successfully merging this pull request may close these issues.

1 participant