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
|
|
|
|
/// Vom App-Target geschrieben, vom Widget-Target gelesen — über die App Group
|
|
/// `group.app.banyaro.ios` geteilt. Bewusst in beiden Targets identisch
|
|
/// dupliziert (statt Shared/-pbxproj-Handarbeit); JSON-kompatibel.
|
|
struct HomeWidgetData: Codable {
|
|
var dogName: String
|
|
var photoJPEG: Data?
|
|
var nextAppointment: String?
|
|
var diaryCount: Int?
|
|
var updatedAt: Date
|
|
}
|
|
|
|
enum HomeWidgetStore {
|
|
static let appGroup = "group.app.banyaro.ios"
|
|
static let key = "homeWidgetData"
|
|
|
|
static func save(_ data: HomeWidgetData) {
|
|
guard let defaults = UserDefaults(suiteName: appGroup),
|
|
let encoded = try? JSONEncoder().encode(data) else { return }
|
|
defaults.set(encoded, forKey: key)
|
|
}
|
|
|
|
static func load() -> HomeWidgetData? {
|
|
guard let defaults = UserDefaults(suiteName: appGroup),
|
|
let data = defaults.data(forKey: key) else { return nil }
|
|
return try? JSONDecoder().decode(HomeWidgetData.self, from: data)
|
|
}
|
|
|
|
static func clear() {
|
|
UserDefaults(suiteName: appGroup)?.removeObject(forKey: key)
|
|
}
|
|
}
|