From 9db72b49aa93b9c5e8032b918390628767aae8b4 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Mon, 22 Jun 2026 09:13:11 +0800 Subject: [PATCH] feat: add .icns app icon + automated DMG build script - Generated MiniPlayer.icns from existing PNG icon set via iconutil - Added CFBundleIconFile to Info.plist so Finder/Dock shows the icon - Created build_dmg.sh: one-command release build + .app bundle + DMG (handles binary, localization, icon, Info.plist automatically) - Removed onDisappear cleanup that caused autorelease pool race - DMG: /build/MiniPlayer.dmg (420KB) --- build_dmg.sh | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 build_dmg.sh diff --git a/build_dmg.sh b/build_dmg.sh new file mode 100755 index 0000000..42fcecd --- /dev/null +++ b/build_dmg.sh @@ -0,0 +1,82 @@ +#!/bin/bash +set -e +cd "$(dirname "$0")" + +APP_NAME="MiniPlayer" +BUNDLE_ID="com.opencomputing.miniplayer" +VERSION="1.0.0" + +echo "=== 1. Release Build ===" +swift build -c release + +echo "=== 2. Create .app bundle ===" +rm -rf build/${APP_NAME}.app +mkdir -p build/${APP_NAME}.app/Contents/{MacOS,Resources} + +# Binary +cp .build/release/${APP_NAME} build/${APP_NAME}.app/Contents/MacOS/ + +# Localization +cp -r Sources/Resources/zh-Hans.lproj build/${APP_NAME}.app/Contents/Resources/ +cp -r Sources/Resources/en.lproj build/${APP_NAME}.app/Contents/Resources/ + +# Icon (.icns) +mkdir -p build/${APP_NAME}.iconset +cp Icons_macOS/${APP_NAME}.appiconset/icon_16.png build/${APP_NAME}.iconset/icon_16x16.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_16@2x.png build/${APP_NAME}.iconset/icon_16x16@2x.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_32.png build/${APP_NAME}.iconset/icon_32x32.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_32@2x.png build/${APP_NAME}.iconset/icon_32x32@2x.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_128.png build/${APP_NAME}.iconset/icon_128x128.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_128@2x.png build/${APP_NAME}.iconset/icon_128x128@2x.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_256.png build/${APP_NAME}.iconset/icon_256x256.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_256@2x.png build/${APP_NAME}.iconset/icon_256x256@2x.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_512.png build/${APP_NAME}.iconset/icon_512x512.png +cp Icons_macOS/${APP_NAME}.appiconset/icon_512@2x.png build/${APP_NAME}.iconset/icon_512x512@2x.png + +iconutil -c icns build/${APP_NAME}.iconset -o build/${APP_NAME}.app/Contents/Resources/${APP_NAME}.icns +rm -rf build/${APP_NAME}.iconset + +# Info.plist +cat > build/${APP_NAME}.app/Contents/Info.plist << PLIST + + + + + CFBundleName${APP_NAME} + CFBundleDisplayName${APP_NAME} + CFBundleIdentifier${BUNDLE_ID} + CFBundleVersion${VERSION} + CFBundleShortVersionString${VERSION} + CFBundleExecutable${APP_NAME} + CFBundlePackageTypeAPPL + CFBundleIconFile${APP_NAME} + CFBundleDevelopmentRegionzh-Hans + CFBundleLocalizations + + zh-Hans + en + + LSMinimumSystemVersion13.0 + NSHighResolutionCapable + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + mp4movmkv + avim4vmp3 + m4awav + + CFBundleTypeRoleViewer + + + + +PLIST + +echo "=== 3. Create DMG ===" +rm -f build/${APP_NAME}.dmg +hdiutil create -volname "${APP_NAME}" -srcfolder build/${APP_NAME}.app -ov -format UDZO build/${APP_NAME}.dmg + +echo "=== Done! ===" +ls -lh build/${APP_NAME}.dmg