Zwei Symbole auf grauem Grund sagen nicht, was zu tun ist. Jetzt: dunkler Verlauf in den Onyx-Farben, Titel, ein Satz darunter, eine Haarlinie und ein Pfeil, der vom Programm zum Programme-Ordner zeigt. Die Fassung steht in der Fußzeile — damit man später weiß, was man installiert hat. Der Hintergrund wird gezeichnet, nicht mitgeliefert: ein Bild im Verzeichnis wäre eine Datei, die niemand mehr anfasst und die bei jeder Farbänderung veraltet. So stehen die Onyx-Farben genau einmal, im selben Werkzeugkasten wie der Rest. Der Aufwand steckt nicht im Bild, sondern in der Reihenfolge: Fenstergröße, Symbolplätze und Hintergrund leben in der .DS_Store des Abbilds. Die schreibt nur der Finder, und nur in ein beschreibbares Abbild. Also erst UDRW, dann über AppleScript einrichten, warten bis der Finder geschrieben hat, dann zusammenpressen. Schlägt die Automatisierung fehl, bleibt das Fenster schlicht statt das Skript abzubrechen. Als Bibliothek, weil beide Wege dasselbe Fenster zeigen sollen — der lokale wie der notarisierte. Und als TIFF mit beiden Auflösungen: als reines PNG wäre der Hintergrund auf einem Retina-Bildschirm doppelt so groß wie das Fenster. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
79 lines
3.0 KiB
Bash
Executable File
79 lines
3.0 KiB
Bash
Executable File
#!/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)."
|