Skip to the content.

MusicBox

原生 macOS 网易云音乐播放器,使用 SwiftUI、AVPlayer 和 Liquid Glass。需要 macOS 26 或更新版本,支持 Apple silicon 和 Intel Mac。

安装与更新

从 Releases 下载 MusicBox-版本号.zip,解压后将 MusicBox.app 拖入「应用程序」。

正式版通过 Developer ID 签名和 Apple 公证。应用默认每天检查更新,发现新版后提示安装,也可以从 MusicBox 菜单选择「检查更新」。更新包通过 Sparkle EdDSA 签名验证。

旧的未签名版本和 nightly 用户需要先手动安装一次新的正式版,以切换到新的更新源。不要对正式版执行临时重签名或移除隔离属性的脚本。

功能

歌曲可用性和音质取决于网易云账号权限。音频缓存位于 ~/Music/MusicBox。

截图

歌单

歌词

设置与 AirPlay

开发

使用 Xcode 26 或更新版本打开 MusicBox.xcodeproj。本地构建保留项目的自动 Apple Development 签名配置。

xcodebuild -project MusicBox.xcodeproj -scheme MusicBox -configuration Debug build
xcodebuild -project MusicBox.xcodeproj -scheme MusicBox -configuration Debug test

发布

主分支和 Pull Request 运行测试,不再覆盖 nightly Release。推送 v主.次.修订 格式的 tag(例如 v1.1.0)会运行测试、构建通用架构应用、签名并公证,随后创建正式 GitHub Release。tag 版本必须高于已发布的正式版;不接受预发布后缀或重复发布。

发布任务串行排队,连续推送 tag 不会取消已有的等待任务;GitHub 最多保留 100 个等待任务。

先在仓库 Settings → Secrets and variables → Actions 配置以下 Repository secrets:

Secret 内容
BUILD_CERTIFICATE_BASE64 含私钥的 Developer ID Application 证书 .p12 的 Base64 内容;不是 Apple Development 或 Apple Distribution 证书
P12_PASSWORD 导出 .p12 时设置的密码
APPLE_ID 开发者 Apple Account 邮箱
APPLE_APP_SPECIFIC_PASSWORD 该账号生成的 App 专用密码,用于 notarytool 公证
SPARKLE_PRIVATE_KEY Sparkle generate_keys -x 导出的私钥文件内容,不要再做 Base64 编码

Developer ID 证书需要在 Xcode 或 Apple Developer 后台创建并导出为包含私钥的 .p12。公证使用的 Team ID 从证书读取,不改变本地工程的签名团队。

Sparkle 工具在解析依赖后的 DerivedData/SourcePackages/artifacts/sparkle/Sparkle/bin/ 中。已有私钥应继续沿用;generate_keys -p 输出必须与 MusicBox/Info.plist 的 SUPublicEDKey 一致。将导出的私钥保存到 Secret 后删除导出文件,并另行安全备份;不要提交证书、密码或私钥。

# 在包含最新发布配置的提交上创建 tag,替换为实际新版本号。
git tag v1.1.0
git push origin v1.1.0

Release 附件包含应用 ZIP、dSYM ZIP 和自动生成的 appcast.xml。更新源固定为:

https://github.com/zeyugao/MusicBox/releases/latest/download/appcast.xml

版本号同时写入 CFBundleShortVersionString、CFBundleVersion 和 appcast;下载地址固定到该 tag。所有附件先上传到草稿 Release,成功后才公开并设为 Latest,因此不会先切换更新源再上传应用。无需部署网页或让 CI 提交生成文件回主分支。

发布失败时,先检查 Actions 日志。若留下了同名草稿,修复配置后删除该草稿,再重跑失败任务;已公开的版本使用新 tag 发布,不覆盖旧包或签名。

致谢