diff --git a/tools/bundle-macos.sh b/tools/bundle-macos.sh new file mode 100755 index 000000000..ee1ac0d22 --- /dev/null +++ b/tools/bundle-macos.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# Wrap the built desktop binary in a minimal `OpenPencil.app` so +# macOS shows the proper Dock name + icon. +# +# A bare binary (`target/release/openpencil-desktop`) has no +# `Info.plist`, so the Dock falls back to the raw executable name +# and a generic icon. Running the binary from *inside* a `.app` +# directory makes macOS pick up the bundle's `CFBundleName` + icon +# even without `cargo bundle`. +# +# Usage: tools/bundle-macos.sh (after `cargo build -p op-host-desktop --release`) +# Then run: target/release/OpenPencil.app/Contents/MacOS/openpencil-desktop +set -e + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +BIN="$ROOT/target/release/openpencil-desktop" +ICON="$ROOT/crates/op-host-desktop/assets/icon.icns" +APP="$ROOT/target/release/OpenPencil.app" + +if [ ! -x "$BIN" ]; then + echo "bundle-macos: $BIN not found — run 'cargo build -p op-host-desktop --release' first" >&2 + exit 1 +fi + +rm -rf "$APP" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +cp "$BIN" "$APP/Contents/MacOS/openpencil-desktop" +cp "$ICON" "$APP/Contents/Resources/icon.icns" + +cat > "$APP/Contents/Info.plist" <<'PLIST' + + + + + CFBundleNameOpenPencil + CFBundleDisplayNameOpenPencil + CFBundleExecutableopenpencil-desktop + CFBundleIdentifiercom.zseven-w.openpencil + CFBundleIconFileicon + CFBundlePackageTypeAPPL + CFBundleInfoDictionaryVersion6.0 + CFBundleShortVersionString0.8.0 + NSHighResolutionCapable + + +PLIST + +echo "bundle-macos: built $APP"