crosssubtitle-ai/scripts/build-macos-dmg.sh
2026-05-06 15:15:54 +08:00

61 lines
1.4 KiB
Bash

#!/bin/sh
set -eu
ROOT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
APP_NAME="CrossSubtitle-AI"
VERSION=$(node -p "require('$ROOT_DIR/package.json').version")
TARGET_ARCH=${TARGET_ARCH:-$(uname -m)}
RUST_TARGET=""
case "$TARGET_ARCH" in
arm64) RUST_TARGET="aarch64-apple-darwin" ;;
x86_64) RUST_TARGET="x86_64-apple-darwin" ;;
*)
echo "Unsupported architecture: $TARGET_ARCH"
exit 1
;;
esac
if [ "$(uname -m)" != "$TARGET_ARCH" ]; then
TARGET_DIR="$ROOT_DIR/src-tauri/target/${RUST_TARGET}"
else
TARGET_DIR="$ROOT_DIR/src-tauri/target/release"
fi
APP_PATH="$TARGET_DIR/bundle/macos/$APP_NAME.app"
DMG_DIR="$TARGET_DIR/bundle/dmg"
DMG_PATH="$DMG_DIR/${APP_NAME}_${VERSION}_${TARGET_ARCH}.dmg"
STAGING_DIR=$(mktemp -d "${TMPDIR:-/tmp}/crosssubtitle-dmg.XXXXXX")
cleanup() {
rm -rf "$STAGING_DIR"
}
trap cleanup EXIT
cd "$ROOT_DIR"
export TARGET_ARCH
npm run prepare-ffmpeg-macos
npm run prepare-licenses-macos
TAURI_BUILD_OPTS="--bundles app"
if [ "$(uname -m)" != "$TARGET_ARCH" ]; then
TAURI_BUILD_OPTS="$TAURI_BUILD_OPTS --target $RUST_TARGET"
fi
npm run tauri -- build $TAURI_BUILD_OPTS
mkdir -p "$DMG_DIR"
rm -f "$DMG_PATH"
ditto "$APP_PATH" "$STAGING_DIR/$APP_NAME.app"
ln -s /Applications "$STAGING_DIR/Applications"
hdiutil create \
-volname "$APP_NAME" \
-srcfolder "$STAGING_DIR" \
-ov \
-format UDZO \
"$DMG_PATH"
printf 'DMG created: %s\n' "$DMG_PATH"