Merge origin/rc175 (macOS signing and notarization) into rc175
Build Packages / Create release (push) Successful in 8s
Build Packages / build:rugnux:linux-aarch64:cuda (push) Successful in 8m53s
Build Packages / build:portable:macos-arm64:nocuda (push) Failing after 10m37s
Build Packages / build:portable:linux-x86_64:nocuda (push) Successful in 14m38s
Build Packages / build:portable:linux-x86_64:cuda (push) Successful in 19m15s
Build Packages / build:jfjoch:ubuntu2204:nocuda (push) Successful in 19m49s
Build Packages / build:portable:windows-x86_64:nocuda (push) Successful in 21m41s
Build Packages / build:jfjoch:rocky9:nocuda (push) Successful in 23m5s
Build Packages / build:jfjoch:rocky8:nocuda (push) Successful in 23m47s
Build Packages / build:portable:windows-x86_64:cuda (push) Successful in 25m48s
Build Packages / build:jfjoch:ubuntu2404:nocuda (push) Successful in 19m39s
Build Packages / HDF5 consumer tests (DIALS, XDS) (push) Successful in 28m52s
Build Packages / Generate python client (push) Successful in 26s
Build Packages / Build documentation (push) Successful in 1m0s
Build Packages / build:jfjoch:rocky8:cuda-sls9 (push) Successful in 20m25s
Build Packages / build:jfjoch:ubuntu2204:cuda (push) Successful in 17m44s
Build Packages / build:jfjoch:rocky8:cuda (push) Successful in 21m46s
Build Packages / build:jfjoch:rocky9:cuda-sls9 (push) Successful in 23m32s
Build Packages / build:jfjoch:rocky9:cuda (push) Successful in 22m48s
Build Packages / build:jfjoch:ubuntu2404:cuda (push) Successful in 18m46s
Build Packages / Unit tests (push) Successful in 1h37m57s
Build Packages / Validation Battery (push) Successful in 37m52s

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-14 18:47:07 +02:00
co-authored by Claude Opus 5.5
8 changed files with 135 additions and 38 deletions
+9 -2
View File
@@ -10,8 +10,7 @@ Gitea release page, and for Linux also in the Jungfraujoch RPM/APT repositories
[Release contents](RELEASE_CONTENTS.md) for what each package contains and what it requires, and
[Deployment](DEPLOYMENT.md) for how to install it. The macOS build needs **macOS 13 (Ventura) or
newer on an Apple Silicon Mac** (M1 and newer; Intel Macs are not supported) and is CPU-only — see
[Release contents ▸ macOS](RELEASE_CONTENTS.md#macos), which also covers opening it for the first
time, as the release is not yet notarized by Apple.
[Release contents ▸ macOS](RELEASE_CONTENTS.md#macos).
## Where it fits among the three analysis tools
@@ -332,3 +331,11 @@ As on Windows, `CMAKE_PREFIX_PATH` (Qt) is the only required flag. To produce th
Qt frameworks and the license notices copied into the app with `macdeployqt`, packed into
`jfjoch-viewer-<version>-macos-arm64.dmg` — run `cpack` in the build directory. What comes out is
described in [Release contents ▸ macOS](RELEASE_CONTENTS.md#macos).
The released image is signed with the project's Apple Developer ID and notarized by Apple. A build of
your own is signed ad hoc, which runs on the machine that built it but is refused by Gatekeeper once
downloaded. To sign with a Developer ID from your own keychain, configure with
`-DJFJOCH_MACOS_SIGNING_IDENTITY=<hash>` before `cpack`, where the hash is the 40 hex digits
`security find-identity -v -p codesigning` prints in front of the certificate's name, then notarize
and staple the image with `tools/notarize_macos.sh build-mac/jfjoch-viewer-*.dmg` (it needs
notarytool credentials stored once on the machine; the script's header says how).
+4 -11
View File
@@ -173,17 +173,10 @@ app onto the *Applications* shortcut next to it. The app is self-contained: the
inside it, and so are the license notices (`Contents/Resources`), which is where a macOS app keeps
them.
**The release is not notarized yet** (that needs an Apple Developer account), so macOS refuses to
open a downloaded copy the first time. On macOS 15 and newer: try to open it once, then allow it in
*System Settings ▸ Privacy & Security* with *Open Anyway*. On macOS 13 and 14, Control-click the app
and choose *Open*. Alternatively, clear the download flag in Terminal:
```
xattr -dr com.apple.quarantine /Applications/jfjoch_viewer.app
```
The same applies to the `rugnux` binary from its `.tgz` — see
[Installing Rugnux](RUGNUX_INSTALL.md#from-the-release-archive).
Both artefacts are signed with the project's Apple Developer ID and **notarized by Apple**, so a
downloaded copy opens like any other Mac application. The disk image carries its notarization ticket;
the `rugnux` binary in the `.tgz` cannot (a bare executable has nowhere to staple one), so the first
run of a freshly downloaded `rugnux` looks the ticket up online and needs an internet connection.
The toolchain of the released macOS artefacts is Xcode (Apple Clang) and Qt 6.11 for macOS,
including Qt Charts; to build the viewer yourself see
+4 -11
View File
@@ -62,17 +62,10 @@ Nothing is written outside that directory, nothing needs root, and several versi
side. To remove it, delete the directory. Put `bin/` on your `PATH` if you want to type `rugnux`
rather than the full path.
> **macOS: the first run is blocked.** The release is not yet notarized by Apple, and a `.tgz`
> downloaded with a browser hands its download flag on to everything `tar` extracts from it, so
> macOS refuses to run `rugnux` ("cannot be opened because the developer cannot be verified"). Clear
> the flag once for the whole directory:
>
> ```
> xattr -dr com.apple.quarantine ~/rugnux-1.0.0
> ```
>
> An archive fetched with `curl` carries no such flag. Unpacking into a directory under your home
> directory (`~/rugnux-<version>`) rather than `/opt` avoids needing `sudo` on a Mac.
> **macOS:** the binary is signed with the project's Apple Developer ID and notarized, so a `.tgz`
> downloaded with a browser runs without further steps; the first run of a freshly downloaded copy
> checks the notarization online. Unpacking into a directory under your home directory
> (`~/rugnux-<version>`) rather than `/opt` avoids needing `sudo` on a Mac.
> **Mixing the two.** If a `rugnux` package is also installed, `/usr/bin/rugnux` will normally win
> on `PATH`. Put the archive's `bin/` first, or call it by its full path, to be sure which one you