App Group group.app.banyaro.ios verbindet App und Widget-Extension (Entitlements in beiden Targets, CODE_SIGN_ENTITLEMENTS fürs Widget). Home-Screen-Widget (D): - BanYaroHomeWidget (klein + mittel): Tagesfoto, Hundename, nächster Termin. - App schreibt beim Heim-Laden einen Snapshot (HomeWidgetData) in die App Group und triggert WidgetCenter-Reload; Snapshot wird bei Logout/401 geleert. Siri-/Kurzbefehl (E): - StartWalkIntent „Gassi gehen" + AppShortcutsProvider (öffnet die App). - WalkLauncher überbrückt Intent → UI: Flag in der App Group, beim Aktivwerden eingelöst → Aufnehmen-Tab + Aufnahme-Start (TrackingView.startFresh). - MainTabView mit Tab-Auswahl (Tags), BanYaroGoApp liest scenePhase.
33 lines
1,021 B
Swift
33 lines
1,021 B
Swift
import SwiftUI
|
|
import SwiftData
|
|
import WidgetKit
|
|
|
|
struct RootView: View {
|
|
@Environment(AuthSession.self) private var auth
|
|
@Environment(\.modelContext) private var ctx
|
|
|
|
var body: some View {
|
|
Group {
|
|
if auth.isLoggedIn {
|
|
MainTabView()
|
|
} else {
|
|
LoginView()
|
|
}
|
|
}
|
|
// Bei User-Wechsel (Logout oder 401) alle nutzerbezogenen lokalen Daten
|
|
// leeren — Offline-Cache UND Widget-Snapshot —, damit nie Touren,
|
|
// Tagebuch, Fotos oder der Hund eines vorigen Users durchschimmern.
|
|
.onReceive(NotificationCenter.default.publisher(for: .userDidLogout)) { _ in
|
|
clearOnUserChange()
|
|
}
|
|
.onReceive(NotificationCenter.default.publisher(for: .apiUnauthorized)) { _ in
|
|
clearOnUserChange()
|
|
}
|
|
}
|
|
|
|
private func clearOnUserChange() {
|
|
OfflineCache.clearAll(in: ctx)
|
|
HomeWidgetStore.clear()
|
|
WidgetCenter.shared.reloadAllTimelines()
|
|
}
|
|
}
|