Free macOS app — native Swift/SwiftUI front end for YouTube Music (API via YTMusicClient, DRM playback in a hidden WebView). This README is for you and anyone with repo access: clone, build, run, and where to read more.
This app is a direct fork from https://github.com/sozercan/kaset with enhanced features.
- macOS 26 (matches
Package.swift) - Xcode with a Swift 6.2 toolchain (open
Package.swiftonce so Xcode resolves the SwiftPM graph) - SwiftLint and SwiftFormat (for the lint/format loop in
AGENTS.md)
Use whatever remote you use for this repo (SSH or HTTPS). Example:
git clone <your-remote-url> Noizee
cd NoizeeFirst clone will fetch the Sparkle dependency over the network when you build.
swift buildRelease binary (after a successful build): .build/release/Noizee — not a full .app bundle; use the scripts below for a runnable app.
The usual dev loop builds a proper bundle and launches it:
Scripts/compile_and_run.shHandy variants:
Scripts/compile_and_run.sh --test— run SwiftPM unit tests before packagingScripts/compile_and_run.sh --lint— run SwiftLint + SwiftFormat before packagingScripts/compile_and_run.sh --wait— if another compile-and-run is holding the lock, wait instead of exiting
Package only (output: .build/app/Noizee.app):
Scripts/build-app.shOpen the bundle manually if you want:
open .build/app/Noizee.appTo ship a drag-to-Applications disk image with a large app icon and an Applications shortcut, use create-dmg (not a SwiftPM dependency — install via Homebrew):
brew install create-dmg-
Build a signed
.app(example: universal Apple Silicon + Intel, ad-hoc signing for local distribution):ARCHES="arm64 x86_64" NOIZEE_SIGNING=adhoc ./Scripts/build-app.sh releaseFor a single-architecture build, omit
ARCHES(the script defaults to the host CPU). -
Create the DMG (reads
version.envfor the output filename; writes underdist/, which is gitignored):./Scripts/create-installer-dmg.sh
- Custom output path:
OUTPUT_PATH=~/Desktop/Noizee.dmg ./Scripts/create-installer-dmg.sh - Optional window background:
NOIZEE_DMG_BACKGROUND=/path/to/660x420.png ./Scripts/create-installer-dmg.sh
- Custom output path:
If swift build fails with a confusing …release.exe message on macOS, clear SwiftPM state and rebuild (e.g. rm -rf .build then run build-app.sh again). See Scripts/build-app.sh and Scripts/create-installer-dmg.sh for details.
Default unit-test pass (CLI; does not launch the separate UI-test project):
swift test --skip NoizeeUITestsFiltered run:
swift test --skip NoizeeUITests --filter SomeTestNameUI tests live under NoizeeUITests.xcodeproj and launch the app — disruptive on a dev machine, so only run when you mean it (e.g. open the project in Xcode and run the NoizeeUITests scheme).
Before changing YouTube Music API usage, explore endpoints with the bundled CLI:
swift run api-explorer auth
swift run api-explorer list
swift run api-explorer browse FEmusic_home -vMore detail: .agents/skills/api-exploration/SKILL.md and Sources/APIExplorer/main.swift.
swiftlint --strict && swiftformat .Open Package.swift in Xcode for SPM-based editing, breakpoints, and Instruments.
For UI tests, open NoizeeUITests.xcodeproj.
| Doc | Purpose |
|---|---|
AGENTS.md |
AI + human dev rules (logging, concurrency, shortcuts, API discovery) |
CONTRIBUTING.md |
Structure, architecture pointers, contribution workflow |
docs/ |
Architecture, playback, testing, ADRs |
- Last.fm proxy worker (Cloudflare): see
worker/README.md. - Cache / state issues:
Scripts/purge-noizee-caches.sh(use when debugging stale WebKit or app support data).