46 lines
1.3 KiB
Bash
Executable File
46 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
APP_NAME="Cord"
|
|
DIR="build"
|
|
BUNDLE="${DIR}/${APP_NAME}.app"
|
|
BIN_NAME="cord-gui"
|
|
|
|
echo "building ${BIN_NAME}..."
|
|
cargo build --release -p cord-gui
|
|
|
|
echo "creating ${BUNDLE}..."
|
|
rm -rf "${DIR}"
|
|
mkdir -p "${DIR}"
|
|
mkdir -p "${BUNDLE}/Contents/MacOS"
|
|
mkdir -p "${BUNDLE}/Contents/Resources"
|
|
|
|
cp "target/release/${BIN_NAME}" "${BUNDLE}/Contents/MacOS/${BIN_NAME}"
|
|
cp "crates/cord-gui/Info.plist" "${BUNDLE}/Contents/Info.plist"
|
|
|
|
# Generate icon from SVG
|
|
ICON_SVG="static/vectors/cord.svg"
|
|
if [ -f "${ICON_SVG}" ] && command -v rsvg-convert &>/dev/null; then
|
|
ICONSET="build/icon.iconset"
|
|
rm -rf "${ICONSET}"
|
|
mkdir -p "${ICONSET}"
|
|
|
|
# iconutil requires exactly these sizes:
|
|
# icon_NxN.png (1x)
|
|
# icon_NxN@2x.png (retina — rendered at 2N)
|
|
for sz in 16 32 128 256 512; do
|
|
rsvg-convert -w ${sz} -h ${sz} "${ICON_SVG}" -o "${ICONSET}/icon_${sz}x${sz}.png"
|
|
dbl=$((sz * 2))
|
|
rsvg-convert -w ${dbl} -h ${dbl} "${ICON_SVG}" -o "${ICONSET}/icon_${sz}x${sz}@2x.png"
|
|
done
|
|
|
|
iconutil -c icns "${ICONSET}" -o "${BUNDLE}/Contents/Resources/AppIcon.icns"
|
|
rm -rf "${ICONSET}"
|
|
echo "icon generated"
|
|
else
|
|
echo "no icon svg or rsvg-convert not found, skipping icon"
|
|
fi
|
|
|
|
echo "done: ${BUNDLE}"
|
|
echo "to register file types, run: open ${BUNDLE}"
|