Files
arcrun-collector/cmd/arcrun-tray/build-dmg.sh
T
Leo 9fcd82b517 v0.15.7:改名 Arcrun.app+發 DMG(拖進 Applications)+MSIX 正式身分
leo 08-04:「如果當初 mac 打包就是 dmg 用拖的,現在 oscar 那裡就解決了,
如果當初 msix 就用了,現在另一個人也是更新就可以」——遠慮該在第一版就有。
原則:**用戶好用、白癡化**。

① 改名 Arcrun RAG.app → Arcrun.app(leo:「不要 rag,要 arcrun.app」)
   五處引用一起改(selfupdate.go/build-mac.sh/build-dmg.sh/t184_test.go/README)

② 新增 build-dmg.sh:DMG 內含 Arcrun.app + Applications 捷徑
   =Mac 幾十年的標準做法,開起來就暗示你拖進去 ⇒ **從源頭讓 app 待在對的位置**。
   坑:hdiutil 預設檔案系統會把「Arcrun RAG.app」截成「RAG.app」⇒ 加 -fs HFS+ 解。
   DMG 治源頭、t184 是安全網,兩個都要(已裝在別處的人不會因改發 DMG 就自動變好)。

③ MSIX 用 .env 的正式 Partner Center 身分重打(**不是佔位值**)
   回讀 AppxManifest 逐欄驗證:
     Identity Name        Uncle6.Arcrun
     Publisher            CN=DE038286-31A5-47CF-B83F-FF6B206BF591
     PublisherDisplayName Uncle6
     Version              0.15.7.0
     仍含 PLACEHOLDER      False

實測(t184 端到端,模擬 Oscar 的情境):
  app 放 /tmp/oscar-test/Downloads/(不在 /Applications)→ 跑更新覆蓋
  → 該處 app 變成 v0.15.7 
  → /Applications 沒有被無中生有一個副本 
  路徑推導三種放置位置皆正確(Downloads/Applications/Desktop)

產物 sha256:
  dmg  0eb3f76b60bf6891   mac zip f264dda7391f3006
  win  32fe44450ca77c62   msix    5bf7c911b8f3a817

 誠實標記:MSIX 能否實際安裝**這台 Mac 驗不到**(Add-AppxPackage 只有 Windows)。
   已驗的是包結構合法(unpack 過 blockmap 雜湊)+身分欄位正確。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 18:12:53 +08:00

47 lines
1.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# build-dmg.sh — 把 Arcrun.app 打成標準 Mac DMGt184 配套,leo 2026-08-04 核可)。
#
# 🎯 為什麼要 DMG(不是繼續發 zip):
# zip 解出來就是一個 app,使用者**很容易就地雙擊執行**(下載資料夾、桌面)。
# Oscar 就是這樣 ⇒ 他的 app 不在 /Applications ⇒ 自更新蓋錯地方(t184 真兇)。
# DMG 裡放「app Applications 資料夾捷徑」,開起來就是叫你把 app 拖進去的畫面
# ⇒ **從源頭讓 app 待在該待的位置**,這是 Mac 的標準慣例,使用者一看就懂。
#
# ⚠️ DMG 治源頭、t184 是安全網,**兩個都要**:
# 已經裝好舊版在別處的人(如 Oscar),不會因為改發 DMG 就自動變好。
#
# 用法:VERSION=v0.15.7 bash build-dmg.sh
# 產物:dist-mac/ArcrunRAG-<version>.dmg
set -euo pipefail
cd "$(dirname "$0")"
APP="Arcrun.app"
[[ -d "$APP" ]] || { echo "❌ 找不到 $APP —— 先跑 build-mac.sh" >&2; exit 1; }
VERSION="${VERSION:-$(git describe --tags --always --dirty 2>/dev/null || echo dev)}"
OUT_DIR="dist-mac"
DMG="$OUT_DIR/ArcrunRAG-${VERSION}.dmg"
STAGE="$(mktemp -d)/Arcrun RAG"
echo "🏷 版本:${VERSION}"
mkdir -p "$OUT_DIR" "$STAGE"
echo "① 放 app 進暫存區"
ditto "$APP" "$STAGE/$APP"
echo "② 放 Applications 捷徑(使用者拖曳的目標)"
ln -s /Applications "$STAGE/Applications"
echo "③ 產 DMG"
rm -f "$DMG"
hdiutil create -volname "Arcrun" -srcfolder "$STAGE" -fs HFS+ -ov -format UDZO "$DMG" >/dev/null
rm -rf "$(dirname "$STAGE")"
SIZE=$(ls -lh "$DMG" | awk '{print $5}')
# 註:`$DMG` 要寫成 `${DMG}(`——全形括號不是分隔符,bash 會把它吃進變數名。
echo "✅ 完成:${DMG}${SIZE}"
echo
echo "🔬 驗法:"
echo " hdiutil attach '$DMG' → 應看到 Arcrun.app 與 Applications 捷徑並排"
echo " 使用者把左邊拖到右邊即完成安裝(Mac 標準流程)"