# BearWave for macOS Native macOS port of BearWave, focused on fast internet radio playback. BearWave for macOS is a SwiftUI + AVFoundation desktop app built around the same product idea as the Linux version: quick station discovery, lightweight playback, favorites, recents, and native desktop integration without turning the app into a general-purpose audio suite. ## Screenshots ![Main station browser](screens/screen1.png) ![Favorites and station folders](screens/screen2.png) ![Active playback state](screens/screen3.png) ## Features - Native macOS 26 app built with SwiftUI - Radio Browser integration - Top, Germany, Netherlands, World, and Search Results pages - Favorites, recents, and manual stations - Station folders for organizing saved stations - Menu bar controls - Mini Player with `Cmd+M` - Explicit playback states: - connecting - buffering - playing - paused - stopped - failed - Stream metadata support through `AVPlayerItemMetadataOutput` - Station artwork/favicon caching - Resume last station on launch - English and German localization ## Product Direction This macOS version is intentionally **radio-first**. That means: - internet radio is the core product - native macOS behavior is preferred over KDE/Qt parity - podcast features are intentionally out of scope ## Build ```bash swift build --disable-index-store ``` Run the app bundle through the local staging script: ```bash ./script/build_and_run.sh ``` Useful script modes: ```bash ./script/build_and_run.sh --verify ./script/build_and_run.sh --debug ./script/build_and_run.sh --logs ./script/build_and_run.sh --telemetry ``` Run the lightweight checks: ```bash CLANG_MODULE_CACHE_PATH=/private/tmp/bearwave-clang-cache swift run --disable-index-store BearWaveChecks ``` ## Project Layout - `Package.swift` SwiftPM package definition - `Sources/BearWaveApp` app entrypoint and scene wiring - `Sources/BearWaveCore` shared app logic, models, stores, services, views, and resources - `Tests/BearWaveChecks` lightweight verification executable - `script/build_and_run.sh` local build, bundle, and launch script - `screens/` README screenshots ## Persistence BearWave stores data under native macOS locations: - `Application Support/BearWave/` - `favorites.json` - `manual-stations.json` - `groups.json` - `state.json` - `Caches/BearWave/` - `api_cache/` - artwork cache files On first run it can also import older Linux-style BearWave files when present: - `~/.config/bearwave/favorites.json` - `~/.config/bearwave/state.json` ## Current Status Implemented and working: - radio browsing and global search - station playback - playback status reporting - metadata display - favorites, recents, manual stations - station folders - menu bar controls - mini player Still pragmatic rather than release-ready: - SwiftPM-staged `.app` bundle - debug-oriented signing and packaging - custom app-bundle staging script ## Roadmap - improve release packaging, signing, and notarization - expand playback diagnostics - strengthen tests around playback state and search ranking - refine cache management - keep station folders lightweight and clearly radio-focused