2026 OpenClaw 實戰:遠端 Mac 上批量校驗 App Icon PNG 尺寸與 Contents.json 一致性並產出修復報告的可複現步驟

創意營運與 iOS 發版常卡在 AppIcon.appiconset 內 PNG 與 Contents.json 不一致:合併前未爆雷,進 Xcode 或送審才炸。以下為 2026 可複現的遠端 Mac 劇本:配置 OpenClaw,跑批量校驗器比對實測像素與 JSON 期望,輸出 Markdown 修復報告,並可選 debounced 資料夾監聽launchd 切片,讓設計交付自動化節奏穩定。槽位與點數對照請交叉閱讀遠端 Mac iOS 圖示交付決策矩陣

目錄

為何資產目錄仍會漂移

  1. 倍率換算錯: 同一母圖複製到 2×/3× 卻未重算像素;檔名對上 Contents.json,幾何卻錯。
  2. JSON 過期: PNG 更名但未同步每一筆 images,產生孤兒或缺引用。
  3. 靜默改尺寸: 壓縮或補邊改變邊長,預覽仍看似正常。

在合併或上傳前加一道 gate,可把上述問題壓成報告單行,而不是半夜建置失敗。

自動化形態怎麼選

模式 適合情境 取捨
手動 CLI 單次 送審前稽核、臨時盤點 設定少;忙起來易忘記跑
OpenClaw + debounced 監聽 設計師把匯出丟到遠端 Mac 共享 inbox 須調靜默窗口,避免寫入未完成就校驗
OpenClaw + launchd 切片 每 15 分鐘或夜間固定批次 容量好排;距下一 tick 才有結果

安裝、配置與執行(五步)

  1. 安裝 OpenClaw 與輔助工具: 工作者機上依OpenClaw 全平台安裝指南部署;補齊 jq;確認 sips -g pixelWidth -g pixelHeight 能讀樣本 PNG。
  2. 鎖定目錄: 設定 APPICON_DIR=/path/to/AppIcon.appiconsetREPORT_PATH=./logs/appicon_fix_report.md;報告開頭寫入 git rev-parse HEAD 以利追溯。
  3. Lint JSON: 執行 plutil -lint Contents.json;語法錯誤會讓像素邏輯出假陰性,先修再量。
  4. 推算期望像素: 對含 filenameimages[],解析 size(如 60x60)與 scale2x3x);邊長=點數 × 整數倍率(2×→2、3×→3)。
  5. 量測與 diff: 逐檔讀實際寬高,不符則 append Markdown 列;若有任一 mismatch,程序以非零退出,讓 CI 或 OpenClaw 可隔離任務。
1024×1024 行銷圖示與較小通知槽位共用同一套解析:差異只在 sizescale 推得的整數期望值,勿在 shell 裡硬編特殊案例。

監聽掛鉤與批處理腳本模板

Debounced 監聽: inbox/appicon/ 靜默約 45 秒後,複製到 work/ 跑校驗,通過則連同 report.md promote 至 out/,失敗則移 failed/

批量切片: 白牌多 App 時可迴圈 Assets.xcassets 下所有 *.appiconset,夜間合併多份 Markdown 摘要。

校驗核心(Bash + jq + sips): 由 JSON 衍生期望寬高,再與 sips 讀值比對,輸出修復表。

#!/usr/bin/env bash
set -euo pipefail
DIR="${1:?path to AppIcon.appiconset}"
REPORT="${2:-./appicon_validation_report.md}"
JSON="$DIR/Contents.json"
{
  echo "# AppIcon validation"
  echo "- host: $(hostname)"
  echo "- path: $DIR"
  echo ""
  echo "| filename | expected | actual | status |"
  echo "|---|---:|---:|---|"
} > "$REPORT"
while read -r name w h; do
  [[ -z "${name:-}" ]] && continue
  fp="$DIR/$name"
  if [[ ! -f "$fp" ]]; then
    echo "| $name | ${w}x${h} | missing | FIX: add file |" >> "$REPORT"
    continue
  fi
  read -r aw ah < <(sips -g pixelWidth -g pixelHeight "$fp" \
    | awk '/pixelWidth/ {w=$2} /pixelHeight/ {print w, $2}')
  if [[ "$aw" -eq "$w" && "$ah" -eq "$h" ]]; then
    echo "| $name | ${w}x${h} | ${aw}x${ah} | OK |" >> "$REPORT"
  else
    echo "| $name | ${w}x${h} | ${aw}x${ah} | FIX: re-export |" >> "$REPORT"
  fi
done < <(jq -r '.images[] | select(.filename!=null)
  | [.filename,
      ((.size|split("x")[0]|tonumber) * (.scale|sub("x";"")|tonumber)),
      ((.size|split("x")[1]|tonumber) * (.scale|sub("x";"")|tonumber))]
  | @tsv' "$JSON")
echo "Wrote $REPORT"

若含僅 iPad、或缺少 scale 的列,請延伸 jq 過濾器;始終以 JSON 推算期望像素。幾何通過後,可再疊加 PNG 批量質檢 檢 alpha、ICC 與體積上限。

fswatch 監聽骨架(需自行安裝 fswatch;靜默邏輯可換 sleep 迴圈判斷 mtime):

#!/usr/bin/env bash
# 觸發後等待靜默再跑校驗,避免半寫入檔案
INBOX="${APPICON_INBOX:-$HOME/inbox/appicon}"
VALIDATE="./validate_appicon.sh"
quiet_run() {
  sleep 45
  "$VALIDATE" "$INBOX/work/AppIcon.appiconset" "$INBOX/reports/$(date +%Y%m%d-%H%M).md"
}
fswatch -o "$INBOX" | while read -r _; do quiet_run & done

可引用的數字與策略

  • 經典槽位倍率: 1×/2×/3× 對應乘數 1、2、3,與 Contents.json 點數相乘即 PNG 邊長。
  • 靜默 debounce: 網路掛載或 GUI 匯出環境下,30–60 秒無新位元組再跑較穩。
  • 報告保留: logs/ 旁保留約 30 天 Markdown 或 JSONL,發版經理可 diff 建置間差異而不必開 Xcode。

FAQ:常見錯誤

jq: errorparse errorContents.json

先跑 plutil -lint;清掉合併衝突標記,確保 UTF-8 無 BOM。必要時 python3 -m json.tool 定位壞行。

sips 讀不到 PNG

可能零位元組、副檔名偽裝的 WebP、或仍在寫入。強制靜默窗口、拒空檔;若外掛支援可加 .done sidecar。

量測都對,Xcode 仍抱怨

檢查 idiom 專用列、1024 行銷資產 alpha 政策、以及部署目標必填槽位。幾何校驗是必要條件,非 App Store 政策充分條件。

為何 Finder 正常、校驗卻失敗?

預覽會縮放;請只信 sips 數值與 JSON 推算,必要時對照圖示交付矩陣核對角色與倍率。

把此流程固定在專用遠端 Mac,筆電專心創意,OpenClaw 負責離峰校驗。更多自動化主題見技術見解列表。

限免登入|站內方案頁

部署 App Icon 校驗工作者:先比節點與租用方式

開啟 MacPng 站內定價購買/租用頁面無需註冊登入即可瀏覽;連線與環境準備請見幫助中心,將同一套腳本貼上租用的遠端主機即可跑通。

查看定價(免登入) 立即租用 SSH/VNC 指南
遠端 Mac · 設計自動化 App Icon PNG 校驗
定價(免登入)