Skip to content

Commit 9b5caef

Browse files
democlaude
andcommitted
docs: update install instructions for Sparkle auto-update and GitHub Releases
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c820c7d commit 9b5caef

3 files changed

Lines changed: 28 additions & 0 deletions

File tree

CLAUDE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ cp -R "$APP_SRC" ./VPNMenuBar.app
5757
ditto -c -k --keepParent ./VPNMenuBar.app ./VPNMenuBar-0.1.0.zip
5858
```
5959

60+
**Signing for Sparkle** (after creating the zip):
61+
```sh
62+
# sign_update is from Sparkle's tools (find it in DerivedData or download from Sparkle releases)
63+
/path/to/sign_update ./VPNMenuBar-X.Y.Z.zip
64+
# Copy the edSignature and length into appcast.xml's new <item>
65+
```
66+
6067
**Launch the built app for manual smoke testing**:
6168
```sh
6269
open ./VPNMenuBar.app # first run will hit Gatekeeper — right-click → Open
@@ -160,6 +167,7 @@ The repo IS the distribution. Three artifacts work together:
160167
- `brew install openconnect` (skipped if already installed)
161168
- Writes `/etc/sudoers.d/vpnmenubar-<user>` with a `visudo -c -f` pre-check. Uses `/etc/sudoers.d/` (not the main `/etc/sudoers`) so uninstall is `sudo rm` of one file and a broken rule can never lock the user out of sudo
162169
- Handles Intel vs Apple Silicon path differences automatically
170+
4. **`appcast.xml`** — Sparkle appcast feed at repo root. Each release adds a new `<item>` with the version, EdDSA signature, file size, and GitHub Release download URL. Sparkle checks this file periodically to discover updates. Updated manually as part of the release workflow.
163171

164172
Gatekeeper bypass is `xattr -dr com.apple.quarantine /Applications/VPNMenuBar.app` or right-click → Open. Document this in any user-facing instructions.
165173

INSTALL.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,17 @@ macOS 状态栏小工具,封装 `openconnect` 连接 Cisco AnyConnect 兼容
3737
> bash install-deps.sh
3838
> ```
3939
40+
## 从 GitHub Releases 下载(最简单)
41+
42+
不需要 git,直接从 Release 页面下载最新版:
43+
44+
1. 打开 [最新 Release](https://github.com/CoderZCC/VPNMenuBar/releases/latest),下载 `VPNMenuBar-x.y.z.zip`
45+
2. 解压后把 `VPNMenuBar.app` 拖到 `/Applications`
46+
3. 终端执行 `xattr -dr com.apple.quarantine /Applications/VPNMenuBar.app`(或者右键 → 打开 → 打开)
47+
4. 启动后走 Onboarding 向导
48+
49+
之后有新版本时,app 会**自动提示更新**,点"安装更新"即可,不用再手动下载。也可以随时从状态栏菜单点 **Check for Updates…** 手动检查。
50+
4051
---
4152
4253
## 手动安装步骤

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ A macOS 13+ status-bar app that wraps OpenConnect for Cisco AnyConnect-compatibl
1616
- **Auto-reconnect on network change** — drops the VPN cleanly when WiFi disconnects, reconnects automatically when it comes back (only if you connected manually — failed connects don't loop-retry)
1717
- **Stale host-route cleanup** — scrubs leftover routes from the previous WiFi gateway before each connect, fixing the "Failed to connect after WiFi switch" symptom
1818
- **Status-bar agent**`LSUIElement`, no Dock icon, no notification spam
19+
- **Auto-update** — checks GitHub Releases for new versions via [Sparkle](https://sparkle-project.org/). One-click update from the menu bar
1920

2021
## Install
2122

@@ -43,6 +44,14 @@ xcodebuild -project VPNMenuBar.xcodeproj -scheme VPNMenuBar \
4344
# See CLAUDE.md "Build, run, ship" for the full distribution recipe.
4445
```
4546

47+
### Option C — download from GitHub Releases
48+
49+
Download the latest `VPNMenuBar-x.y.z.zip` from the [Releases](https://github.com/CoderZCC/VPNMenuBar/releases/latest) page:
50+
51+
1. Unzip → drag `VPNMenuBar.app` to `/Applications`
52+
2. `xattr -dr com.apple.quarantine /Applications/VPNMenuBar.app`
53+
3. Open the app — subsequent updates will be delivered automatically via the menu bar
54+
4655
## First launch
4756

4857
Right-click the app in Finder → **Open****Open** in the Gatekeeper warning. After that, normal launches work and the login-item registration happens automatically.

0 commit comments

Comments
 (0)