fix(auth): ManaSharedKeychainGroup mit explizitem Team-ID-Prefix
Bug: Sec-Framework gibt -34018 (errSecMissingEntitlement) beim ersten Keychain-Write — auf iPhone UND Mac, in werdrobe + nutriphi + vermutlich allen 12 Apps mit der heutigen Migration. Root-Cause: Apple's `Security.framework` macht einen exakten String-Match zwischen `kSecAttrAccessGroup` (was Swift übergibt) und dem `keychain-access-groups`-Entitlement des Bundles (das `$(AppIdentifierPrefix)` zur Build-Zeit auf den Team-Prefix expandiert). - Bundle-Entitlement: "QP3GLU8PH3.ev.mana.session" (mit Prefix) - Swift-Code: "ev.mana.session" (ohne Prefix) - → no match → -34018 Vor meiner Migration hatten die Apps explizit "QP3GLU8PH3. ev.mana.<app>" als String (mit Prefix), beobachtbar im alten herbatrium/wordeck/nutriphi-AppConfig. Mein Migrations-Skript hat das Prefix wegrationalisiert ohne zu prüfen. Fix: `ManaSharedKeychainGroup` = "QP3GLU8PH3.ev.mana.session" hardcoded. Plus `ManaSharedKeychainGroupSuffix` = "ev.mana.session" für Konstantanbedarf in Entitlement-Files (wo $(AppIdentifierPrefix) zur Build-Zeit vorgestellt wird). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d4cff490c4
commit
573c93c104
1 changed files with 24 additions and 19 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue