- Copy only (right-click -> Copy): write to clipboard without auto-pasting or hiding the window - Color swatches: hex/rgb/hsl entries show a preview chip - SQLite WAL + synchronous=NORMAL so the UI can read while the clipboard poller writes - Memoize list rows (React.memo) so selection/focus changes don't re-render every row's preview - Add docs/GUIDE.md (living install + usage doc), docs/SHARING.md, docs/TESTING.md, docs/LAUNCH-AT-LOGIN.md, docs/PRODUCT.md, CHANGELOG.md, ROADMAP.md - Add homelab Gitea Actions CI (.gitea/workflows/ci.yml) + gitleaks allowlist - Bump version to 0.2.0
91 lines
3.7 KiB
Markdown
91 lines
3.7 KiB
Markdown
# Sharing maCopy with someone else
|
|
|
|
## Where the app lives on your Mac
|
|
|
|
| What | Path |
|
|
|---|---|
|
|
| Source code | `~/Documents/code/maCopy` (this repo) |
|
|
| Built `.app` (after `npm run tauri build`) | `src-tauri/target/release/bundle/macos/maCopy.app` |
|
|
| Built `.dmg` installer | `src-tauri/target/release/bundle/dmg/maCopy_<version>_aarch64.dmg` |
|
|
| Clipboard database (your data, never shipped) | `~/Library/Application Support/maCopy/clipboard.db` |
|
|
| Vault/secrets | none — maCopy has no network calls and no accounts |
|
|
|
|
The `.app` and `.dmg` are build **artifacts**: they're regenerated by
|
|
`npm run tauri build` and are git-ignored. Nothing under `target/` is
|
|
committed to the repo.
|
|
|
|
## Fastest way to share it today (unsigned)
|
|
|
|
1. Build it: `npm run tauri build`
|
|
2. Grab the DMG: `src-tauri/target/release/bundle/dmg/maCopy_0.1.0_aarch64.dmg`
|
|
3. Send that file (AirDrop, USB, file share — whatever).
|
|
|
|
### What the other person needs to do
|
|
|
|
The build is **ad-hoc signed** (`codesign -dv` shows `Signature=adhoc`,
|
|
`TeamIdentifier=not set`) — not signed with an Apple Developer ID and not
|
|
notarized. macOS Gatekeeper will refuse to open it with the default
|
|
"Apple could not verify… malware" dialog on a *different* Mac (your own
|
|
Mac trusts it already because you built it there). This is normal for any
|
|
indie app that isn't notarized — it's not a maCopy-specific bug.
|
|
|
|
The recipient has two options:
|
|
|
|
**Option A — right-click override (easiest, no Terminal)**
|
|
1. Copy `maCopy.app` to `/Applications`.
|
|
2. Right-click (or Control-click) the app → **Open** → confirm **Open** in
|
|
the dialog. This works even when double-click is blocked, and only
|
|
needs to be done once.
|
|
|
|
**Option B — clear the quarantine flag (Terminal)**
|
|
```bash
|
|
xattr -cr /Applications/maCopy.app
|
|
```
|
|
Removes the "downloaded from the internet" quarantine attribute that
|
|
triggers Gatekeeper's warning, then the app opens normally.
|
|
|
|
Either way, once it's launched once and allowed, it behaves like any
|
|
other menu-bar app — including **Launch at login** in Settings.
|
|
|
|
## The "real" way — signed + notarized (for wider distribution)
|
|
|
|
If you want to share this with people who shouldn't have to right-click
|
|
or run Terminal commands (e.g. distributing beyond just you/family), you
|
|
need:
|
|
|
|
1. An Apple Developer ID ($99/yr Apple Developer Program).
|
|
2. A "Developer ID Application" certificate in your keychain.
|
|
3. Tauri's bundler config filled in (`tauri.conf.json` → `bundle.macOS.signingIdentity`)
|
|
or a manual `codesign --deep --sign "Developer ID Application: ..."` step.
|
|
4. Notarization via `xcrun notarytool submit ... --wait` (or `tauri-plugin-updater`'s
|
|
signing helpers), then `xcrun stapler staple maCopy.app`.
|
|
|
|
This is tracked as a ship-blocker in [docs/PRODUCT.md](PRODUCT.md) — not
|
|
done yet because it requires an Apple Developer account, which is a cost/
|
|
identity decision for you to make, not something that can be automated
|
|
away.
|
|
|
|
## Other distribution ideas (once signed)
|
|
|
|
| Channel | Effort | Notes |
|
|
|---|---|---|
|
|
| Direct DMG (current) | none | Works today; Gatekeeper friction as above |
|
|
| Private Gitea release / file share | low | Attach the DMG to a Gitea release on your own instance |
|
|
| Homebrew cask (`brew install --cask`) | medium | Needs a signed release + a cask formula in a tap |
|
|
| Mac App Store | high | Sandbox rules make background clipboard monitoring + AppleScript paste tricky; likely not worth it for this app |
|
|
|
|
## Sharing the source instead of a binary
|
|
|
|
If the other person can build it themselves (has Rust + Node), just give
|
|
them repo access:
|
|
|
|
```bash
|
|
git clone gitea@git.levkin.ca:ilia/maCopy.git
|
|
cd maCopy
|
|
npm install
|
|
npm run tauri build
|
|
```
|
|
|
|
No signing needed for this path since it's *their* build on *their* Mac —
|
|
same Gatekeeper trust maCopy already has on yours.
|