rename snaggle
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# GreenshotMac
|
||||
# Snaggle
|
||||
|
||||
A native, Apple-silicon macOS screenshot tool modelled on [Greenshot](https://github.com/greenshot/greenshot)
|
||||
for Windows. Written in Swift with AppKit, SwiftUI and ScreenCaptureKit — no Mono, no Wine,
|
||||
no .NET runtime.
|
||||
|
||||
The original C# sources are kept in `reference-greenshot/` purely as the behavioural reference
|
||||
for the port. GreenshotMac is a rewrite, not a transpile: Greenshot's Win32 foundations
|
||||
for the port. Snaggle is a rewrite, not a transpile: Greenshot's Win32 foundations
|
||||
(GDI+, WinForms, `RegisterHotKey`, the shell tray API) have no direct macOS counterparts.
|
||||
|
||||
## Requirements
|
||||
@@ -17,9 +17,9 @@ for the port. GreenshotMac is a rewrite, not a transpile: Greenshot's Win32 foun
|
||||
## Building
|
||||
|
||||
```bash
|
||||
open GreenshotMac.xcodeproj # then ⌘R
|
||||
open Snaggle.xcodeproj # then ⌘R
|
||||
# or
|
||||
xcodebuild -project GreenshotMac.xcodeproj -scheme GreenshotMac -configuration Release build
|
||||
xcodebuild -project Snaggle.xcodeproj -scheme Snaggle -configuration Release build
|
||||
```
|
||||
|
||||
The target is configured for ad-hoc signing (`CODE_SIGN_IDENTITY = "-"`) so it builds without a
|
||||
@@ -30,9 +30,43 @@ again after some rebuilds.
|
||||
On first launch macOS asks for **Screen Recording** permission
|
||||
(System Settings › Privacy & Security › Screen Recording). Nothing can be captured until it is granted.
|
||||
|
||||
## Installing (for people downloading a release)
|
||||
|
||||
Snaggle is ad-hoc signed rather than notarised, because notarisation requires a paid Apple
|
||||
Developer account. It runs perfectly well; macOS just asks you to confirm it once.
|
||||
|
||||
1. Drag **Snaggle** to Applications and open it. macOS will refuse the first time, saying the
|
||||
developer cannot be verified.
|
||||
2. Open **System Settings → Privacy & Security**, scroll to Security, and click **Open Anyway**
|
||||
next to the message about Snaggle.
|
||||
|
||||
Control-clicking an app and choosing Open no longer bypasses Gatekeeper — Apple removed that
|
||||
shortcut in macOS 15. If you prefer the terminal, `xattr -dr com.apple.quarantine
|
||||
/Applications/Snaggle.app` does the same job in one step.
|
||||
|
||||
Snaggle then needs **Screen Recording** permission (System Settings → Privacy & Security →
|
||||
Screen Recording). Grant it, then quit and reopen the app — macOS only hands the permission to
|
||||
a freshly launched process.
|
||||
|
||||
Snaggle lives in the menu bar, not the Dock: look for the viewfinder icon.
|
||||
|
||||
## Building a release
|
||||
|
||||
```bash
|
||||
./scripts/release.sh # ad-hoc signed, builds build/Snaggle.dmg
|
||||
./scripts/release.sh --developer-id # Developer ID + notarisation (paid account)
|
||||
```
|
||||
|
||||
The DMG contains the app, an Applications symlink and `INSTALL.txt`. For the notarised path,
|
||||
set your team ID in `scripts/ExportOptions.plist` and store a notary credential profile first.
|
||||
|
||||
The app icon is generated, not hand-drawn: edit the colours or shapes in
|
||||
`scripts/make_appicon.py` and run `python3 scripts/make_appicon.py` to rewrite every size in
|
||||
`Snaggle/Resources/Assets.xcassets/AppIcon.appiconset`.
|
||||
|
||||
## Using it
|
||||
|
||||
GreenshotMac is a menu bar app (`LSUIElement`), so it has no Dock icon. The camera icon in the
|
||||
Snaggle is a menu bar app (`LSUIElement`), so it has no Dock icon. The camera icon in the
|
||||
menu bar holds every command.
|
||||
|
||||
Default global hotkeys — Greenshot's PrintScreen-based defaults don't exist on a Mac keyboard,
|
||||
@@ -91,7 +125,7 @@ Supported variables: `${capturetime}`, `${now}`, `${title}`, `${appname}`, `${us
|
||||
|
||||
## How the port maps onto Greenshot
|
||||
|
||||
| Greenshot (Windows) | GreenshotMac |
|
||||
| Greenshot (Windows) | Snaggle |
|
||||
| --- | --- |
|
||||
| `MainForm` + tray icon | `StatusMenuController` (`NSStatusItem`) |
|
||||
| `CaptureForm` | `CaptureOverlay` (one borderless window per display) |
|
||||
@@ -112,6 +146,17 @@ the speech-bubble and SVG/emoji containers, `.gst` templates, and Greenshot's la
|
||||
The destination layer is a single `switch` in `Destinations.swift`, so adding an upload target is
|
||||
a small, self-contained change.
|
||||
|
||||
## Licence
|
||||
## Licence and attribution
|
||||
|
||||
Greenshot is GPL-3.0; this port keeps the same licence.
|
||||
Snaggle is a derivative work of [Greenshot](https://github.com/greenshot/greenshot)
|
||||
(Copyright © 2007-2026 Thomas Braun, Jens Klingen, Robin Krom), reimplemented in Swift for
|
||||
macOS, and is released under the **GNU General Public License v3.0** — the full text is in
|
||||
[`LICENSE`](LICENSE).
|
||||
|
||||
That means anyone may use, study, modify and redistribute Snaggle, including commercially,
|
||||
provided the source stays available under the same licence. If you distribute a built copy of
|
||||
Snaggle, you must also make this source available to whoever receives it.
|
||||
|
||||
"Greenshot" is a trademark of the Greenshot project and is used here only to describe Snaggle's
|
||||
origin. Snaggle is not affiliated with or endorsed by the Greenshot project, and it does not use
|
||||
their name, logo or branding for itself.
|
||||
|
||||
Reference in New Issue
Block a user