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.
38 lines
1.2 KiB
Swift
38 lines
1.2 KiB
Swift
import SwiftUI
|
|
import SwiftData
|
|
|
|
struct MainTabView: View {
|
|
@Environment(AuthSession.self) private var auth
|
|
@Environment(\.modelContext) private var ctx
|
|
@State private var selectedTab = 0
|
|
private let launcher = WalkLauncher.shared
|
|
|
|
var body: some View {
|
|
TabView(selection: $selectedTab) {
|
|
HeimView()
|
|
.tabItem { Label("Heim", systemImage: "house.fill") }
|
|
.tag(0)
|
|
|
|
RoutesListView()
|
|
.tabItem { Label("Touren", systemImage: "map.fill") }
|
|
.tag(1)
|
|
|
|
TrackingView()
|
|
.tabItem { Label("Aufnehmen", systemImage: "figure.walk") }
|
|
.tag(2)
|
|
|
|
SettingsView()
|
|
.tabItem { Label("Mehr", systemImage: "person.crop.circle") }
|
|
.tag(3)
|
|
}
|
|
.task {
|
|
await auth.loadProfile()
|
|
// Offline gesicherte Touren beim Start hochladen (falls online).
|
|
await OfflineCache.syncPendingRoutes(in: ctx)
|
|
launcher.consumePendingFlag()
|
|
}
|
|
.onChange(of: launcher.pendingStart) { _, pending in
|
|
if pending { selectedTab = 2 }
|
|
}
|
|
}
|
|
}
|