41 lines
1.7 KiB
Swift
41 lines
1.7 KiB
Swift
import Foundation
|
|
|
|
/// Kanonische Cross-App-Keychain-Group für alle nativen mana-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
|
|
}
|