#!/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" source "$ROOT/Scripts/lib-dmg.sh" make_pretty_dmg "$APP" "$DMG" "$APP_NAME" "$BUILD" "$VERSION" 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)."