- Initialize iOS project with 6-tab navigation structure - Configure custom Light/Dark themes and AppColors - Define SwiftData models for Tasks, Tags, Goals, and TrackingRecords - Setup relationships (Super/Sub tags) and cascade delete rules - Implement Observable TrackingEngine for real-time timer updates
27 lines
1.2 KiB
Swift
27 lines
1.2 KiB
Swift
import Foundation
|
|
import Observation
|
|
|
|
@Observable
|
|
final class AppPreferences {
|
|
// Calendar.weekday constants: 1 = Sunday, 2 = Monday … 7 = Saturday
|
|
var themeMode: ThemeMode = ThemeMode(rawValue: UserDefaults.standard.string(forKey: "pref.themeMode") ?? "system") ?? .system {
|
|
didSet { UserDefaults.standard.set(themeMode.rawValue, forKey: "pref.themeMode") }
|
|
}
|
|
|
|
var languageCode: String = UserDefaults.standard.string(forKey: "pref.languageCode") ?? "ko" {
|
|
didSet { UserDefaults.standard.set(languageCode, forKey: "pref.languageCode") }
|
|
}
|
|
|
|
var weekStartDay: Int = (UserDefaults.standard.object(forKey: "pref.weekStartDay") as? Int) ?? 2 {
|
|
didSet { UserDefaults.standard.set(weekStartDay, forKey: "pref.weekStartDay") }
|
|
}
|
|
|
|
var dayStartHour: Int = (UserDefaults.standard.object(forKey: "pref.dayStartHour") as? Int) ?? 0 {
|
|
didSet { UserDefaults.standard.set(dayStartHour, forKey: "pref.dayStartHour") }
|
|
}
|
|
|
|
var dayStartMinute: Int = (UserDefaults.standard.object(forKey: "pref.dayStartMinute") as? Int) ?? 0 {
|
|
didSet { UserDefaults.standard.set(dayStartMinute, forKey: "pref.dayStartMinute") }
|
|
}
|
|
}
|