9fcd82b517
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>
47 lines
1.9 KiB
Bash
Executable File
47 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# build-dmg.sh — 把 Arcrun.app 打成標準 Mac DMG(t184 配套,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 標準流程)"
|