YrXtals/scripts/macos/build.sh

72 lines
2.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# compiles the rust binary, renders AppIcon.icns from the svg, and assembles "Yr Xtals.app" under build/bin.
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
cd "$ROOT"
case "$(uname -s)" in
Darwin) ;;
*) echo "wrong platform: $(uname -s) — use cargo xtask build" >&2; exit 1;;
esac
BUILD="$ROOT/build"
APP="$BUILD/bin/Yr Xtals.app"
CONTENTS="$APP/Contents"
MACOS="$CONTENTS/MacOS"
RESOURCES="$CONTENTS/Resources"
export MACOSX_DEPLOYMENT_TARGET=14.0
echo "Building Rust binary (release)..."
cargo build --release --bin yr_crystals
# cargo target dir under /tmp per .cargo/config.toml
BIN="/tmp/yr_crystals-target/release/yr_crystals"
if [ ! -f "$BIN" ]; then
echo "ERROR: yr_crystals binary not found at $BIN" >&2
exit 1
fi
# AppIcon.icns from assets/Icon.svg via rsvg-convert + iconutil.
SVG="$ROOT/assets/Icon.svg"
if [ -f "$SVG" ]; then
if ! command -v rsvg-convert >/dev/null 2>&1; then
echo "ERROR: rsvg-convert missing — install with 'brew install librsvg' or 'port install librsvg'" >&2
exit 1
fi
echo "Generating app icon..."
ICONSET="$BUILD/AppIcon.iconset"
rm -rf "$ICONSET"
mkdir -p "$ICONSET"
for size in 16 32 64 128 256 512 1024; do
rsvg-convert --width="$size" --height="$size" "$SVG" -o "$ICONSET/icon_${size}.png"
done
cp "$ICONSET/icon_16.png" "$ICONSET/icon_16x16.png"
cp "$ICONSET/icon_32.png" "$ICONSET/icon_16x16@2x.png"
cp "$ICONSET/icon_32.png" "$ICONSET/icon_32x32.png"
cp "$ICONSET/icon_64.png" "$ICONSET/icon_32x32@2x.png"
cp "$ICONSET/icon_128.png" "$ICONSET/icon_128x128.png"
cp "$ICONSET/icon_256.png" "$ICONSET/icon_128x128@2x.png"
cp "$ICONSET/icon_256.png" "$ICONSET/icon_256x256.png"
cp "$ICONSET/icon_512.png" "$ICONSET/icon_256x256@2x.png"
cp "$ICONSET/icon_512.png" "$ICONSET/icon_512x512.png"
cp "$ICONSET/icon_1024.png" "$ICONSET/icon_512x512@2x.png"
rm -f "$ICONSET"/icon_16.png "$ICONSET"/icon_32.png "$ICONSET"/icon_64.png \
"$ICONSET"/icon_128.png "$ICONSET"/icon_256.png "$ICONSET"/icon_512.png \
"$ICONSET"/icon_1024.png
iconutil -c icns "$ICONSET" -o "$BUILD/AppIcon.icns"
rm -rf "$ICONSET"
fi
mkdir -p "$MACOS" "$RESOURCES"
cp "$ROOT/macos/Info.plist" "$CONTENTS/Info.plist"
cp "$BIN" "$MACOS/yr_crystals"
[ -f "$BUILD/AppIcon.icns" ] && cp "$BUILD/AppIcon.icns" "$RESOURCES/AppIcon.icns"
codesign --force --sign - "$APP"
echo "Built: $APP"
open "$APP"