Skip to content

v2.3.2 — iOS: a paused app sleeps in the background

Choose a tag to compare

@balch balch released this 27 Sep 18:54
· 416 commits to main since this release

An iOS-only follow-up to 2.3.1. A paused Orphic DJ no longer keeps the audio hardware busy in the background, so iOS can suspend it and stop the battery drain. Android stays on 2.3.1; this tag carries no Android release.

Background battery (iOS)

  • The audio host parks after 30 s paused in the background. Pausing used to only mute, so AURemoteIO kept rendering the full graph on silence and audiomxd mixed it, about 20% of a core on an iPad Air 4, and iOS never suspended the app. AudioHostSuspendPolicy now parks the host (stops AVAudioEngine, releases the session, keeps the engine and graph) once the app has been paused or stopped in the background for 30 s, retrying every 30 s. Play, the lock screen, the widget, speech and foregrounding bring it back through the watchdog's repair path, and foregrounding leaves other apps' music alone.
  • A parked host stays parked through route changes and interruptions. The watchdog stands down while parked, and an interruption ending no longer reactivates the session for silence.
  • UI-only polls pause while backgrounded. IosAppLifecycle drives setUiVisible from the app's foreground state, so the meter, Pulsar viz, turntable, spectrum and scope polls stop for nobody, matching Android.

Toolchain

  • Kotlin 2.4.20, Compose Multiplatform 1.12.1, Metro 1.4.5, Gradle 9.8.0, plus patch bumps across the catalog.

Tests

  • New AudioHostSuspendPolicyTest and DspSynthEngineParkedHostTest cover the park and resume rules.

Artifacts

iOS build 1026 goes to App Store review. No Android bundle was published for this tag.

Full changelog

v2.3.1...v2.3.2 — iOS background battery fix and toolchain bump. The range also carries AI-edition and Orpheus-app commits that do not ship in the App Store build.