Skip to content

Releases: nissy/kipple

v2.1.5

29 Nov 15:49
1443b5b

Choose a tag to compare

Improved historical performance
Added editor trim button

v2.0.0

01 Oct 14:30

Choose a tag to compare

v2.0.0 Release Notes

  • Actor-Based Clipboard Core
    Introduced a modern clipboard service that runs inside an async actor, continuously polls the pasteboard with adaptive intervals, and persists only the deltas. The adapter layer keeps
    the legacy ClipboardServiceProtocol intact, so UI components and tests continue to work with minimal change while benefiting from faster, more reliable history updates.
  • SwiftData Persistence by Default
    macOS 14 and newer now store clipboard history using SwiftData models and a dedicated repository. The repository falls back to Core Data automatically if SwiftData initialization
    fails, improving reliability across system versions while delivering noticeably quicker load times for large histories.
  • Simplified Global Hotkey Management
    A new SimplifiedHotkeyManager manages the primary global shortcut with automatic input-monitoring checks, unified local/global listeners, and persistent user defaults. Service
    providers resolve the correct manager for production and test contexts, making hotkey behavior both more robust and easier to verify.
  • UI & Category Enhancements
    Main window notifications now use cancellable work items to avoid overlapping animations, and the pinned/cleanup actions surface clearer feedback. Category filters gained “All,”
    “Numbers,” and “JSON,” plus aliases that preserve existing preferences, giving users more precise ways to sift through history.
  • ViewModel Refresh with Swift Macro Support
    The main view model family adopts Swift 5.9’s @observable macro, reducing manual Combine boilerplate. Dependency providers supply clipboard, repository, and view-model instances,
    which improves testability and keeps initialization logic centralized.
  • Expanded Test Coverage
    Added comprehensive integration, performance, and persistence suites covering the new actor service, SwiftData repository, and simplified hotkey manager. These tests exercise real
    save/restore flows, async shutdown flushing, and edge-case filtering, significantly lowering regression risk.

v1.1.1

13 Sep 11:06
012d6da

Choose a tag to compare

🐛 Bug Fixes and Performance Improvements

Memory Leak Fixes

  • Resolved retain cycles in timers: Used [weak self] in all ClipboardService timers to prevent memory leaks
  • Properly released window resources: In WindowManager,
    explicitly set delegate, contentView, and contentViewController to nil when closing windows to ensure references are released
  • Reliable observer removal: Ensure observers are removed in managers' deinit methods to prevent memory leaks

Core Data Optimization

  • Improved WAL checkpointing: Implemented non-blocking locks using NSLock.try() to prevent contention
  • Enhanced memory efficiency: Optimized memory usage during Core Data operations with explicit memory management via autoreleasepool
  • SQLite optimization: Improved database performance using WAL mode (Write-Ahead Logging) and PRAGMA optimize

Stability improvements

  • Improved long-term stability: Memory leak fixes prevent memory usage from increasing during prolonged application use
  • Optimized background processing: Efficient timer management using DispatchSourceTimer
  • Enhanced resource management: Explicit resource release prevents memory-related crashes

Test Coverage

  • Added memory leak detection tests: Automated memory leak detection using XCTMemoryMetric
  • Implemented performance monitoring tests: Continuous monitoring of memory efficiency during large data processing

📊 Improvement Effects

  • Memory Usage: Eliminated memory increase during long-term use
  • Performance: Improved responsiveness through optimized Core Data operations
  • Stability: Significantly reduced risk of memory-related crashes

v1.1.0

07 Sep 13:39
012d6da

Choose a tag to compare

Here’s a concise, release‑note–ready summary for v1.1.0.

Highlights

  • Noticeably faster history saves and loads with large clip sets.
  • More responsive UI while browsing and searching history.
  • Safer Core Data deletes; views and caches stay in sync.

Performance

  • Core Data: use batch deletes with object‑ID merging to avoid refetch storms and keep contexts/FRC in sync.
  • Core Data: tuned fetches with sensible batch sizes for list views.
  • Clipboard monitoring: dynamic polling (0.5–1.0s) and lightweight duplicate detection via recent‑content hashes.
  • Debounced persistence: Combine pipeline coalesces rapid edits into single saves.
  • Category classification: centralized service with NSCache, early‑exit heuristics (very long/very short text).
  • UI lists: fixed row height + LazyVStack for smoother scrolling.
  • Font metrics: line‑height caching to avoid repeated layout work.

Reliability

  • After batch deletes, changes are merged into both background and view contexts to prevent stale items and crashes.
  • Startup/shutdown flow waits for Core Data readiness; optional checkpointing is performed safely.
  • Clipboard “internal copy” and “from editor” states are tracked to avoid self‑echoes and duplicate entries.

Logging

  • True lazy log evaluation restored; disabled levels no longer build messages.
  • Config read is cached and refreshable to reduce UserDefaults overhead.

Developer Notes

  • Classification logic moved to CategoryClassifier (service layer) for maintainability and testability.
  • SwiftLint runs without cache; unit tests target streamlined for consistent CI runs.
  • Added and refined tests for logger lazy evaluation, classification, and Core Data operations.

If you want this in a shorter “What’s New” format for the App Store or website, I can condense it further.