App-Review-Fix (Guideline 2.1 WeatherKit): - OneShotLocation: deterministisches async resolve() mit 10s-Timeout statt onChange-Lauschen; WetterView lädt bei fehlendem Standort einen Berlin-Fallback → kein ewiges Hängen bei "Hole Standort…", WeatherKit ist immer sichtbar. Offline-Lesen (SwiftData): - CachedRoute/CachedDiaryEntry/CachedImage + CachedAsyncImage: Touren, Tagebuch und Fotos werden cache-first geladen und sind offline verfügbar. - Cache wird bei Logout/401 geleert (RootView), kein Durchschimmern fremder User. Offline-Speichern (Outbox): - PendingRoute/PendingRoutePhoto: Tour inkl. unterwegs hinzugefügter Fotos wird offline lokal gesichert und automatisch hochgeladen (Touren-Tab + App-Start). - Touren-Liste zeigt offline gesicherte Touren mit "wird hochgeladen"-Badge. FinishWalkSheet: - Dismiss-Schutz: Speichern-Dialog lässt sich nicht mehr wegwischen — eine aufgezeichnete Tour geht nicht mehr durch Runterwischen verloren. Wetter: - Ortslabel (Reverse-Geocoding; Fallback "Berlin · Näherung"). - Saubere Offline-Meldung statt rohem networkError. Aufräumen: - Doppeltes "Gassi-Treffen" im Mehr-Tab entfernt. - Veraltete Phase-1/2-Texte neu getextet. - Tote DogsListView gelöscht (Hund-Wechsel läuft über den Heim-Picker).
28 lines
826 B
Swift
28 lines
826 B
Swift
import SwiftUI
|
|
import SwiftData
|
|
|
|
struct MainTabView: View {
|
|
@Environment(AuthSession.self) private var auth
|
|
@Environment(\.modelContext) private var ctx
|
|
|
|
var body: some View {
|
|
TabView {
|
|
HeimView()
|
|
.tabItem { Label("Heim", systemImage: "house.fill") }
|
|
|
|
RoutesListView()
|
|
.tabItem { Label("Touren", systemImage: "map.fill") }
|
|
|
|
TrackingView()
|
|
.tabItem { Label("Aufnehmen", systemImage: "figure.walk") }
|
|
|
|
SettingsView()
|
|
.tabItem { Label("Mehr", systemImage: "person.crop.circle") }
|
|
}
|
|
.task {
|
|
await auth.loadProfile()
|
|
// Offline gesicherte Touren beim Start hochladen (falls online).
|
|
await OfflineCache.syncPendingRoutes(in: ctx)
|
|
}
|
|
}
|
|
}
|