#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" SVG="$ROOT/assets/Icon.svg" OUT="${1:-$ROOT/build/AppIcon.icns}" if [ ! -f "$SVG" ]; then echo "ERROR: $SVG not found" >&2 exit 1 fi if ! command -v rsvg-convert >/dev/null 2>&1; then echo "ERROR: rsvg-convert not on PATH (brew install librsvg)" >&2 exit 1 fi if ! command -v iconutil >/dev/null 2>&1; then echo "ERROR: iconutil not on PATH (macOS only)" >&2 exit 1 fi WORK_SVG="$(mktemp -t icon-svg.XXXXXX)" ICONSET="$(mktemp -d -t iconset.XXXXXX)/AppIcon.iconset" mkdir -p "$ICONSET" trap 'rm -rf "$WORK_SVG" "$(dirname "$ICONSET")"' EXIT # pulls the gradient labeled #bg-color and paints it across the whole viewBox under the existing artwork. BG_FLAG=() if grep -q 'id="bg-color"' "$SVG"; then VIEWBOX="$(grep -oE 'viewBox="[^"]+"' "$SVG" | head -1 | sed -E 's/viewBox="//;s/"$//')" read -r VBX VBY VBW VBH <<<"$VIEWBOX" INJECT="" awk -v inj="$INJECT" '/<\/defs>/ {print; print inj; next} {print}' "$SVG" > "$WORK_SVG" echo "Injected #bg-color full-canvas fill" else cp "$SVG" "$WORK_SVG" BG_FLAG=(--background-color="${YRXTALS_ICON_BG:-black}") echo "No #bg-color id; falling back to solid ${YRXTALS_ICON_BG:-black}" fi ICNS_SIZES=( "16x16 16" "16x16@2x 32" "32x32 32" "32x32@2x 64" "128x128 128" "128x128@2x 256" "256x256 256" "256x256@2x 512" "512x512 512" "512x512@2x 1024" ) for entry in "${ICNS_SIZES[@]}"; do name="${entry%% *}" size="${entry##* }" rsvg-convert "${BG_FLAG[@]}" --width="$size" --height="$size" "$WORK_SVG" -o "$ICONSET/icon_${name}.png" done mkdir -p "$(dirname "$OUT")" iconutil -c icns "$ICONSET" -o "$OUT" echo "Wrote $OUT"