import Foundation /// Kanonische Cross-App-Keychain-Group für alle nativen mana-e.V.-Apps. /// /// Apps, die diese Group im `keychain-access-groups` Entitlement haben /// und denselben String als `ManaAppConfig.keychainAccessGroup` /// liefern, teilen ihre Auth-Tokens auf demselben Device. Ein Login in /// einer App bedeutet damit: alle anderen mana-Apps starten direkt im /// `.signedIn`-Status. /// /// **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). /// /// 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. public func manaSharedKeychainAccessGroup() -> String { ManaSharedKeychainGroup }