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)."