New Features
- about: Show compiled short Git commit
- metadata: Add safe batch editing and matching
- library: Add bulk duplicate cleanup
Bug Fixes
- metadata: Preserve track tags across collection screens
- replaygain: Report decoder failures and reject incomplete scans
- memory: Release retired runtimes and idle download heap
- download: Resolve missing album folders before publishing
- metadata: Read quality from Opus in MP4 containers
- download: Remove legacy HIGH quality conversion
- download: Preserve native containers before legacy quality conversion
- download: Publish converted SAF files with the final extension
- download: Size quality picker to its content
- download: Allow dragging the quality picker to dismiss
- library: Retain Opus badges when bitrate is missing
- download: Estimate sizes from track quality metadata
- download: Compare size estimates at each quality tier
- replaygain: Write and verify native Opus gain tags
- metadata: Match recording IDs across inconsistent catalogs
- metadata: Normalize artist credits and preserve recording versions
- altstore: Match source bundle ID to released IPA
- download: Prepare fallback sessions before availability checks
- metadata: Preserve Opus tags during batch re-enrichment
- Restore SAF metadata fallback and preserve active transfers
- download: Preserve verification provider during fallback
- Resolve backend and test analyzer diagnostics
- download: Route verification notifications to pending challenges
- extensions: Preserve verification on availability errors
- extensions: Bound stream resolution without timing out active transfers
- download: Preserve audio quality across provider fallback
- lyrics: Align usability checks with shared fixtures
- library: Bound playlist picker SQL parameters
- playback: Retain ReplayGain for SAF descriptor leases
- android: Scope SAF read failures to each descriptor
- ios: Isolate download progress subscriptions
- metadata: Preserve Track fields during enrichment
- conversion: Reserve FLAC outputs without overwriting files
- search: Let latest live queries supersede cancelled requests
- auth: Preserve shared signed-session challenge identity
- ui: Resolve collapsed header title overlap
- ui: Improve adaptive phone and tablet layouts
- cover: Preserve provider high-resolution artwork
- extensions: Shorten verification timeout
- audio: Preserve Opus codec in M4A scans
- extensions: Preserve verification callback retries
- conversion: Preserve Unicode SAF document names
Performance
- ui: Retain platform link lookup across rebuilds
- ui: Retain track history lookup snapshots
- metadata: Read complete SAF tags through descriptors
- mp3: Share bounded ID3 metadata and cover reads
- library: Page missing-file cleanup with safe SAF batch checks
- extensions: Clone only the requested storage value
- artwork: Batch and throttle cached preview validation
- library: Reuse collection lookups across selection rebuilds
- search: Decode large extension results off the UI isolate
- library: Stream normalized scan timestamp snapshots
- cache: Enforce cover byte budget during foreground use
- queue: Apply sparse progress updates with chunked snapshots
- images: Size decoded covers from layout constraints
Refactoring
- i18n: Share supported language choices
- batch: Share local track actions and phase settings
- ffmpeg: Remove unused live DASH subsystem
Documentation
- changelog: Document version 4.9.6
Styling
- dart: Apply pinned formatter to existing files
Testing
- Decouple app fixtures from extension identities
Chores
- release: Bump app version to 4.9.6
- ios: Reuse backend build script without duplicate framework setup
- Update AltStore source to v4.9.5 by @github-actions[bot]
Build
- ios: Require iOS 16 and restore local builds
Revert
- Remove download size estimates
Full Changelog: v4.9.5...v4.9.6
Downloads
Android
- arm64:
SpotiFLAC-v4.9.6-arm64.apk(recommended for modern devices) - arm32:
SpotiFLAC-v4.9.6-arm32.apk(older devices)
iOS
- iOS:
SpotiFLAC-v4.9.6-ios-unsigned.ipa(sideload required)
Installation
Android: Enable "Install from unknown sources" and install the APK
iOS: Use AltStore, Sideloadly, or similar tools to sideload the IPA