kumone README

The project's README from github.com/missuo/kumone. As one markdown file: README.md.

English | 简体中文

Kumone

Kumone

雲の音 — Native macOS client for NetEase Cloud Music

Built with SwiftUI · Talks directly to NetEase's real API · Sparkle auto-updates

Platform Swift License

Home Now Playing
Daily Recommendations Lyrics Panel

About the Name

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.

Features

Installation

Requires macOS 15+ (Universal: Apple Silicon and Intel).

Homebrew

brew install owo-network/brew/kumone --cask

Manual download

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…).

iOS / iPadOS (sideload)

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 via a source.

In-app auto-update (TrollStore only)

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.

Enabling CarPlay (iOS)

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:

  1. Apply for and obtain the CarPlay (Audio) capability for your App ID in Apple Developer → Identifiers.
  2. Regenerate the provisioning profile so it carries the new capability.
  3. Run make configure-carplay.
  4. 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.

Building

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

Architecture

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.

Credits

Kumone is written from scratch in Swift. No code was copied from the projects below, but their design and implementation ideas were referenced extensively:

License

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.

kumone (missuo/kumone)

Searching Database…

1.2K ·GitHub
这是什么?Kumone 是一个非官方的 macOS 原生应用(也有可侧载的 iOS 版本),充当网易云音乐客户端,用 SwiftUI 构建,直接与网易的真实 API 通信,中间没有任何第三方服务器。
使用它需要网易云音乐账号吗?需要,你要用官方网易云音乐 App 扫二维码登录;得到的 Cookie 会保存在本地,之后自动刷新。此外要求 macOS 15 及以上(Apple Silicon 与 Intel 通用二进制)或 iOS 16 及以上。
使用前有什么需要注意的坑吗?CarPlay 支持已内置于二进制中,但默认以禁用状态发布,因为苹果很少批准 CarPlay 音频权限;许可证也明确把该应用限制为个人/学习用途,不提供下载功能,也没有社交功能。
它在 Apple Silicon 和 Intel Mac 上都能运行吗?可以,macOS 版本是通用二进制,在 Apple Silicon 和 Intel Mac 上都能原生运行,要求 macOS 15 或更高版本。
灰色歌曲解锁功能具体做什么?它是对 UnblockNeteaseMusic 核心音源(pyncmd、Kuwo、Kugou)的原生 Swift 重实现,会自动从第三方音源拉取被网易标记为不可用或仅可试听的歌曲。
我能自己打开 CarPlay 支持吗?只有当你自己的 Apple 开发者账号获得 CarPlay Audio 权限批准时才行;之后运行 'make configure-carplay' 生成所需的配置文件,再在 Xcode 里重新构建——默认构建中它是关闭的。
它有悬浮式的桌面歌词吗?有,是 LyricsX 风格的置顶歌词行,带翻译、可拖动,其位置在多个 Spaces 和全屏应用之间都会保持。
Kumone 这个名字从何而来?它是日语短语「雲の音」(kumo no ne,意为「云之声」)的缩合,呼应网易云音乐里的「云」字。
Creator
missuo
Size
23.2 MB
Stars
1.2K
Age
2mo
Commits · 90 Days