- Replace Core Data with SwiftData for iOS 18+ - Create MoodEntryModel as @Model class replacing MoodEntry entity - Create SharedModelContainer for App Group container sharing - Create DataController with CRUD extensions replacing PersistenceController - Update all views and view models to use MoodEntryModel - Update widget extension to use SwiftData - Remove old Core Data files (Persistence*.swift, .xcdatamodeld) - Add EntryType enum with all entry type cases - Fix widget label truncation with proper spacing and text scaling 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
42 lines
1.1 KiB
Swift
42 lines
1.1 KiB
Swift
//
|
|
// BGTask.swift
|
|
// Feels (iOS)
|
|
//
|
|
// Created by Trey Tartt on 1/12/22.
|
|
//
|
|
|
|
import Foundation
|
|
import BackgroundTasks
|
|
|
|
class BGTask {
|
|
static let updateDBMissingID = "com.tt.ifeel.dbUpdateMissing"
|
|
|
|
@MainActor
|
|
class func runFillInMissingDatesTask(task: BGProcessingTask) {
|
|
BGTask.scheduleBackgroundProcessing()
|
|
|
|
task.expirationHandler = {
|
|
task.setTaskCompleted(success: false)
|
|
}
|
|
|
|
DataController.shared.fillInMissingDates()
|
|
task.setTaskCompleted(success: true)
|
|
}
|
|
|
|
class func scheduleBackgroundProcessing() {
|
|
let request = BGProcessingTaskRequest(identifier: BGTask.updateDBMissingID)
|
|
request.requiresNetworkConnectivity = false
|
|
request.requiresExternalPower = false
|
|
|
|
var runDate = Calendar.current.date(byAdding: .day, value: 1, to: Date())
|
|
runDate = Calendar.current.date(bySettingHour: 0, minute: 1, second: 0, of: runDate!)
|
|
request.earliestBeginDate = runDate
|
|
|
|
do {
|
|
try BGTaskScheduler.shared.submit(request)
|
|
} catch {
|
|
print("Could not schedule image fetch: (error)")
|
|
}
|
|
}
|
|
}
|