雲の音 — Native macOS NetEase Cloud Music client built with SwiftUI
Swift
1,154
280 commits
updated Oct 8, 2026
English | 简体中文
雲の音 — Native macOS client for NetEase Cloud Music
Built with SwiftUI · Talks directly to NetEase's real API · Sparkle auto-updates
![]() | ![]() |
![]() | ![]() |
Kumone comes from the Japanese 雲の音 (kumo no ne, "the sound of clouds"), contracted into one word — 雲音 (くもね, kumone). It is a nod to the "cloud" in NetEase Cloud Music: the music drifting down to you from the cloud.
Requires macOS 15+ (Universal: Apple Silicon and Intel).
brew install owo-network/brew/kumone --cask
Download the latest Kumone-x.y.z.zip from
Releases, unzip, and drag
it into Applications.
The app is signed with a Developer ID certificate and notarized by Apple, with built-in Sparkle automatic updates (menu bar: Kumone → Check for Updates…).
Every release ships an unsigned Kumone-iOS-x.y.z.ipa (iOS 16+). Kumone
is an unofficial client and will not be on the App Store or TestFlight, so
install it with a sideloading tool that signs the IPA with your own Apple ID —
AltStore, SideStore,
Sideloadly or Xcode all work. On iOS 26+ the tab bar is the system’s native Liquid Glass; on iOS 16–25 it falls back to a simulated glass bar.
Updating: iOS apps can't replace themselves. Settings → About → Check for Updates tells you when a newer release exists and links to it; download the new IPA and reinstall with the same tool — sign-in state and settings are kept. AltStore / SideStore can also track the release automatically: add the source https://github.com/missuo/kumone/releases/latest/download/altstore.json and new versions show up in their update list on their own.
On a device with TrollStore (巨魔),
Kumone updates itself: Settings → About → Check for Updates (it also checks
on launch) downloads the new IPA with a progress ring and hands it to TrollStore
via apple-magnifier://install?url=… for a one-tap, fully automatic install —
the same mechanism Dopamine uses. This works only under TrollStore: a plain
AltStore/SideStore sideload is signed with a personal certificate and has no way
to install an IPA on-device, so there it degrades to opening the release page
for a manual re-sideload.
CarPlay support is fully implemented in Sources/Kumone/Core/CarPlay/, but the
default build ships none of it: no com.apple.developer.carplay-audio
entitlement, no UISupportsCarPlay, and no CarPlay scene declaration. Apple
only grants that entitlement after you submit a CarPlay audio app
application, and building with
it unapproved fails to sign with:
Entitlement com.apple.developer.carplay-audio not found and could not be included in profile.
So CarPlay is a one-command opt-in instead:
make configure-carplay # enable
make configure # back to the default, CarPlay-free build
make configure-carplay derives a CarPlay copy of Config/Info.plist and
Config/KumoneIOS.entitlements into ios/Config/Generated/, then writes
ios/Config/CarPlay.local.xcconfig to point the build at them. All three files
are untracked, and the Xcode project itself is never modified — so enabling
CarPlay leaves git status clean and produces nothing to review.
Once your developer account has the entitlement approved:
make configure-carplay.Cmd + Shift + K and rebuild on a device.To test without a car, use the CarPlay Simulator: Xcode ▸ Open Developer Tool ▸ Simulator, then I/O ▸ External Displays ▸ CarPlay.
Requires macOS 15+ and Xcode 26+.
swift build # compile
Scripts/build-app.sh # package the .app (outputs .build/app/Kumone.app)
Scripts/compile_and_run.sh # kill → repackage → relaunch
Sources/Kumone/
├── Core/
│ ├── API/ # NeteaseCrypto (weapi/eapi encryption), NeteaseClient (transport + cookies), NeteaseAPI (~50 endpoints)
│ ├── Models/ # unified Track model (tolerates both JSON shapes), lyrics parser
│ ├── Player/ # PlayerService (queue / shuffle / repeat / FM / URL resolution), UnblockService, NowPlayingManager
│ └── Storage/ # AccountStore, SettingsManager, two-tier image cache
├── DesignSystem/ # design tokens, button styles (hover scale / row highlight / chips), skeletons, cards, marquee, artwork palette
└── Features/ # pages + player bar + immersive now-playing + lyrics/queue panels
No third-party API server involved: weapi (double AES-CBC + RSA) and eapi
(AES-ECB + MD5 digest) encryption are implemented natively in Swift, and
requests go straight to music.163.com / interface.music.163.com.
Want a tvOS build? Check out Sonimbus, a NetEase Cloud Music client for Apple TV maintained by my friend Svend.
Kumone is written from scratch in Swift. No code was copied from the projects below, but their design and implementation ideas were referenced extensively:
UnblockService.swift is an independent Swift reimplementation)DesktopLyrics.swift is an independent SwiftUI implementation)Licensed under LGPL-3.0-only (the GPL-3.0 text is included alongside). For learning and personal use only — all music data and rights belong to NetEase Cloud Music and the respective source platforms. No downloading, no social features.
1,355 followers · starred Aug 2026
1,177 followers · starred Aug 2026
238 followers · starred Aug 2026
282 followers · starred Aug 2026
雲の音 — Native macOS NetEase Cloud Music client built with SwiftUI
Swift
1,154
280 commits
updated Oct 8, 2026
English | 简体中文
雲の音 — Native macOS client for NetEase Cloud Music
Built with SwiftUI · Talks directly to NetEase's real API · Sparkle auto-updates
![]() | ![]() |
![]() | ![]() |
Kumone comes from the Japanese 雲の音 (kumo no ne, "the sound of clouds"), contracted into one word — 雲音 (くもね, kumone). It is a nod to the "cloud" in NetEase Cloud Music: the music drifting down to you from the cloud.
Requires macOS 15+ (Universal: Apple Silicon and Intel).
brew install owo-network/brew/kumone --cask
Download the latest Kumone-x.y.z.zip from
Releases, unzip, and drag
it into Applications.
The app is signed with a Developer ID certificate and notarized by Apple, with built-in Sparkle automatic updates (menu bar: Kumone → Check for Updates…).
Every release ships an unsigned Kumone-iOS-x.y.z.ipa (iOS 16+). Kumone
is an unofficial client and will not be on the App Store or TestFlight, so
install it with a sideloading tool that signs the IPA with your own Apple ID —
AltStore, SideStore,
Sideloadly or Xcode all work. On iOS 26+ the tab bar is the system’s native Liquid Glass; on iOS 16–25 it falls back to a simulated glass bar.
Updating: iOS apps can't replace themselves. Settings → About → Check for Updates tells you when a newer release exists and links to it; download the new IPA and reinstall with the same tool — sign-in state and settings are kept. AltStore / SideStore can also track the release automatically: add the source https://github.com/missuo/kumone/releases/latest/download/altstore.json and new versions show up in their update list on their own.
On a device with TrollStore (巨魔),
Kumone updates itself: Settings → About → Check for Updates (it also checks
on launch) downloads the new IPA with a progress ring and hands it to TrollStore
via apple-magnifier://install?url=… for a one-tap, fully automatic install —
the same mechanism Dopamine uses. This works only under TrollStore: a plain
AltStore/SideStore sideload is signed with a personal certificate and has no way
to install an IPA on-device, so there it degrades to opening the release page
for a manual re-sideload.
CarPlay support is fully implemented in Sources/Kumone/Core/CarPlay/, but the
default build ships none of it: no com.apple.developer.carplay-audio
entitlement, no UISupportsCarPlay, and no CarPlay scene declaration. Apple
only grants that entitlement after you submit a CarPlay audio app
application, and building with
it unapproved fails to sign with:
Entitlement com.apple.developer.carplay-audio not found and could not be included in profile.
So CarPlay is a one-command opt-in instead:
make configure-carplay # enable
make configure # back to the default, CarPlay-free build
make configure-carplay derives a CarPlay copy of Config/Info.plist and
Config/KumoneIOS.entitlements into ios/Config/Generated/, then writes
ios/Config/CarPlay.local.xcconfig to point the build at them. All three files
are untracked, and the Xcode project itself is never modified — so enabling
CarPlay leaves git status clean and produces nothing to review.
Once your developer account has the entitlement approved:
make configure-carplay.Cmd + Shift + K and rebuild on a device.To test without a car, use the CarPlay Simulator: Xcode ▸ Open Developer Tool ▸ Simulator, then I/O ▸ External Displays ▸ CarPlay.
Requires macOS 15+ and Xcode 26+.
swift build # compile
Scripts/build-app.sh # package the .app (outputs .build/app/Kumone.app)
Scripts/compile_and_run.sh # kill → repackage → relaunch
Sources/Kumone/
├── Core/
│ ├── API/ # NeteaseCrypto (weapi/eapi encryption), NeteaseClient (transport + cookies), NeteaseAPI (~50 endpoints)
│ ├── Models/ # unified Track model (tolerates both JSON shapes), lyrics parser
│ ├── Player/ # PlayerService (queue / shuffle / repeat / FM / URL resolution), UnblockService, NowPlayingManager
│ └── Storage/ # AccountStore, SettingsManager, two-tier image cache
├── DesignSystem/ # design tokens, button styles (hover scale / row highlight / chips), skeletons, cards, marquee, artwork palette
└── Features/ # pages + player bar + immersive now-playing + lyrics/queue panels
No third-party API server involved: weapi (double AES-CBC + RSA) and eapi
(AES-ECB + MD5 digest) encryption are implemented natively in Swift, and
requests go straight to music.163.com / interface.music.163.com.
Want a tvOS build? Check out Sonimbus, a NetEase Cloud Music client for Apple TV maintained by my friend Svend.
Kumone is written from scratch in Swift. No code was copied from the projects below, but their design and implementation ideas were referenced extensively:
UnblockService.swift is an independent Swift reimplementation)DesktopLyrics.swift is an independent SwiftUI implementation)Licensed under LGPL-3.0-only (the GPL-3.0 text is included alongside). For learning and personal use only — all music data and rights belong to NetEase Cloud Music and the respective source platforms. No downloading, no social features.
1,355 followers · starred Aug 2026
1,177 followers · starred Aug 2026
238 followers · starred Aug 2026
282 followers · starred Aug 2026