Skip to content

Commit 96a9b8b

Browse files
yusixianclaude
andcommitted
docs: move releasing guide to docs/ and translate to Chinese
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 28aa933 commit 96a9b8b

2 files changed

Lines changed: 79 additions & 79 deletions

File tree

RELEASING.md

Lines changed: 0 additions & 79 deletions
This file was deleted.

docs/RELEASING.md

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# 发版指南
2+
3+
## 前置条件
4+
5+
### GitHub Secrets
6+
7+
需要在仓库的 **Prod** 环境中配置以下 Secrets(`Settings > Environments > Prod`):
8+
9+
| Secret | 说明 |
10+
|--------|------|
11+
| `SPARKLE_ED_PUBLIC_KEY` | Sparkle 更新验证用的 Ed25519 公钥 |
12+
| `SPARKLE_ED_PRIVATE_KEY` | 签名 appcast 条目用的 Ed25519 私钥 |
13+
14+
使用 Sparkle 的 `generate_keys` 工具生成密钥对:
15+
16+
```bash
17+
# 从 Sparkle release 压缩包中执行
18+
./bin/generate_keys
19+
```
20+
21+
## 通过 Git Tag 发版(推荐)
22+
23+
推送 semver tag 即可触发 CI 自动构建、签名并发布。
24+
25+
```bash
26+
# 1. 确保在 main 分支且代码最新
27+
git checkout main && git pull
28+
29+
# 2. 创建并推送 tag
30+
git tag v0.2.0
31+
git push origin v0.2.0
32+
```
33+
34+
CI 会自动完成以下步骤:
35+
1. 构建 Release archive
36+
2. 生成 ZIP 和 DMG
37+
3. 下载 Sparkle CLI 工具(版本自动匹配 `Package.resolved`
38+
4. 生成 `appcast.xml`(保留历史版本记录)
39+
5. 创建 **已发布** 的 GitHub Release,包含 ZIP、DMG 和 `appcast.xml`
40+
41+
## 手动触发(测试用)
42+
43+
通过 Actions 页面的 `workflow_dispatch` 进行测试构建:
44+
45+
1. 前往 **Actions > Release > Run workflow**
46+
2. 可选填版本号(默认为 `0.0.0-dev`
47+
3. 点击 **Run workflow**
48+
49+
手动触发会创建 **draft** release。Draft release 不会影响 `releases/latest` URL,因此现有用户不会通过 Sparkle 自动更新收到测试版本。
50+
51+
## Sparkle 自动更新原理
52+
53+
1. 应用的 `Info.plist``SUFeedURL` 指向:
54+
```
55+
https://github.com/yusixian/MoePeek/releases/latest/download/appcast.xml
56+
```
57+
2. GitHub 的 `releases/latest/download/{asset}` 会重定向到最新 **非 draft** release 的资源文件
58+
3. Sparkle 拉取 `appcast.xml`,比对版本号,如有更新则提示用户
59+
4. 用户直接从 GitHub Releases 下载 ZIP 安装
60+
61+
## 常见问题
62+
63+
### Gatekeeper 阻止打开应用
64+
65+
由于应用未经公证(notarize),macOS Gatekeeper 可能在首次启动时阻止运行:
66+
67+
1. 右键点击应用 > **打开**(仅对该应用绕过 Gatekeeper)
68+
2. 或前往 `系统设置 > 隐私与安全性` > 点击 **仍要打开**
69+
70+
### Release 中缺少 appcast.xml
71+
72+
- 检查 Prod 环境中是否已设置 `SPARKLE_ED_PRIVATE_KEY`
73+
- 查看 Actions 日志中 "Generate appcast" 步骤是否有报错
74+
75+
### Sparkle 未检测到更新
76+
77+
- 确认 release 不是 draft(draft release 不包含在 `latest` 中)
78+
- 检查 `Project.swift``SUFeedURL` 是否指向正确的 URL
79+
- 确认最新 release 中包含 `appcast.xml` 资源文件

0 commit comments

Comments
 (0)