测试版计划
登录或注册以访问测试版本、发行说明以及当前开发版本的详细程序信息。
登录或注册
确认帐户后,请在 Songbook Buddy Beta 应用程序中使用相同的电子邮件和密码。
Beta 规则 — 加入前请阅读
Beta 版本是未完成的软件。注册即表示您接受这些条款:
- 可能会发生崩溃、数据丢失和功能损坏。保留您关心的歌曲的备份。
- 使用单独的 00 应用程序和测试版云后端 - 切勿将测试数据与您的发布库混合。
- 您的测试版帐户收到 Pro 和云仅用于测试。这些赠款不会转移到公开发布的应用程序或生产云中。
- 仅在我们的 0° 频道中报告错误并提出问题,而不是通过公共支持电子邮件。
- 移动测试仅通过 TestFlight1iOS) 和 Google PlayGoogle Play 内部测试 (Android) 进行。
- 请勿在程序之外共享测试版本、登录链接或未发布的功能。
- 您可以随时删除您的测试版帐户;当测试版结束时,我们可能会撤销访问权限。
注册或登录即表示您接受这些规则。
Beta 规则 — 加入前请阅读
Beta 版本是未完成的软件。注册即表示您接受这些条款:
- 可能会发生崩溃、数据丢失和功能损坏。保留您关心的歌曲的备份。
- 使用单独的 00 应用程序和测试版云后端 - 切勿将测试数据与您的发布库混合。
- 您的测试版帐户收到 Pro 和云仅用于测试。这些赠款不会转移到公开发布的应用程序或生产云中。
- 仅在我们的 0° 频道中报告错误并提出问题,而不是通过公共支持电子邮件。
- 移动测试仅通过 TestFlight1iOS) 和 Google PlayGoogle Play 内部测试 (Android) 进行。
- 请勿在程序之外共享测试版本、登录链接或未发布的功能。
- 您可以随时删除您的测试版帐户;当测试版结束时,我们可能会撤销访问权限。
注册或登录即表示您接受这些规则。
云包含在测试版中
每个已确认的 Beta 帐户仅在 Beta 后端获得 Pro 和 Cloud。在测试期间使用 Songbook Buddy Beta 中的同一帐户登录,以解锁 Band Mode 、云同步以及所有 Pro 功能。
最新的公开测试版本: 1.0.23
并行发布应用程序和测试版应用程序
您应该能够在测试新版本的同时继续使用稳定的应用程序进行演出,而不会混淆您的歌曲库。
- 一旦在您的平台上可用,将测试版安装为一个单独的应用程序,并具有自己的图标和名称(Songbook Buddy Beta)。
- 每个应用程序都保留自己的本地数据库、设置和设备标识——测试版中的编辑不会影响您的发布库。
- Beta 版云同步使用单独的后端项目,因此测试数据永远不会覆盖生产同步数据。
- 在桌面上,您可以同时运行这两个应用程序;在手机/平板电脑上,您可以在两个已安装的应用程序之间切换。
在单独的测试版应用程序在所有平台上发布之前,安装测试版版本可能会替换该设备上的当前应用程序。尽可能使用备用设备。
测试版支持渠道
在测试期间,我们仅通过以下渠道支持测试人员:
- Discord — bug、问题和讨论
- TestFlight1iOS 测试版安装和更新
- Google Play 内部测试 — Android 测试版安装和更新
公共支持页面和支持电子邮件不适用于测试版问题。
最近的版本
最新条目 - 打开旧版本的完整列表。
仅限会员
在上方登录或注册即可查看 Beta 版本说明和下载。
Version 1.0.23
August 11, 2026
A sync-reliability release fixing a permanent resync loop and a false "library was repaired" prompt on wiped devices:
- Uploaded rows are no longer stored as
pending. The generic outbox push uploaded the full local row without stamping its sync status, sopending— the local marker for "still waiting to be pushed" — was written into the server copy and pulled straight back down. The row then looked stranded, the 1.0.21 stranded-row rescue re-queued it, and that local write scheduled the next sync: a self-sustaining loop that resynced hundreds of rows on a library nobody had touched (one report: 765 rows, four cycles in a row). Uploads now strip the server-managed columns and stampsyncedat the single choke point every full-row upload passes, and pulls assertsyncedon every row written locally, so the wedged state cannot be represented on the device whatever arrives from the server. Existing backlogs heal on the next pull with no migration, and because the push also repairs the stored server value, devices still running an older build stop looping without updating. - A device with no library is not "behind a library repair". "Wipe local database" deletes the device's library-generation marker along with everything else, and reading it back defaulted to generation 1 while the account's server generation stays where an earlier repair left it. "This device has no idea which generation it is on" was therefore indistinguishable from "this device is two generations behind", so every wiped or freshly installed device on a once-repaired account took the destructive catch-up path — prompting about unsynced changes an empty device cannot have, and on a send-only device raising a hard sync block it had no way to clear. A missing marker together with an empty library and an empty outbox is now recognised as a fresh device: it adopts the server generation and lets the ordinary full pull fetch the library. A library that has rows but no marker still gets the prompt, because those rows can genuinely be pushed at the wrong generation.
- Smaller fixes: the release publisher no longer aborts one channel's publish because a different, deliberately retired channel still lists deleted artifacts — asset checks are now scoped to the channel being published, and a channel marked unavailable is skipped entirely.
Version 1.0.22
August 11, 2026
A fix release for chord spelling, enharmonic chord diagrams, silent DMX output and a stuck macOS modifier:
- Transposed chords keep their scale degree. The tonic moves a fixed number of letter steps and every chord moves with it, so a D in a song in E now transposes to Bb in C rather than A#. Borrowed and diatonic chords are both spelled the way a chart spells them; where the degree-correct name would need a double accidental or one of B#/E#/Cb/Fb, the song's own preference decides instead.
- Both spellings of a note reach the same chord diagrams. Db and C#, Gb and F# were separate namespaces in the chord lookup, so one of each pair fell through to calculated shapes while 254 of 260 curated fingerings sat unused. Reads now match either spelling for guitar, ukulele, banjo and mandolin, existing user grips and synced rows are found without a rename, and duplicate twins are folded away.
- DMX output reports when it is being dropped. When the OS refuses the app's Art-Net datagrams, the DMX sidebar now shows a warning naming the likely cause (the "Local network" permission on iOS/macOS) instead of looking healthy while nothing reaches the fixtures. The automatic socket rebind now backs off exponentially (2 s → 60 s) rather than retrying every two seconds indefinitely, and resets on recovery or a new target address.
- macOS: a stale ⌘ modifier heals itself. A lost key-up from a native menu or sheet could leave Command permanently "held", turning every plain keystroke in the editor into its shortcut until the app was switched away and back. The keyboard state is now reconciled against the engine after native menu callbacks and after each shell shortcut fires, so at most one keystroke misfires before typing works again.
- Smaller fixes: support reports now record which modifier keys were held when a shortcut fired; the DMX rebind log pair is throttled so it no longer crowds the rest of the support log out of the tail; two macOS marketing-capture failures (an IFS leak and a first-launch Gatekeeper timeout) fixed in the build tooling.