|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# Get version from pom.xml |
| 5 | +VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) |
| 6 | +echo "Building version: $VERSION" |
| 7 | + |
| 8 | +# Find Developer ID certificate |
| 9 | +CERT_IDENTITY=$(security find-identity -v -p codesigning | grep "Developer ID Application" | head -1 | sed -n 's/.*"\(.*\)"/\1/p') |
| 10 | +echo "Using certificate: $CERT_IDENTITY" |
| 11 | + |
| 12 | +# Build JAR |
| 13 | +echo "Building JAR..." |
| 14 | +mvn clean package |
| 15 | + |
| 16 | +# Create clean input directory |
| 17 | +echo "Preparing jpackage input..." |
| 18 | +rm -rf jpackage-input |
| 19 | +mkdir -p jpackage-input |
| 20 | +cp target/EWItool-$VERSION.jar jpackage-input/ |
| 21 | + |
| 22 | +# Remove old app bundle |
| 23 | +rm -rf target/EWItool.app |
| 24 | + |
| 25 | +# Create app bundle |
| 26 | +echo "Creating app bundle..." |
| 27 | + |
| 28 | +# Get JavaFX version and architecture |
| 29 | +JAVAFX_VERSION=23.0.2 |
| 30 | +ARCH=$(uname -m) |
| 31 | +if [ "$ARCH" = "arm64" ]; then |
| 32 | + JAVAFX_ARCH="mac-aarch64" |
| 33 | +else |
| 34 | + JAVAFX_ARCH="mac" |
| 35 | +fi |
| 36 | + |
| 37 | +# Build module path from Maven repository |
| 38 | +JAVAFX_BASE="$HOME/.m2/repository/org/openjfx" |
| 39 | +MODULE_PATH="$JAVAFX_BASE/javafx-base/$JAVAFX_VERSION/javafx-base-$JAVAFX_VERSION-$JAVAFX_ARCH.jar" |
| 40 | +MODULE_PATH="$MODULE_PATH:$JAVAFX_BASE/javafx-graphics/$JAVAFX_VERSION/javafx-graphics-$JAVAFX_VERSION-$JAVAFX_ARCH.jar" |
| 41 | +MODULE_PATH="$MODULE_PATH:$JAVAFX_BASE/javafx-controls/$JAVAFX_VERSION/javafx-controls-$JAVAFX_VERSION-$JAVAFX_ARCH.jar" |
| 42 | + |
| 43 | +jpackage \ |
| 44 | + --type app-image \ |
| 45 | + --name EWItool \ |
| 46 | + --input jpackage-input \ |
| 47 | + --main-jar EWItool-$VERSION.jar \ |
| 48 | + --main-class com.github.ledhed2222.ewitool.Main \ |
| 49 | + --dest target \ |
| 50 | + --app-version $VERSION \ |
| 51 | + --vendor "Ledhed2222" \ |
| 52 | + --icon src/main/resources/logo.icns \ |
| 53 | + --module-path "$MODULE_PATH" \ |
| 54 | + --add-modules javafx.base,javafx.graphics,javafx.controls |
| 55 | + |
| 56 | +# Sign nested binaries with entitlements |
| 57 | +echo "Signing nested binaries..." |
| 58 | +find target/EWItool.app/Contents -type f \( -name "*.dylib" -o -name "*.jnilib" -o -perm +111 \) | while read file; do |
| 59 | + echo " Signing: $file" |
| 60 | + codesign --force --sign "$CERT_IDENTITY" --timestamp --options runtime --entitlements .github/macos/entitlements.plist "$file" 2>/dev/null || true |
| 61 | +done |
| 62 | + |
| 63 | +# Sign app bundle with entitlements |
| 64 | +echo "Signing app bundle..." |
| 65 | +codesign --force --sign "$CERT_IDENTITY" --timestamp --options runtime --entitlements .github/macos/entitlements.plist --deep target/EWItool.app |
| 66 | + |
| 67 | +# Verify signature |
| 68 | +echo "Verifying signature..." |
| 69 | +codesign --verify --deep --strict --verbose=2 target/EWItool.app |
| 70 | + |
| 71 | +# Create DMG |
| 72 | +echo "Creating DMG..." |
| 73 | +rm -f target/EWItool-$VERSION.dmg |
| 74 | +hdiutil create -volname EWItool -srcfolder target/EWItool.app -ov -format UDZO target/EWItool-$VERSION.dmg |
| 75 | + |
| 76 | +# Sign DMG |
| 77 | +echo "Signing DMG..." |
| 78 | +codesign --force --sign "$CERT_IDENTITY" --timestamp target/EWItool-$VERSION.dmg |
| 79 | + |
| 80 | +# Verify DMG |
| 81 | +codesign --verify --verbose=4 target/EWItool-$VERSION.dmg |
| 82 | + |
| 83 | +echo "" |
| 84 | +echo "✅ Build complete!" |
| 85 | +echo "App bundle: target/EWItool.app" |
| 86 | +echo "DMG: target/EWItool-$VERSION.dmg" |
| 87 | +echo "" |
| 88 | +echo "Test the app with: target/EWItool.app/Contents/MacOS/EWItool" |
0 commit comments