From d90352a86b5920c7af1698b67eea26b7324b66bd Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Fri, 14 Aug 2026 12:52:17 +0200 Subject: [PATCH] =?UTF-8?q?DMG=20f=C3=BCr=20den=20eigenen=20Rechner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der App Store ist für Onyx kein Weg: er verlangt die Sandbox, und ohne die gäbe es keinen privilegierten Helfer, keinen IOKit-Zugriff, keine Audio-Taps — also weder Lüftersteuerung noch Ladelimit, Hardwaremesswerte oder Mixer. Das steht so in der Planung, war aber nie als Skript hinterlegt, das man ohne Zertifikatsantrag laufen lassen kann. Scripts/local-dmg.sh füllt die Lücke: Release-Build mit dem Entwicklerzertifikat, dieselben drei Prüfungen wie beim Verteilen — Signatur, App-Group, Kennung des Helfers — und ein DMG mit Verweis auf den Programme-Ordner. Der Unterschied zu release.sh ist nicht die Verpackung, sondern die Signatur. Auf dem Mac, auf dem das Zertifikat zuhause ist, läuft es; auf einem fremden meldet Gatekeeper einen unbekannten Entwickler. Für die Weitergabe bleibt es bei Developer ID und Notarisierung. Co-Authored-By: Claude Opus 5 --- .../OnyxNotch/TriggerAreaSettings.swift | 2 +- Scripts/local-dmg.sh | 86 +++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100755 Scripts/local-dmg.sh diff --git a/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift b/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift index e148a2e..756534a 100644 --- a/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift +++ b/Packages/OnyxKit/Sources/OnyxNotch/TriggerAreaSettings.swift @@ -1,4 +1,4 @@ -import SwiftUI + import SwiftUI import ImageIO import OnyxDesign diff --git a/Scripts/local-dmg.sh b/Scripts/local-dmg.sh new file mode 100755 index 0000000..6ef392b --- /dev/null +++ b/Scripts/local-dmg.sh @@ -0,0 +1,86 @@ +#!/bin/bash +# Baut ein DMG für **den eigenen Rechner**. +# +# Der Unterschied zu `release.sh` ist nicht die Verpackung, sondern die +# Signatur: hier wird mit dem Entwicklerzertifikat signiert, das ohnehin im +# Schlüsselbund liegt. Das genügt auf dem Mac, auf dem dieses Zertifikat +# zuhause ist — und **nur** dort. Auf einem fremden Rechner meldet Gatekeeper +# einen unbekannten Entwickler und lässt die App nicht starten. +# +# Für die Weitergabe braucht es `Scripts/release.sh`, ein Zertifikat +# „Developer ID Application" und die Notarisierung. Dieses Skript ist der +# kurze Weg dorthin, nicht der Ersatz. + +set -euo pipefail +export DEVELOPER_DIR=${DEVELOPER_DIR:-/Applications/Xcode.app/Contents/Developer} + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +BUILD="$ROOT/build/local" +APP_NAME="Onyx" + +cd "$ROOT" + +VERSION=$(awk -F'"' '/MARKETING_VERSION/ {print $2; exit}' project.yml) +DMG="$BUILD/${APP_NAME}-${VERSION}-lokal.dmg" + +fail() { echo "✗ $*" >&2; exit 1; } +step() { echo; echo "── $* ──"; } + +step "Vorprüfung" +security find-identity -v -p codesigning | grep -q "Apple Development" \ + || fail "Kein Signaturzertifikat im Schlüsselbund." +command -v xcodegen >/dev/null || fail "xcodegen fehlt (brew install xcodegen)" +echo "✓ Zertifikat und xcodegen vorhanden" + +step "Projekt erzeugen" +xcodegen generate + +step "Tests" +(cd Packages/OnyxKit && swift test 2>&1 | tail -2) + +# Release statt Debug: gebaut wird, was man auch benutzen will — optimiert, +# ohne Testgerüst und ohne die Bremsen aus dem Debugger. +step "Bauen (Release)" +rm -rf "$BUILD" +xcodebuild -project Onyx.xcodeproj -scheme Onyx -configuration Release \ + -derivedDataPath "$BUILD/dd" build \ + | grep -E "error:|BUILD SUCCEEDED" || fail "Bauen fehlgeschlagen" + +APP="$BUILD/dd/Build/Products/Release/$APP_NAME.app" +[ -d "$APP" ] || fail "Kein fertiges Programm unter $APP" + +# Die drei Punkte, an denen dieses Projekt eine Sonderbehandlung hat. Was hier +# durchrutscht, merkt man erst, wenn eine Funktion still fehlt. +step "Prüfen" +codesign --verify --deep --strict "$APP" || fail "Signatur unvollständig" + +codesign -d --entitlements - "$APP" 2>/dev/null | grep -q "application-groups" \ + || fail "App-Group fehlt in den Entitlements — Calendarr wäre unerreichbar" + +HELPER_ID=$(codesign -d --verbose=2 "$APP/Contents/MacOS/OnyxHelper" 2>&1 \ + | awk -F= '/^Identifier=/ {print $2}') +[ "$HELPER_ID" = "com.scarriffleservices.onyx.helper" ] \ + || fail "Helfer trägt die Kennung „$HELPER_ID“ statt com.scarriffleservices.onyx.helper" +echo "✓ Signatur, Entitlements und Helfer-Kennung in Ordnung" + +step "DMG bauen" +STAGE="$BUILD/stage" +rm -rf "$STAGE"; mkdir -p "$STAGE" +cp -R "$APP" "$STAGE/" +# Der Verweis auf den Programme-Ordner: ohne ihn zieht man die App irgendwohin, +# und der privilegierte Helfer verlangt einen festen Ort. +ln -s /Applications "$STAGE/Applications" + +rm -f "$DMG" +hdiutil create -volname "$APP_NAME $VERSION" -srcfolder "$STAGE" \ + -ov -format UDZO "$DMG" | tail -1 + +echo +echo "✓ Fertig: $DMG" +echo +echo " Zum Installieren: DMG öffnen, Onyx auf „Programme“ ziehen." +echo " Danach einmal aus /Applications starten — der Lüfterhelfer meldet sich" +echo " neu an, weil er am Ort des Programms hängt." +echo +echo " Dieses DMG läuft nur auf diesem Mac. Für die Weitergabe:" +echo " Scripts/release.sh (Developer ID + Notarisierung)."