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.1 KiB
Swift
33 lines
1.1 KiB
Swift
import Foundation
|
|
import Observation
|
|
|
|
/// Brücke vom Siri-Kurzbefehl „Gassi gehen" zur UI.
|
|
///
|
|
/// Der App Intent läuft evtl. außerhalb des App-Prozesses → er setzt ein Flag in
|
|
/// der **App Group**. Beim Aktivwerden liest die App das Flag und stößt über
|
|
/// `pendingStart` den Wechsel auf den Aufnehmen-Tab + den Aufnahme-Start an.
|
|
@Observable
|
|
@MainActor
|
|
final class WalkLauncher {
|
|
static let shared = WalkLauncher()
|
|
private init() {}
|
|
|
|
/// UI-Signal: true → Aufnehmen-Tab wählen und Aufnahme starten.
|
|
var pendingStart = false
|
|
|
|
static let appGroup = "group.app.banyaro.ios"
|
|
static let flagKey = "pendingStartWalk"
|
|
|
|
/// Vom App Intent aufgerufen (cross-process über die App Group).
|
|
static func requestStartViaAppGroup() {
|
|
UserDefaults(suiteName: appGroup)?.set(true, forKey: flagKey)
|
|
}
|
|
|
|
/// Beim Aktivwerden der App das Flag einlösen → `pendingStart`.
|
|
func consumePendingFlag() {
|
|
let defaults = UserDefaults(suiteName: Self.appGroup)
|
|
guard defaults?.bool(forKey: Self.flagKey) == true else { return }
|
|
defaults?.removeObject(forKey: Self.flagKey)
|
|
pendingStart = true
|
|
}
|
|
}
|