maksit-postclient/packaging/macos/bundle.sh
Maksym Sadovnychyy 5e54272c2b (feature): init
2026-09-13 16:47:17 +02:00

72 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# Build Postclient.app and a drag-to-Applications DMG from a dotnet publish folder.
set -euo pipefail
publish_dir=""
version=""
rid=""
icon_png=""
output_dir=""
usage() {
echo "Usage: bundle.sh --publish-dir DIR --version VER --rid osx-arm64|osx-x64 --icon PNG --output-dir DIR" >&2
exit 2
}
while [[ $# -gt 0 ]]; do
case "$1" in
--publish-dir) publish_dir="$2"; shift 2 ;;
--version) version="$2"; shift 2 ;;
--rid) rid="$2"; shift 2 ;;
--icon) icon_png="$2"; shift 2 ;;
--output-dir) output_dir="$2"; shift 2 ;;
*) usage ;;
esac
done
[[ -n "$publish_dir" && -n "$version" && -n "$rid" && -n "$icon_png" && -n "$output_dir" ]] || usage
[[ -d "$publish_dir" ]] || { echo "publish dir not found: $publish_dir" >&2; exit 1; }
[[ -f "$icon_png" ]] || { echo "icon not found: $icon_png" >&2; exit 1; }
script_dir="$(cd "$(dirname "$0")" && pwd)"
executable="MaksIT.PostClient.UI"
app_name="Postclient.app"
work="$(mktemp -d "${TMPDIR:-/tmp}/postclient-macos.XXXXXX")"
app="$work/$app_name"
host="$publish_dir/$executable"
[[ -f "$host" ]] || { echo "app host missing (UseAppHost=true): $host" >&2; exit 1; }
mkdir -p "$app/Contents/MacOS" "$app/Contents/Resources"
sed "s/{{VERSION}}/$version/g" "$script_dir/Info.plist.template" > "$app/Contents/Info.plist"
cp -a "$publish_dir/." "$app/Contents/MacOS/"
chmod +x "$app/Contents/MacOS/$executable"
iconset="$work/Postclient.iconset"
mkdir -p "$iconset"
for size in 16 32 128 256 512; do
sips -z "$size" "$size" "$icon_png" --out "$iconset/icon_${size}x${size}.png" >/dev/null
done
sips -z 32 32 "$icon_png" --out "$iconset/icon_16x16@2x.png" >/dev/null
sips -z 64 64 "$icon_png" --out "$iconset/icon_32x32@2x.png" >/dev/null
sips -z 256 256 "$icon_png" --out "$iconset/icon_128x128@2x.png" >/dev/null
sips -z 512 512 "$icon_png" --out "$iconset/icon_256x256@2x.png" >/dev/null
sips -z 1024 1024 "$icon_png" --out "$iconset/icon_512x512@2x.png" >/dev/null
iconutil -c icns "$iconset" -o "$app/Contents/Resources/Postclient.icns"
mkdir -p "$output_dir"
dmg_root="$work/dmg"
mkdir -p "$dmg_root"
cp -a "$app" "$dmg_root/"
ln -s /Applications "$dmg_root/Applications"
dmg_name="postclient-${version}-${rid}.dmg"
hdiutil create \
-volname "Postclient" \
-srcfolder "$dmg_root" \
-ov \
-format UDZO \
"$output_dir/$dmg_name"
echo "Wrote $output_dir/$dmg_name"