scripts/build-icons.sh
Rama main · réplica de lectura del repositorio original.
#!/bin/bash
# Rebuild compiled macOS icons and README previews from the Icon Composer source.
# Requires full Xcode with Icon Composer (Xcode 26 or later).
set -euo pipefail
root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$root"
developer="$(xcode-select -p)"
ictool="$developer/../Applications/Icon Composer.app/Contents/Executables/ictool"
if [[ ! -x "$ictool" ]]; then
echo "Icon Composer is missing from the selected Xcode installation." >&2
exit 1
fi
work="$(mktemp -d "${TMPDIR:-/tmp}/whisper-icons.XXXXXX")"
trap 'rm -rf "$work"' EXIT
xcrun actool assets/whisper.icon \
--compile "$work" --app-icon whisper --include-all-app-icons \
--target-device mac --minimum-deployment-target 12.0 --platform macosx \
--output-partial-info-plist "$work/icon.plist" \
--output-format human-readable-text --warnings --errors
for rendition in Default Dark; do
"$ictool" assets/whisper.icon --export-image \
--output-file "$work/$rendition.png" --platform macOS \
--rendition "$rendition" --width 1024 --height 1024 --scale 1
sips -Z 256 "$work/$rendition.png" --out "$work/$rendition-preview.png" >/dev/null
done
# actool's compatibility ICNS can omit sizes above 256 px. Export the complete
# classic icon family from the default rendition for older macOS versions.
mkdir "$work/whisper.iconset"
for size in 16 32 128 256 512; do
sips -z "$size" "$size" "$work/Default.png" \
--out "$work/whisper.iconset/icon_${size}x${size}.png" >/dev/null
doubled=$((size * 2))
sips -z "$doubled" "$doubled" "$work/Default.png" \
--out "$work/whisper.iconset/icon_${size}x${size}@2x.png" >/dev/null
done
iconutil -c icns "$work/whisper.iconset" -o "$work/icon.icns"
cp "$work/Assets.car" assets/Assets.car
cp "$work/icon.icns" assets/icon.icns
cp "$work/Default-preview.png" docs/images/icon.png
cp "$work/Dark-preview.png" docs/images/icon-dark.png
echo "Updated macOS app icons and light/dark README previews."