Zwei Anzeigen für einen Handgriff sind eine zu viel

Apples eigene Einblendung lässt sich aushängen, ohne Root und ohne SIP
anzufassen: `com.apple.OSDUIHelper` liegt in der GUI-Domäne des angemeldeten
Benutzers, nicht im System. `launchctl bootout` dort hinein genügt.

Standardmäßig aus, denn es verschwindet **jede** Einblendung — auch Helligkeit
und Feststelltaste, und für die Feststelltaste hat Onyx keinen Ersatz. Beim
Beenden wird wieder eingehängt: eine Einstellung darf nicht überleben, was sie
eingestellt hat.

Dazu zwei Fehler im Anlernen behoben. Der Posenname stand als roher Schlüssel da
— die Zeichenketten liegen im Bündel von `FaceProvider`, gesucht wurden sie im
Hauptbündel. Und „Gesicht vergleichen" blieb nach dem Anlernen grau, weil
`isEnrolled` bei jedem Aufruf den Schlüsselbund las: richtig, aber für SwiftUI
unsichtbar, weil es nichts gab, woran eine Ansicht die Änderung hätte bemerken
können.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-09-05 22:26:41 +02:00
co-authored by Claude Opus 5
parent fd29df51cf
commit a3399d3a96
9 changed files with 221 additions and 8 deletions
@@ -41,10 +41,24 @@ public final class LockController {
/// Ob Gesichtserkennung überhaupt benutzt werden soll.
public var usesFaceUnlock = true
public init() {}
public init() {
refreshEnrollment()
}
/// Ob ein Gesicht angelernt ist.
public var isEnrolled: Bool { !store.load().isEmpty }
///
/// **Gespeichert und nicht berechnet.** Als berechnete Eigenschaft las sie
/// bei jedem Aufruf den Schlüsselbund — richtig, aber für SwiftUI
/// unsichtbar: es gab nichts, woran eine Ansicht hätte merken können, dass
/// gerade ein Gesicht angelernt wurde. Der Schalter „Gesicht vergleichen"
/// blieb deshalb grau, bis man das Fenster neu öffnete.
public private(set) var isEnrolled = false
/// Liest nach, ob ein Gesicht hinterlegt ist. Nach dem Anlernen und nach
/// dem Vergessen zu rufen.
public func refreshEnrollment() {
isEnrolled = !store.load().isEmpty
}
// MARK: - Sperren