diff --git a/BLTS-Tracker.dmg b/BLTS-Tracker.dmg index cd100ac..4f4f474 100644 Binary files a/BLTS-Tracker.dmg and b/BLTS-Tracker.dmg differ diff --git a/create_dmg.sh b/create_dmg.sh index b87cf9e..103a716 100755 --- a/create_dmg.sh +++ b/create_dmg.sh @@ -6,53 +6,97 @@ APP_NAME="BLTS Tracker" APP_BUNDLE="$DIR/$APP_NAME.app" DMG_NAME="BLTS-Tracker.dmg" OUTPUT_DMG="$DIR/$DMG_NAME" -STAGING_DIR="$DIR/.build/dmg_staging" +VOL_NAME="$APP_NAME" +MOUNT_DIR="/Volumes/$VOL_NAME" +DMG_TMP="$DIR/.build/temp_rw.dmg" -echo "πŸš€ [1/4] ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии прилоТСния..." +echo "πŸš€ [1/5] Π‘Π±ΠΎΡ€ΠΊΠ° Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ вСрсии прилоТСния..." "$DIR/build_app.sh" -echo "πŸ“¦ [2/4] ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° структуры DMG диска..." -rm -rf "$STAGING_DIR" -mkdir -p "$STAGING_DIR" +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 -# ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌ .app Π² ΠΏΠ°ΠΏΠΊΡƒ сборки -cp -R "$APP_BUNDLE" "$STAGING_DIR/" +# ΠžΡ‚ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Ρ‚ΠΎΠΌ, Ссли ΠΎΠ½ ΡƒΠΆΠ΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ +hdiutil detach "$MOUNT_DIR" -force 2>/dev/null || true +rm -f "$DMG_TMP" "$OUTPUT_DMG" +mkdir -p "$DIR/.build" -# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку Π½Π° /Applications для Drag-and-Drop -ln -s /Applications "$STAGING_DIR/Applications" +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" "$STAGING_DIR/.VolumeIcon.icns" + cp "$DIR/AppIcon.icns" "$MOUNT_DIR/.VolumeIcon.icns" if command -v SetFile >/dev/null 2>&1; then - SetFile -c icnC "$STAGING_DIR/.VolumeIcon.icns" 2>/dev/null || true - SetFile -a C "$STAGING_DIR" 2>/dev/null || true + SetFile -c icnC "$MOUNT_DIR/.VolumeIcon.icns" 2>/dev/null || true + SetFile -a C "$MOUNT_DIR" 2>/dev/null || true fi fi -echo "πŸ’Ώ [3/4] Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ сТатого DMG ΠΎΠ±Ρ€Π°Π·Π° ($DMG_NAME)..." -rm -f "$OUTPUT_DMG" +# Настройка внСшнСго Π²ΠΈΠ΄Π° ΠΎΠΊΠ½Π° Π² 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 -hdiutil create \ - -volname "$APP_NAME" \ - -srcfolder "$STAGING_DIR" \ - -ov \ - -format UDZO \ - -imagekey zlib-level=9 \ - "$OUTPUT_DMG" +# ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° кэшСй Finder ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +sync +hdiutil detach "$MOUNT_DIR" -echo "🧹 [4/4] ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²..." -rm -rf "$STAGING_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 Ρ„Π°ΠΉΠ»!" + echo "πŸ“ Π€Π°ΠΉΠ»: $OUTPUT_DMG" echo "πŸ“Š Π Π°Π·ΠΌΠ΅Ρ€: $DMG_SIZE" + echo "πŸ” Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π² Finder: $ITEMS" echo "==================================================" else - echo "❌ Ошибка: Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ $OUTPUT_DMG" + echo "❌ Ошибка ΠΏΡ€ΠΈ создании DMG" exit 1 fi