Initial commit
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user