#!/usr/bin/env bash set -e DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" APP_NAME="BLTS Tracker" APP_BUNDLE="$DIR/$APP_NAME.app" DMG_NAME="BLTS-Tracker.dmg" OUTPUT_DMG="$DIR/$DMG_NAME" VOL_NAME="$APP_NAME" MOUNT_DIR="/Volumes/$VOL_NAME" DMG_TMP="$DIR/.build/temp_rw.dmg" echo "πŸš€ [1/5] Π‘Π±ΠΎΡ€ΠΊΠ° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии прилоТСния..." "$DIR/build_app.sh" echo "🧹 [2/5] ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΈ очистка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π±Π°Π½Π΄Π»Π°..." # УбСТдаСмся, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ скрыто ΠΈ Π½Π΅ содСрТит Ρ‡ΡƒΠΆΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² xattr -cr "$APP_BUNDLE" chflags -R nohidden "$APP_BUNDLE" if command -v SetFile >/dev/null 2>&1; then SetFile -a B "$APP_BUNDLE" 2>/dev/null || true SetFile -a v "$APP_BUNDLE" 2>/dev/null || true fi # ΠžΡ‚ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠΌ, Ссли ΠΎΠ½ ΡƒΠΆΠ΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ hdiutil detach "$MOUNT_DIR" -force 2>/dev/null || true rm -f "$DMG_TMP" "$OUTPUT_DMG" mkdir -p "$DIR/.build" echo "πŸ’Ώ [3/5] Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ HFS+ диска..." hdiutil create -size 40m -fs HFS+ -volname "$VOL_NAME" -type UDIF "$DMG_TMP" hdiutil attach "$DMG_TMP" -mountpoint "$MOUNT_DIR" -nobrowse echo "πŸ“‹ [4/5] ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ прилоТСния ΠΈ настройка Finder..." cp -R "$APP_BUNDLE" "$MOUNT_DIR/" ln -s /Applications "$MOUNT_DIR/Applications" # Бброс скрытых Ρ„Π»Π°Π³ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΠΎΠΌΠ° xattr -cr "$MOUNT_DIR/$APP_NAME.app" chflags -R nohidden "$MOUNT_DIR" if command -v SetFile >/dev/null 2>&1; then SetFile -a B "$MOUNT_DIR/$APP_NAME.app" 2>/dev/null || true SetFile -a v "$MOUNT_DIR/$APP_NAME.app" 2>/dev/null || true fi # Установка ΠΈΠΊΠΎΠ½ΠΊΠΈ Ρ‚ΠΎΠΌΠ° if [ -f "$DIR/AppIcon.icns" ]; then cp "$DIR/AppIcon.icns" "$MOUNT_DIR/.VolumeIcon.icns" if command -v SetFile >/dev/null 2>&1; then SetFile -c icnC "$MOUNT_DIR/.VolumeIcon.icns" 2>/dev/null || true SetFile -a C "$MOUNT_DIR" 2>/dev/null || true fi fi # Настройка внСшнСго Π²ΠΈΠ΄Π° ΠΎΠΊΠ½Π° Π² Finder (AppleScript) osascript << APPLESCRIPT tell application "Finder" tell disk "$VOL_NAME" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {300, 200, 840, 500} set viewOptions to the icon view options of container window set icon size of viewOptions to 100 set arrangement of viewOptions to not arranged set position of item "$APP_NAME.app" of container window to {130, 140} set position of item "Applications" of container window to {410, 140} close open update without registering applications delay 1 end tell end tell APPLESCRIPT # ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° кэшСй Finder ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ sync hdiutil detach "$MOUNT_DIR" echo "πŸ—œοΈ [5/5] Ѐинализация ΠΈ сТатиС Π² $DMG_NAME..." hdiutil convert "$DMG_TMP" -format UDZO -imagekey zlib-level=9 -o "$OUTPUT_DMG" rm -f "$DMG_TMP" # ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π·Π° hdiutil attach "$OUTPUT_DMG" -mountpoint "$MOUNT_DIR" -nobrowse ITEMS=$(osascript -e "tell application \"Finder\" to get name of every item of disk \"$VOL_NAME\"") hdiutil detach "$MOUNT_DIR" if [ -f "$OUTPUT_DMG" ]; then DMG_SIZE=$(du -h "$OUTPUT_DMG" | cut -f1) echo "" echo "==================================================" echo "πŸŽ‰ УспСшно создан DMG Ρ„Π°ΠΉΠ»!" echo "πŸ“ Π€Π°ΠΉΠ»: $OUTPUT_DMG" echo "πŸ“Š Π Π°Π·ΠΌΠ΅Ρ€: $DMG_SIZE" echo "πŸ” Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π² Finder: $ITEMS" echo "==================================================" else echo "❌ Ошибка ΠΏΡ€ΠΈ создании DMG" exit 1 fi