Skip to content

Releases: AlexGladkov/Spacie

Spacie 1.3.0 — iTransfer для iOS приложений

05 Jun 17:27

Choose a tag to compare

Главное — iTransfer для iOS приложений

Новый мастер переноса приложений с iPhone на Mac и обратно. Теперь можно:

  • Скачать любое приложение с iPhone к себе на Mac в виде IPA архива (Wi-Fi или кабель)
  • Установить IPA обратно на iPhone одной кнопкой (полезно для бэкапов любимых приложений, которые удалили из App Store)
  • Перенести батч приложений между двумя iPhone — выбрал список, нажал старт, ушёл пить кофе
  • Локальная библиотека архивов — все скачанные IPA хранятся отдельно с иконками, версиями, размерами

Авторизация через Apple ID (с поддержкой 2FA). Пароль безопасно передаётся через PTY — другие процессы системы его не видят.

Сканирование диска — заметно шустрее

  • Клик по диску открывает результаты в ~10 раз быстрее на больших объёмах
  • Везде где идёт долгая операция теперь крутится спиннер с понятным текстом

Удаление из списка больших файлов

  • Правый клик в Large Files / Old Files → Move to Trash (или ⌘⌫)
  • Multi-select — выделил несколько → один confirm → все удалены
  • Подтверждение показывает сколько места освободится
  • Если файл уже куда-то делся — просто убирается из списка без раздражающей ошибки

Под капотом

Приложение переписано на Kotlin Multiplatform. В следующих версиях появятся сборки под Windows и Linux.


System requirements: macOS 14+, Apple Silicon (arm64).
Для iTransfer: Homebrew + libimobiledevice (мастер всё установит сам).

Spacie for Windows v1.0.0

08 Apr 17:26

Choose a tag to compare

Spacie for Windows

Installation

  1. Download Spacie-1.0.0.msi below
  2. Run the installer
  3. Install libimobiledevice via Chocolatey:
    choco install libimobiledevice
    

Requirements

  • Windows 10 / 11
  • Chocolatey + libimobiledevice (for iPhone connectivity)

v1.2.0 — Duplicate Finder

04 Mar 12:09

Choose a tag to compare

What's New

Duplicate Finder

  • Progressive hashing pipeline: size grouping → partial SHA-256 (16 KB head+tail) → full SHA-256 on demand
  • Found 83 534 groups and 28.43 GB of wasted space on a real 800 GB disk in ~7 minutes
  • Search, min-size filter (4 KB / 64 KB / 1 MB / 10 MB / 100 MB), sort by Wasted Space / Count / File Size
  • Auto-Select strategy: Keep Newest, Keep Oldest, Keep Shortest Path
  • Expand groups to see file paths and dates; click to verify with full hash
  • Send selected files to Drop Zone for safe deletion via Trash

Performance

  • Tab switching no longer freezes — cached filteredGroups and selectedForDeletion instead of recomputing on every SwiftUI render
  • buildSizeBuckets() — single O(N) pass through FileTree under one lock, hardlink dedup via inode

Bug Fixes (6 critical)

  • Sentinel node (index 0) no longer processed as a duplicate candidate
  • sendToDropZone now uses treeIndex: UInt32 — eliminates FileNodeInfo(id: 0) sentinel crash
  • Selection state moved to ViewModel.selectedFileIds: Set<String> — no more full group recreation on every toggle
  • Partial hash increased from 4 KB to 16 KB head + 16 KB tail
  • I/O: pread(2) + F_NOCACHE + O_NOFOLLOW instead of FileHandle
  • Concurrent tasks: 8 for partial hashing, 4 for full hashing

v1.1.0 — Stability & Reliability

02 Mar 09:43

Choose a tag to compare

What's Changed

This release is focused entirely on stability and reliability improvements identified through a comprehensive code audit.

🔴 Critical fixes (crashes & data races)

  • FileTree thread safety — all 20 read methods now hold os_unfair_lock, preventing data races with the UI during Phase 2 scanning
  • Crash on empty tree — fixed 1...0 range crash in Go To Folder and Storage Overview when tree has no nodes
  • DeepScanner data racethresholdReached is now read under lock via isThresholdReached
  • Static variable racesScanExclusionManager and BlocklistManager lazy-loaded statics now protected by os_unfair_lock
  • Potential deadlock — replaced DispatchSemaphore.wait() inside Swift Task with DiskScanner.scanSync() to avoid cooperative thread pool exhaustion
  • Thread-unsafe lazy varScanCache.wal moved from lazy var to init() for safe eager initialization
  • Main thread freezeOldFilesViewModel.refresh now runs on Task.detached, no longer blocks the UI on large trees

🟡 Medium fixes

  • aggregateEntryCounts() now idempotent via guard flag
  • removeSubtreeFromPathIndex and ensureParentChain converted from recursive to iterative (prevents stack overflow on deep node_modules hierarchies)
  • _children(of:) now has a safety counter to prevent infinite loop on corrupted sibling list
  • ScanCache force-unwrap on FileManager.urls replaced with safe fallback
  • DuplicateScanState Equatable now handles all cases (.computingFullHash, .error)
  • DuplicateFinderViewModel no longer silently drops scan results when navigating away

🟢 Low-priority cleanup

  • Removed dead didAdd variable in DropZoneView
  • isPackageExtension deduplicated from 3 scanners into a single String.isPackageDirectory extension
  • DiskScanner refactored to support synchronous callback via scanSync()

Spacie 1.0.0

25 Feb 12:10

Choose a tag to compare

Spacie 1.0.0

Real-time disk space analyzer for macOS (Apple Silicon).

Features

  • Live filesystem scanning with incremental cache — instant startup from persisted data
  • Interactive treemap visualization of disk usage
  • Contextual file type classification with category breakdown
  • Large files panel for quick identification of space hogs
  • App Nap prevention during active scans

Install

  1. Download Spacie-1.0.0-arm64.dmg
  2. Open the DMG and drag Spacie to Applications
  3. On first launch: right-click the app → Open (required for ad-hoc signed apps)

Requires macOS 15.0+, Apple Silicon