Version 2.8.4
Categories:
Version 2.8.4 - In Development (Build 175)
Version 2.8.4 is scheduled for release sometime later in December 2025, the Changelog is compiled by AI. All notable changes to RsyncUI will be documented in this file.
In response to the significant modifications, a release candidate has been released. Below is a comprehensive changelog, highlighting the most notable change: the introduction of the RsyncProcessStreaming package. Additionally, a blog post has been published documenting the primary accomplishments of eliminating the previous RsyncProcess package. The primary objective of the new package is to maintain its simplicity and safety.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Major Changes
RsyncProcessStreaming Migration - Complete Overhaul
- Unified Process Execution: Migrated entire codebase from legacy
RsyncProcessto modernRsyncProcessStreamingpackage - Event-Driven Architecture: Implemented streaming handlers with real-time output capture
- Process output handler for live data streaming
- Process termination handler for cleanup
- Memory Management: Resolved retain cycles with proper handler cleanup and weak reference patterns
- Handler Lifecycle: Simplified handler creation via
ProcessHandlersfactory with built-in cleanup hooks
New Testing Infrastructure
- RsyncUITests Target: Added comprehensive UI test suite
- Argument validation tests
- Deeplink URL handling tests
- Configuration validation tests
- Profile management tests
Added
Features
- Configuration Table View: New table view in ProfileView showing all configurations per profile
- Argument Validation: Toggle for validating rsync arguments before execution
- Added user-configurable setting: “Validate arguments”
- Dry-run validation to check argument validity
- Prevents execution of invalid argument combinations
- Silent Stats Mode: User setting to silence missing stats errors without stopping error counting
- Improved Help Text: Enhanced documentation for
--deleteparameter usage in UI
Code Quality & Documentation
- Comprehensive Code Quality Analysis: Added detailed analysis document
- Zero force unwraps and force casts
- Zero TODO/FIXME markers
- Modern Swift concurrency throughout
- Professional OSLog logging
- Code Quality Reports: Updated TODO.md with detailed technical roadmap
Changed
UI/UX Improvements
- Column Renaming: Renamed table column from “Time executed” to “Time last” across multiple views
- Profile Deletion UI: Refactored profile deletion workflow for better user experience
- Progress View: Enhanced styling and layout for synchronization progress
- ExecuteEstTasksView: Various UI refinements and updates
- Settings Views: Improved code formatting and readability
Refactoring - Code Quality & Consistency
Naming Conventions:
- Enum Cases: Refactored all enum cases to use camelCase (Swift naming guidelines)
RsyncCommandenum casesPushPullCommandenum casesOtherRsyncCommandenum casesPlanSnapshotsenum case names- Day of week enums
- Variable Names: Standardized variable naming for clarity
- Loop variable names improved
- RemoteDataNumbers integer property names
- FileManager variable naming consistency
- Hidden ID handling improvements
Code Organization:
- View Extensions: Extracted complex view logic into separate extension files
- TasksView toolbar → extension file
- QuicktaskView toolbar and logic → extension file
- SidebarMainView extension → separate file
- AddTaskView logic → extension
- SwiftLint Compliance: Extensive SwiftLint cleanup
- Removed inline line_length directives
- Applied proper formatting rules
- Added SwiftLint directives where appropriate
- Updated .swiftlint.yml configuration
Optional Handling:
- Refactored optional handling patterns throughout codebase
- Improved guard statement ordering
- Safe optional unwrapping for URL and date creation
- Safe unwrapping of streamingHandlers before use
Process Execution:
- Refactored Estimate and Execute classes for streaming
- Simplified handler creation patterns
- Removed unnecessary
[weak self]in termination handlers - Refactored ObservableRestore to use RsyncProcessStreaming
- Updated task verification to use streaming process
- Rsync version check refactored to use streaming
Configuration & Data Models:
- Made parameter4 optional to better handle delete flag
- Use DefaultRsyncParameters enum for rsync flags
- Removed unused parameter1-3 from configuration models
- Refactored parameter fields to be optional
- Refactored default value assignment in RemoteDataNumbers
Logging & Error Handling:
- Refactored logging to use errorMessageOnly parameter
- Improved logging consistency throughout
- Silenced debug print statements in streaming handlers
- Gated per-line streaming logs behind DEBUG flag
- Enhanced stats error handling and alert threshold logic
File Management:
- Refactored log deletion to simplify parameters and usage
- Updated file headers and SwiftLint config
- Removed NSLocalizedString from UI labels (simplified)
Removed
- RsyncRealtimeView: Removed obsolete real-time view and related UI references
- Rsync Output Logfile Support: Removed from log views (replaced by streaming)
- RsyncProcess Dependency: Fully migrated to RsyncProcessStreaming
- Legacy Code: Cleaned up unused code and test artifacts
- Obsolete Parameters: Removed unused parameter1-3 fields from configuration models
Fixed
- Guard Statement Order: Fixed ordering and typos in snapshot and restore logic
- Memory Leaks: Released streaming references to prevent retain cycles
- Nil Safety: Added nil checks for arguments in executestreaming
- Threading: Added debug threading checks for streaming handlers
- Actor Isolation: Removed inappropriate @MainActor from TrimOutputFromRsync class
- Typos: Fixed typos and formatting issues in TasksView files
- Deeplink Handling: Refactored URL handling in SidebarMainView
Dependencies
- Swift Package Updates: Multiple updates to Package.resolved
- Updated RsyncProcessStreaming package revisions
- Updated Swift package dependencies to main branch
- Updated RsyncArguments package to branch v283
- Updated RsyncProcess package to v283 branch
[2.8.3] - December 12, 2025 (Build 174)
Added
- Silence Missing Stats: New user-configurable setting to silence error alerts when rsync stats are missing
- Error Control: Improved user-configurable error handling for rsync operations
Changed
- Progress View: Added vertical padding and compact ratio to progress columns
- SwiftLint Configuration: Updated rules and enforcement
- Package Dependencies: Updated all Swift packages to latest stable versions
Fixed
- Stats Handling: Better handling of missing rsync statistics
- Error Variable Naming: Refactored error variable naming in catch blocks for consistency
Version History Summary
Development Timeline
- v2.8.4 (In Development): Major streaming architecture overhaul, comprehensive testing
- v2.8.3 (Dec 12, 2025): User-configurable error handling improvements
- v2.8.2 (Dec 14, 2025): Configuration model enhancements
Migration Notes
From 2.8.2 to 2.8.4
Breaking Changes
None - backward compatible with existing configurations
New Features to Explore
- Argument Validation: Enable in Settings → “Validate arguments”
- Silent Stats Mode: Configure error handling in Settings
- Profile Configuration View: View all configurations in ProfileView
- Improved Testing: Enhanced reliability through comprehensive test coverage
Performance Improvements
- Streaming Output: Real-time progress updates without polling
- Memory Management: Improved handler lifecycle prevents leaks
- Efficient Processing: Event-driven architecture reduces overhead
Development Philosophy
Code Quality Principles
- Safety First: Zero force unwraps, zero force casts
- Modern Swift: Async/await, actors, @MainActor where appropriate
- Professional Logging: OSLog throughout, no print statements
- Clean Architecture: Clear separation of concerns
- Automated Quality: SwiftLint enforcement
- Comprehensive Testing: Unit and UI test coverage
Ongoing Improvements
- Extracting output processing into reusable Swift Package
- Adding unit tests for output processing
- Introducing error telemetry hooks
- Extracting magic constants to centralized configuration
- Standardizing optional handling patterns
For detailed technical documentation, see AIDocuments/CODE_QUALITY_ANALYSIS_COMPREHENSIVE.md and AIDocuments/TODO.md