Files
RSync-Studio/README.md
T
2026-09-08 20:06:42 +01:00

58 lines
3.3 KiB
Markdown

# Rsync Studio for macOS
Native SwiftUI rsync job manager for macOS 14+.
## Features
- Persistent saved sync jobs using SwiftData
- Create, edit, duplicate and delete jobs
- Local/mounted-volume destinations
- SSH remote destinations with custom port and SSH key
- Archive, compression, delete, permissions and extended-attribute options
- One-exclusion-per-line rules
- Additional custom rsync arguments
- Dry-run mode
- Run on demand
- Live rsync output
- Cancel active job
- Permanent run history with full command/stdout/stderr/exit code
- Warning before a live `--delete` run
- Automatically prefers `/opt/homebrew/bin/rsync`, then `/usr/local/bin/rsync`, then `/usr/bin/rsync`
## Open and run
Open `Rsync Studio.xcodeproj` in Xcode and press Run.
The app deliberately has App Sandbox disabled because a general rsync utility needs to execute rsync/ssh and access arbitrary source/destination paths. Hardened Runtime remains enabled.
For a current rsync on Apple Silicon:
brew install rsync
SSH authentication works with your normal OpenSSH configuration and keys. If no SSH key is specified on a job, `ssh` uses its normal configuration in `~/.ssh/config`.
## macOS requirement
macOS 14 or later (SwiftData).
## Automation
Rsync Studio supports per-job scheduling (once, hourly, daily, weekly, monthly and custom minute intervals), a month calendar/agenda, and FSEvents-based file watching. Scheduled and watch-triggered runs are silent and always written to History with their trigger source.
Background automation remains active while the application is running, including when its window is minimised, hidden or closed. The Automation settings include a native macOS Launch at Login option so the scheduler and watchers are available after sign-in. Quitting the application stops its in-process scheduler/watchers until it is launched again.
## Production security hardening
This project targets Developer ID signed/notarised direct distribution, not the Mac App Store. Current hardening includes Hardened Runtime, validated rsync executables, protected advanced rsync arguments, non-interactive SSH with timeouts/keepalives, normal SSH host-key verification, private-key/agent authentication only, unattended `--delete` authorisation, local source/destination overlap protection, sanitised/capped run logs, configurable history retention, a privacy manifest, and persistent-store recovery mode.
See `Docs/RELEASE.md` and run `Scripts/security-check.sh` before producing a release archive.
## Professional reliability features
The production build includes job preflight health checks, destination-volume identity protection, minimum-free-space checks, network-aware remote queues, automatic retries for scheduled/watch runs, native failure/success notifications, coalesced FSEvents watching, system-sleep prevention while rsync is active, cancellable Sync All batches, versioned job configuration import/export, filtered/exportable history, diagnostics export, and a signed-manifest update checker. SSH key paths are not exported in job backups.
## Commercial direct-distribution build
On the release Mac, `Scripts/release.sh` creates the Developer ID signed, notarized and stapled DMG plus its SHA-256 checksum. The script never publishes automatically. See `Docs/COMMERCIAL_RELEASE_STAGE2.md`.