Skip to content

Build from source

macSCP is a Swift package. You need Swift 6 (swift-tools 6.0) and macOS 15 or newer.

Terminal window
swift build -c release

The binary lands at .build/release/macscp-cli — the app’s CLI companion — and scripts/package-app assembles a runnable macSCP.app under dist/.

Terminal window
swift test

The unit suite runs everywhere. Two suites are gated behind environment variables because they need more than a plain checkout:

Terminal window
docker compose -f docker/test-server/compose.yml up -d
MACSCP_ITEST=1 swift test

The Docker rig brings up SSH (two servers, for remote-to-remote transfers), MinIO (S3), and an Apache/mod_dav WebDAV server with a Basic, a Digest, and a TLS vhost — the TLS certificate is generated fresh at container start and never committed. A Nextcloud container sits behind a compose profile, since it exists only to produce one real PROPFIND response the WebDAV parser’s test fixture is checked against — it stays out of the normal up -d so that command remains fast:

Terminal window
docker compose -f docker/test-server/compose.yml --profile nextcloud up -d nextcloud
VariableWhat it gates
MACSCP_ITEST=1Integration tests against the Docker SSH/S3/WebDAV rig.
MACSCP_KEYCHAIN=1Tests that write to the real macOS Keychain.
MACSCP_PIPE_TIMING=1One gated case that counts pipe chunks from the CLI’s line-buffered stdout.
MACSCP_SATURATION=1One test that parks the whole GCD global queue to prove the subprocess runner’s readers need no thread — run it alone, it cannot share a parallel run.

Issues and pull requests are welcome at github.com/NoiXdev/macSCP. The project uses Conventional Commits; the commit messages and all code comments are English.