diff --git a/Sources/ManaCore/Auth/SharedKeychainGroup.swift b/Sources/ManaCore/Auth/SharedKeychainGroup.swift index 7bec138..709cf47 100644 --- a/Sources/ManaCore/Auth/SharedKeychainGroup.swift +++ b/Sources/ManaCore/Auth/SharedKeychainGroup.swift @@ -8,29 +8,34 @@ import Foundation /// einer App bedeutet damit: alle anderen mana-Apps starten direkt im /// `.signedIn`-Status. /// -/// Wird der Wert geändert, müssen ALLE Apps in dieser Liste: -/// - `project.yml` `keychain-access-groups` Entitlement aktualisieren -/// - `AppConfig.keychainAccessGroup` aktualisieren -/// - **plus** Apple-Dev-Portal-Capability "Keychain Sharing" mit -/// dem neuen Group-Namen aktivieren (sonst OSStatus -34018 -/// errSecMissingEntitlement beim ersten Token-Write) +/// **Mit Team-ID-Prefix `QP3GLU8PH3.`:** Apple's `Security.framework` +/// macht einen exakten String-Match zwischen `kSecAttrAccessGroup` +/// (was Swift hier übergibt) und dem `keychain-access-groups`- +/// Entitlement des Bundles (das `$(AppIdentifierPrefix)` zur Build- +/// Zeit auf den Team-Prefix expandiert). Ohne Prefix in der Konstante +/// matched Sec-Framework nicht und gibt `errSecMissingEntitlement` +/// (OSStatus -34018) zurück — beobachtet 2026-05-18 auf werdrobe + +/// nutriphi (iPhone + Mac). /// -/// Apps, die Cross-App-SSO **nicht** wollen (z.B. wenn der Login -/// bewusst getrennt bleiben soll), setzen `keychainAccessGroup: nil` -/// und tragen kein `keychain-access-groups` Entitlement. -public let ManaSharedKeychainGroup = "ev.mana.session" +/// Pendant zum entitlement-Eintrag in `project.yml`: +/// ``` +/// keychain-access-groups: +/// - $(AppIdentifierPrefix)ev.mana.session +/// ``` +/// +/// Apps, die Cross-App-SSO **nicht** wollen, setzen +/// `keychainAccessGroup: nil` und tragen kein +/// `keychain-access-groups` Entitlement. +public let ManaSharedKeychainGroup = "QP3GLU8PH3.ev.mana.session" + +/// Suffix-Variante ohne Team-Prefix — für Konstanten-Bedarf in +/// Entitlement-Files, wo `$(AppIdentifierPrefix)` zur Build-Zeit +/// vorgestellt wird. +public let ManaSharedKeychainGroupSuffix = "ev.mana.session" /// Convenience-Hilfe für SwiftUI-Apps: liefert den Wert, den /// `ManaAppConfig.keychainAccessGroup` bekommen muss, damit Cross-App- -/// SSO greift. iOS resolved den String automatisch über die -/// Team-ID des installierten Profiles — `$(AppIdentifierPrefix)` muss -/// im Entitlement-File stehen, im Code reicht der bloße Name. -/// -/// Pendant zum entitlement-Eintrag: -/// ``` -/// keychain-access-groups: -/// - $(AppIdentifierPrefix)ev.mana.session -/// ``` +/// SSO greift. public func manaSharedKeychainAccessGroup() -> String { ManaSharedKeychainGroup }