Merge branch 'fix/mac-build-strip-t72' into feat/daemon

This commit is contained in:
2026-07-27 21:12:55 +08:00
3 changed files with 47 additions and 1 deletions
Binary file not shown.
+18 -1
View File
@@ -10,12 +10,29 @@
set -euo pipefail
cd "$(dirname "$0")"
# 版本編號(leo 2026-07-27:「daemon 要加上版本編號」)——沒版本號就只能靠 shasum 對帳,
# 使用者回報問題時我們也不知道他跑的是哪一版(見 t63「修好的東西傳不到用戶」)。
# 用法:VERSION=v0.9.0 bash build-mac.sh(未給則用 git 描述,再不行才 dev)
VERSION="${VERSION:-$(git describe --tags --always --dirty 2>/dev/null || echo dev)}"
BUILD_TIME="$(date '+%Y%m%d-%H%M')"
LDFLAGS_VER="-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME}"
echo "🏷 版本:${VERSION}build ${BUILD_TIME}"
echo "① 編 collector(同綑執行檔)"
( cd ../.. && go build -o "cmd/arcrun-tray/arcrun-collector" . )
( cd ../.. && go build -ldflags "-s -w" -o "cmd/arcrun-tray/arcrun-collector" . )
echo "② fyne package"
go run fyne.io/fyne/v2/cmd/fyne@latest package -os darwin -icon icon.png -name "Arcrun RAG" -appID dev.arcrun.rag.tray
# ②b 用 -s -w 重編托盤覆蓋回 bundle2026-07-27t72/t63)。
# 為什麼:`fyne package` 內部自己 go build,吃不到 -ldflags,產出含符號表與 DWARF 的胖執行檔。
# 實測(本機):托盤 28.6MB → 21.3MB**整包 zip 21.1MB → 14.65MB**
# **掉進 jsDelivr 單檔 20MB 上限內**(此前 Mac 版超標,jsDelivr 直接回
# "File size exceeded the configured limit of 20 MB.",只能走 rawWindows 版 13MB 無此問題)。
# ⇒ 這一步讓 Mac 版也能走 CDN,且**免除拆檔工程**。功能指紋與簽章實測皆不受影響。
echo "②b strip 重編托盤(-s -w;為了掉進 jsDelivr 20MB 線內)+注入版本號"
go build -ldflags "-s -w ${LDFLAGS_VER}" -o "Arcrun RAG.app/Contents/MacOS/arcrun-tray" .
APP="Arcrun RAG.app"
PLIST="$APP/Contents/Info.plist"
+26
View File
@@ -38,6 +38,27 @@ import (
"fyne.io/fyne/v2/widget"
)
// 版本資訊(leo 2026-07-27:「daemon 要加上版本編號」)。
//
// 為什麼需要:在此之前**沒有任何辦法從畫面看出裝的是哪一版**——07-27 花了大半天在對帳
// 「leo 手上/鏡像上/剛編的」是不是同一顆,只能靠 shasum 比對 binary。使用者更不可能做這件事,
// 回報問題時我們也無法確認他跑的是哪版(修好的東西他可能根本沒拿到,見 t63 三層落差)。
//
// 怎麼帶值:build 時用 -ldflags "-X main.version=… -X main.buildTime=…" 注入(見 build-mac.sh
// build-windows.sh)。沒注入時顯示 dev,代表「本機隨手編的、非發佈品」——這本身就是有用的資訊。
var (
version = "dev"
buildTime = ""
)
// versionLabel 給托盤選單顯示用:正式版顯示「v1.2.3」,開發版額外標出建置時間好辨識。
func versionLabel() string {
if version == "dev" && buildTime != "" {
return "dev (" + buildTime + ")"
}
return version
}
// directConfig 是 collector direct 的設定(與 collector/direct.go 的 DirectConfig 同結構;
// 這裡只需讀寫 watch_folder,其餘由安裝器帶入)。
type directConfig struct {
@@ -540,6 +561,8 @@ func main() {
// 有 cypher_url 時再加一行縮短的 hostfyne MenuItem 無 tooltip,取捨見 shortCypherHost 注解)。
connItem := fyne.NewMenuItem(connectionStatusLabel(cfg.InstanceName, cfg.Email), nil)
connItem.Disabled = true
versionItem := fyne.NewMenuItem("版本 "+versionLabel(), nil)
versionItem.Disabled = true
items := []*fyne.MenuItem{connItem}
if host := shortCypherHost(cfg.CypherURL); host != "" {
hostItem := fyne.NewMenuItem("→ "+host, nil)
@@ -573,6 +596,9 @@ func main() {
fyne.NewMenuItem("🔗 連上知識庫…(換帳號/重新連線)", func() { showConnectWizard() }), // t54
fyne.NewMenuItemSeparator(),
pauseItem,
// 版本列(leo 2026-07-27:「daemon 要加上版本編號」):停用態=純顯示不可點。
// 放在「結束」正上方——使用者要回報問題時,眼睛已經在選單底部這一區。
versionItem,
// t55leo 2026-07-26 實撞:「沒有 exit 的選項,我無法關閉它」):
// 沒有出口的 app 是設計缺陷——用戶只剩「強制結束」可用,而托盤 app 連 Dock 都沒有
// LSUIElement),右鍵結束那條路也不存在。這裡給一條明確的出路: