Files
onyx/project.yml
Guido Schmit 7f6ded7de0 Menüleistensymbol: Konturfassung statt Silhouette
Das Glyph des App-Icons besteht aus deckenden Flächen. Als Template-Bild — der
einzige Weg, macOS zum Einfärben zu bewegen — verschmolzen die Facetten zu
einer flachen Silhouette, weil dabei nur der Alphakanal zählt.

MenuBarIcon.svg ist als Kontur gezeichnet: zwischen den Linien ist nichts, also
bleibt beim Einfärben die Struktur erhalten. Das Symbol wird damit automatisch
weiß auf dunkler und schwarz auf heller Menüleiste — ohne zweite Datei für den
zweiten Fall.

Die ebenfalls angebotene helle Flächenfassung wird damit überflüssig und ist
nicht eingecheckt: sie wäre auf einer hellen Menüleiste unsichtbar, und eine
ungenutzte Alternative im Repo lädt später zum Verwechseln ein.

Der Kopierschritt für quartz.svg entfällt — die Datei liegt jetzt direkt im
App-Target und wird ohne Umweg als Ressource eingebunden.
2026-08-10 21:17:13 +02:00

92 lines
3.6 KiB
YAML

name: Onyx
options:
bundleIdPrefix: com.scarriffleservices
deploymentTarget:
macOS: "26.0"
createIntermediateGroups: true
groupSortPosition: top
settings:
base:
DEVELOPMENT_TEAM: PP34X97WS3
SWIFT_VERSION: "6.0"
MARKETING_VERSION: "0.1.0"
CURRENT_PROJECT_VERSION: "1"
ENABLE_HARDENED_RUNTIME: YES
# Der MediaRemote-Adapter bringt ein ad-hoc signiertes Framework mit, das
# der mit Team-Zertifikat signierte Host sonst nicht laden darf.
OTHER_CODE_SIGN_FLAGS: "--deep"
SWIFT_STRICT_CONCURRENCY: complete
# Xcode lagert im Debug-Build den Programmcode in eine eigene dylib aus
# (für SwiftUI-Vorschauen). Das Hauptprogramm ist dann nur noch ein Rumpf —
# und TCC ordnet Berechtigungsanfragen dem Rumpf zu, der weder Info.plist
# noch Entitlements trägt. Ergebnis: requestFullAccessToEvents() liefert
# kommentarlos false, ohne dass je ein Dialog erscheint.
ENABLE_DEBUG_DYLIB: NO
packages:
OnyxKit:
path: Packages/OnyxKit
targets:
Onyx:
type: application
platform: macOS
sources:
- path: Onyx
dependencies:
- package: OnyxKit
product: OnyxCore
- package: OnyxKit
product: OnyxDesign
- package: OnyxKit
product: OnyxNotch
- package: OnyxKit
product: OnyxWidgetKit
- package: OnyxKit
product: OnyxMenuBar
- package: OnyxKit
product: CalendarProvider
- package: OnyxKit
product: WeatherProvider
- package: OnyxKit
product: MediaProvider
postBuildScripts:
# Der MediaRemote-Adapter wird aus dem mitgelieferten Quellcode gebaut,
# nicht als fertige Binary eingecheckt: so ist nachvollziehbar, was da
# läuft, und die Ad-hoc-Signatur passt zum restlichen Bundle.
#
# Er darf NICHT gelinkt werden. Geladen wird er von /usr/bin/perl, einem
# berechtigten Systemprogramm — im eigenen Prozess greift Apples
# Entitlement-Prüfung und es käme gar nichts an.
- name: MediaRemote-Adapter bauen und beilegen
script: |
OUT="$BUILT_PRODUCTS_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/Vendor" \
"$SRCROOT/Scripts/build-mediaremote-adapter.sh"
inputFiles:
- $(SRCROOT)/Scripts/build-mediaremote-adapter.sh
outputFiles:
- $(BUILT_PRODUCTS_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Vendor/mediaremote-adapter.pl
# Das Menüleistensymbol soll das Glyph aus dem App-Icon zeigen, nicht die
# abgerundete Kachel mit Verlauf. actool kompiliert das .icon-Bündel zu
# .icns und Assets.car und legt nichts Lesbares ins Bundle — und eine
# einzelne Datei daraus lässt sich nicht als Ressource referenzieren.
# Deshalb kopieren statt duplizieren: es bleibt bei einer Quelldatei.
outputFiles:
- $(BUILT_PRODUCTS_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/quartz.svg
settings:
base:
PRODUCT_BUNDLE_IDENTIFIER: com.scarriffleservices.onyx
INFOPLIST_FILE: Onyx/Info.plist
CODE_SIGN_ENTITLEMENTS: Onyx/Onyx.entitlements
CODE_SIGN_STYLE: Automatic
# Kein App-Sandbox: der privilegierte Helper, IOKit und der
# MediaRemote-Adapter sind damit unvereinbar. Der App-Group-Container
# bleibt trotzdem erreichbar — siehe docs/spikes/D-appgroup.md.
ENABLE_APP_SANDBOX: NO
ENABLE_USER_SCRIPT_SANDBOXING: NO
COMBINE_HIDPI_IMAGES: YES
# Icon-Composer-Bündel (Onyx/AppIcon.icon). actool übernimmt daraus
# alle Größen und die Transluzenz-Darstellung von macOS 26.
ASSETCATALOG_COMPILER_APPICON_NAME: AppIcon