2026 OpenClaw на практике: на удалённом Mac пакетно проверить размеры App Icon PNG и согласованность с Contents.json и сформировать отчёт об исправлениях

Креативные операции и релиз-менеджеры iOS по-прежнему теряют часы, когда PNG в AppIcon.appiconset не совпадают с Contents.json, а ошибка всплывает поздно — в Xcode или при проверке в сторе. Ниже — воспроизводимый сценарий 2026 для удалённого Mac: развернуть OpenClaw, запустить пакетный валидатор, который сравнивает измеренные пиксели с ожиданиями JSON, выписать Markdown-отчёт об исправлениях и при желании подключить дебаунс-мониторинг папки или срез launchd, чтобы автоматизация дизайн-доставки оставалась предсказуемой. Математику слотов и роли размеров удобно сверять с матрицей доставки iOS App Icon. Базовую установку агента можно взять из руководства по установке OpenClaw на все платформы.

Содержание

Почему каталог «плывёт»

  1. Ошибки масштаба: один мастер копируют в 2× и 3× без пересчёта пикселей; имена в Contents.json верны, а геометрия — нет.
  2. Устаревший JSON: переименовали PNG, но не обновили все элементы images — появляются сироты и битые ссылки.
  3. Тихий ресайз: оптимизаторы или отступы меняют длину стороны, а превью визуально «нормальные».

Если перед merge или выкладкой прогонять воротник, эти случаи превращаются в одну строку отчёта, а не в полночный срыв сборки.

Выбор формы автоматизации

Режим Когда уместен Компромисс
Ручной запуск CLI Разовый аудит перед отправкой в App Store Мало настройки; легко забыть под давлением сроков
OpenClaw + дебаунс watch Дизайнеры кладут экспорт в общий inbox на удалённом Mac Нужно настроить «тихое» окно, чтобы не валидировать частичные записи
OpenClaw + срез launchd Предсказуемые партии каждые 15 минут или ночью Проще планировать нагрузку; небольшая задержка до тика

Установка, настройка и запуск (пять шагов)

  1. OpenClaw и помощники: установите OpenClaw на воркер по принятому в проекте bootstrap, добавьте jq, убедитесь, что sips -g pixelWidth -g pixelHeight отрабатывает на эталонных PNG.
  2. Закрепить каталог: экспортируйте APPICON_DIR=/путь/к/AppIcon.appiconset и REPORT_PATH=./logs/appicon_fix_report.md. В начало отчёта добавьте git rev-parse HEAD для трассируемости.
  3. Lint Contents.json: выполните plutil -lint Contents.json. Пока JSON синтаксически неверен, смысла в пиксельной логике нет.
  4. Ожидаемые пиксели: для каждого images[] с filename разберите size (например 60x60) и scale (2x). Ожидаемая сторона квадрата = базовые пункты × целый множитель (2× → 2, 3× → 3).
  5. Измерение и diff: для каждого упомянутого PNG снимите фактические ширину и высоту; при расхождении добавьте строку в Markdown. Завершайте процесс с ненулевым кодом при любых несоответствиях, чтобы CI или OpenClaw изолировали задачу.

OpenClaw удобно вызывать как оболочку над этим скриптом: одна задача — «lint JSON», вторая — «measure PNG», третья — «собрать отчёт и уведомить канал». Так дизайнеры видят человекочитаемый итог, а пайплайн остаётся идемпотентным при повторном прогоне той же ревизии.

Сохраняйте рядом с отчётом короткий manifest.json: версия jq, хеш Contents.json и список отсутствующих файлов. При эскалации в поддержку Apple или внутренний аудит это снимает споры о том, какая именно копия каталога проверялась.

Мониторинг папки и шаблон пакетного скрипта

Дебаунс watch: после того как inbox/appicon/ простаивает ~45 с, копируйте в work/, валидируйте, при успехе переносите в out/ вместе с report.md, иначе — в failed/.

Пакетный срез: обходите все деревья *.appiconset под Assets.xcassets в white-label репозиториях; ночью склеивайте Markdown в один журнал.

Минимальный каркас watch на macOS: fswatch -o "$INBOX" в цикле с sleep 45 перед вызовом валидатора — так вы отсекаете серии быстрых сохранений из графического редактора. Для круглосуточного узла чаще надёжнее launchd с StartInterval и проверкой метки времени последнего изменения каталога.

#!/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"

Расширьте фильтр jq для строк только ipad или редких случаев без scale; ожидаемые пиксели всегда выводите из JSON. После успешной геометрии наслаивайте пакетный PNG QA OpenClaw — альфа, ICC и потолки по байтам.

Цифры и политики

  • Классические масштабы: 1× / 2× / 3× соответствуют множителям 1, 2 и 3 для длины стороны из поля size в Contents.json.
  • Дебаунс и хранение: на наблюдаемых деревьях держите 30–60 с тишины; около logs/ храните до ~30 суток Markdown или JSONL, чтобы сравнивать релизы.

FAQ: типичные ошибки

jq: error или parse error на Contents.json

Сначала plutil -lint. Уберите маркеры конфликтов слияния и убедитесь в UTF-8 без BOM. Сверьтесь с эталонным шаблоном из свежего каталога Xcode.

sips не читает PNG

Файл может быть нулевым, переименованным WebP или ещё пишется. Усильте окно простоя, отсекайте пустые файлы, по возможности требуйте sidecar .done от плагина экспорта.

Пиксели совпадают, а Xcode всё равно ругается

Проверьте idiom-специфичные строки, альфу у маркетинговой 1024 и обязательные слоты для целевой версии ОС. Геометрия — необходимое, но не достаточное условие для политики App Store.

Гоняйте контур на выделенном удалённом Mac, чтобы ноутбуки оставались под творческую работу, а OpenClaw закрывал ночную валидацию. Соседние сценарии — в указанных выше статьях по матрице иконок, установке OpenClaw и пакетному PNG QA.

Ограниченная акция · страницы без входа

Разверните воркер проверки App Icon на Mac mini M4

Откройте тарифы и аренду удалённого Mac на MacPng без обязательного входа в аккаунт, затем следуйте инструкциям по SSH и VNC, чтобы перенести те же скрипты на арендованный узел.

Тарифы (без входа) Арендовать Mac SSH / VNC
Удалённый Mac — OpenClaw и иконки Тарифы без входа
Тарифы