feat(auth): DEBUG-Auto-Login (Memoro-Pattern)
Bei lokalen Xcode-Run-Builds wird beim Start automatisch eingeloggt wenn der Keychain leer ist. Spart das manuelle Login bei jedem Re-Install via Xcode. - Sources/Core/Auth/DebugCredentials.swift — #if DEBUG-gewrappte Founder-Credentials (tills95@gmail.com / Aa-123456789) - Sources/Core/Auth/AuthClient+EnsureSignedIn.swift — Extension ensureSignedIn() prüft .signedOut → signIn() in DEBUG - RootView.task ruft auth.ensureSignedIn() — Release-Builds No-Op (Release/TestFlight/App-Store bleiben unverändert, User muss manuell einloggen) Pattern 1:1 von memoro-native (gleiches File-Layout + Klassennamen). Build 9 → 10. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
505aa9db19
commit
33101d703d
4 changed files with 52 additions and 12 deletions
|
|
@ -9,15 +9,20 @@ struct RootView: View {
|
|||
@State private var pendingDeepLinkSlug: String?
|
||||
|
||||
var body: some View {
|
||||
switch auth.status {
|
||||
case .signedIn:
|
||||
mainTabs
|
||||
.onOpenURL { url in handle(url: url) }
|
||||
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in
|
||||
if let url = activity.webpageURL { handle(url: url) }
|
||||
}
|
||||
case .unknown, .signedOut, .signingIn, .error:
|
||||
LoginView()
|
||||
Group {
|
||||
switch auth.status {
|
||||
case .signedIn:
|
||||
mainTabs
|
||||
.onOpenURL { url in handle(url: url) }
|
||||
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in
|
||||
if let url = activity.webpageURL { handle(url: url) }
|
||||
}
|
||||
case .unknown, .signedOut, .signingIn, .error:
|
||||
LoginView()
|
||||
}
|
||||
}
|
||||
.task {
|
||||
await auth.ensureSignedIn()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
18
Sources/Core/Auth/AuthClient+EnsureSignedIn.swift
Normal file
18
Sources/Core/Auth/AuthClient+EnsureSignedIn.swift
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import ManaCore
|
||||
|
||||
extension AuthClient {
|
||||
/// Stellt sicher, dass der User eingeloggt ist. Nur in DEBUG-Builds
|
||||
/// aktiv: wenn die Session nach `bootstrap()` `.signedOut` ist,
|
||||
/// wird automatisch mit den DEBUG-Credentials angemeldet. In
|
||||
/// Release-Builds No-Op — User muss manuell einloggen.
|
||||
///
|
||||
/// Vorbild: memoro-native — wird in `RootView.task` aufgerufen.
|
||||
func ensureSignedIn() async {
|
||||
#if DEBUG
|
||||
if case .signedOut = status {
|
||||
Log.auth.notice("DEBUG auto-login: signing in with DebugCredentials")
|
||||
await signIn(email: DebugCredentials.email, password: DebugCredentials.password)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
17
Sources/Core/Auth/DebugCredentials.swift
Normal file
17
Sources/Core/Auth/DebugCredentials.swift
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#if DEBUG
|
||||
/// Dev-only Auto-Login-Credentials.
|
||||
///
|
||||
/// **Nur in DEBUG-Builds aktiv** — der ganze File ist hinter
|
||||
/// `#if DEBUG` gewrapped und wird in Release-Builds (TestFlight/
|
||||
/// App-Store) nicht kompiliert. Wird beim App-Start von
|
||||
/// `AuthClient.ensureSignedIn()` verwendet, falls die Session-Token
|
||||
/// im Keychain abgelaufen oder leer sind — damit Till während der
|
||||
/// Entwicklung nicht jedes Mal manuell einloggen muss.
|
||||
///
|
||||
/// Identisches Pattern wie `memoro-native/Sources/Core/Auth/
|
||||
/// DebugCredentials.swift`.
|
||||
enum DebugCredentials {
|
||||
static let email = "tills95@gmail.com"
|
||||
static let password = "Aa-123456789"
|
||||
}
|
||||
#endif
|
||||
|
|
@ -55,7 +55,7 @@ targets:
|
|||
path: Sources/Resources/Info.plist
|
||||
properties:
|
||||
CFBundleShortVersionString: "0.1.0"
|
||||
CFBundleVersion: "9"
|
||||
CFBundleVersion: "10"
|
||||
CFBundleDevelopmentRegion: de
|
||||
CFBundleDisplayName: Cardecky
|
||||
LSApplicationCategoryType: "public.app-category.education"
|
||||
|
|
@ -111,7 +111,7 @@ targets:
|
|||
properties:
|
||||
CFBundleDisplayName: Als Karte speichern
|
||||
CFBundleShortVersionString: "0.1.0"
|
||||
CFBundleVersion: "9"
|
||||
CFBundleVersion: "10"
|
||||
NSExtension:
|
||||
NSExtensionPointIdentifier: com.apple.share-services
|
||||
NSExtensionPrincipalClass: $(PRODUCT_MODULE_NAME).ShareViewController
|
||||
|
|
@ -144,7 +144,7 @@ targets:
|
|||
properties:
|
||||
CFBundleDisplayName: Cardecky Widget
|
||||
CFBundleShortVersionString: "0.1.0"
|
||||
CFBundleVersion: "9"
|
||||
CFBundleVersion: "10"
|
||||
NSExtension:
|
||||
NSExtensionPointIdentifier: com.apple.widgetkit-extension
|
||||
entitlements:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue