New Features
- lyrics: Use direct Kugou, QQ Music, and Genius sources
- backup: Stream versioned ZIP archives
- updater: Resume and verify APK downloads
- player: Add sleep timer
- resolver: Add cross-platform fallback chain
- l10n: Merge Crowdin translation updates (#531) (#531)
- metadata: Limit embedded cover resolution
- Add file format library quality label
- library: Add lyrics filtering and metadata actions
- extensions: Add resilient transfer runtime
Bug Fixes
- ios: Handle non-optional callback binding
- build: Hide unexported lyrics search results from gomobile
- backup: Use compact sflb file extension
- downloads: Hide unknown byte totals in notifications
- resolver: Retire unavailable resolver endpoints
- player: Handle headset media controls
- ci: Standardize Android ARM release build
- library: Sync track playback controls
- download: Throttle progress diagnostics
- ci: Harden release workflow inputs and actions
- security: Redact secrets from exported logs
- security: Bound cover download memory usage
- security: Prevent extension network sandbox bypasses
- security: Sandbox extension FFmpeg execution
- security: Validate extension callback state
- security: Encrypt extension storage at rest
- download: Restore reliable provider fallback retries
- download: Preserve finalization metadata and library labels
- library: Prevent pinch gesture blocking scroll
- database: Cache unavailable FTS5 capability
- audio-analysis: Avoid spectrogram splice noise
- library: Recover transient file availability
- analysis: Reject false spectral rolloff cutoffs
- metadata: Preserve selected release artwork and title
- library: Persist artwork previews and stabilize completion
- library: Show play action for completed batch items
- library: Show play actions during batch downloads
- extensions: Resume metadata after verification
- playlists: Remove play action from online playlists
- extensions: Accept artist tracks alias
- ui: Smooth metadata transitions and refine settings
- runtime: Bound resources and quarantine stalled extensions
- storage: Publish finalized SAF output once
- lints: Await asynchronous work in guarded blocks
- metadata: Remove forced download attribution
- extensions: Remove Block Store dependency
Performance
- library: Optimize CIFS scan recovery
- library: Resume and parallelize SAF indexing
- lyrics: Coalesce and persist provider results
- import: Batch playlist metadata enrichment
- metadata: Coalesce MusicBrainz ISRC lookups
- store: Coalesce and condition registry requests
- extensions: Refresh provider health off the download path
- playback: Stream SAF tracks through descriptor leases
- android: Tighten R8 keep rules
- download: Reduce progress wakeups and harden retries
- extensions: Coalesce signed session lifecycle
- extensions: Streamline prepared download work
- network: Improve connection fallback and reuse
- Optimize library scans and extension runtime
- Harden download and persistence lifecycle
- Reduce queue and extension runtime overhead
- downloads: Bound native queue state
- downloads: Stream concurrent native queue work
- metadata: Coalesce Deezer enrichment requests
Refactoring
- core: Reduce generated and duplicate code
Dependencies
- deps: Update Flutter and Go packages
- deps: Upgrade Flutter Go and Android dependencies
Chores
- Update AltStore source to v4.9.0 by @github-actions[bot]
- logging: Sanitize diagnostics and reduce noise
- release: Bump version to 4.9.5
- release: Bump version to 4.9.1
Build
- deps: Add archive and crypto dependencies
- go: Update toolchain to 1.26.6
Full Changelog: v4.9.0...v4.9.5
Downloads
Android
- arm64:
SpotiFLAC-v4.9.5-arm64.apk(recommended for modern devices) - arm32:
SpotiFLAC-v4.9.5-arm32.apk(older devices)
iOS
- iOS:
SpotiFLAC-v4.9.5-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