Files
EveryPublish/client/macos/build-macos-app.sh
T

77 lines
2.9 KiB
Bash
Executable File

#!/bin/sh
set -eu
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
ROOT_DIR=$(CDPATH= cd -- "$SCRIPT_DIR/../.." && pwd)
CORE_DIR="$ROOT_DIR/client/core"
DIST_DIR="$ROOT_DIR/client/dist"
RELEASE_DIR="$ROOT_DIR/client/macos/release"
APP_DIR="$RELEASE_DIR/EveryPublish.app"
ARCH=${MAC_ARCH:-arm64}
SIGN_IDENTITY=${MAC_SIGN_IDENTITY:--}
case "$ARCH" in
arm64) GOARCH=arm64; SWIFT_ARCH=arm64 ;;
x64) GOARCH=amd64; SWIFT_ARCH=x86_64 ;;
*) echo "Unsupported MAC_ARCH: $ARCH (use arm64 or x64)" >&2; exit 2 ;;
esac
mkdir -p "$DIST_DIR" "$RELEASE_DIR"
(cd "$CORE_DIR" && GOOS=darwin GOARCH="$GOARCH" CGO_ENABLED=0 go build -trimpath -ldflags '-s -w' -o "$DIST_DIR/agent-core" .)
chmod 755 "$DIST_DIR/agent-core"
rm -rf "$APP_DIR"
mkdir -p "$APP_DIR/Contents/MacOS" "$APP_DIR/Contents/Resources"
swiftc "$SCRIPT_DIR/EveryPublishMacOSApp.swift" \
-target "$SWIFT_ARCH-apple-macosx13.0" \
-O \
-parse-as-library \
-framework SwiftUI \
-framework AppKit \
-framework UserNotifications \
-o "$APP_DIR/Contents/MacOS/EveryPublish"
cp "$DIST_DIR/agent-core" "$APP_DIR/Contents/Resources/agent-core"
chmod 755 "$APP_DIR/Contents/MacOS/EveryPublish" "$APP_DIR/Contents/Resources/agent-core"
cat > "$APP_DIR/Contents/Info.plist" <<PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key><string>EveryPublish</string>
<key>CFBundleExecutable</key><string>EveryPublish</string>
<key>CFBundleIdentifier</key><string>com.everypublish.macos</string>
<key>CFBundleName</key><string>EveryPublish</string>
<key>CFBundlePackageType</key><string>APPL</string>
<key>CFBundleShortVersionString</key><string>0.3.0</string>
<key>CFBundleVersion</key><string>0.3.0</string>
<key>LSMinimumSystemVersion</key><string>13.0</string>
<key>LSUIElement</key><false/>
<key>NSHighResolutionCapable</key><true/>
</dict>
</plist>
PLIST
if [ "$SIGN_IDENTITY" = "-" ]; then
DMG_SUFFIX="-local"
echo "Signing app ad hoc for local testing (set MAC_SIGN_IDENTITY for distribution)"
codesign --force --deep --sign - "$APP_DIR"
else
DMG_SUFFIX=""
echo "Signing app with $SIGN_IDENTITY"
codesign --force --deep --options runtime --timestamp --sign "$SIGN_IDENTITY" "$APP_DIR"
fi
codesign --verify --deep --strict "$APP_DIR"
if command -v hdiutil >/dev/null 2>&1; then
STAGE_DIR=$(mktemp -d "$RELEASE_DIR/dmg-stage.XXXXXX")
trap 'rm -rf "$STAGE_DIR"' EXIT
cp -R "$APP_DIR" "$STAGE_DIR/EveryPublish.app"
ln -s /Applications "$STAGE_DIR/Applications"
rm -f "$RELEASE_DIR/EveryPublish-0.3.0-$ARCH.dmg" "$RELEASE_DIR/EveryPublish-0.3.0-$ARCH-local.dmg"
hdiutil create -volname EveryPublish -srcfolder "$STAGE_DIR" -ov -format UDZO "$RELEASE_DIR/EveryPublish-0.3.0-$ARCH$DMG_SUFFIX.dmg" >/dev/null
fi
file "$APP_DIR/Contents/MacOS/EveryPublish" "$APP_DIR/Contents/Resources/agent-core"
echo "Built $APP_DIR"