fix: 22 audit fixes — concurrency, memory, performance, accessibility
- Move 7 Data(contentsOf:) calls off MainActor via Task.detached (BootstrapService) - Batch-fetch N+1 queries in sync merge loops (CanonicalSyncService) - Predicate-based gamesForTeam fetch instead of fetching all games (DataProvider) - Proper Sendable on RouteInfo with nonisolated(unsafe) polyline (LocationService) - [weak self] in BGTaskScheduler register closures (BackgroundSyncManager) - Cache tripDays, routeWaypoints as @State with recompute (TripDetailView) - Remove unused AnyCancellable, add Task lifecycle management (TripDetailView) - Cache sportStadiums, recentVisits as stored properties (ProgressViewModel) - Dynamic Type fonts replacing hardcoded sizes (OnboardingPaywallView) - Accessibility labels/hints on stadium picker, date picker, map, stats, settings toggle, and day cards Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -63,10 +63,10 @@ final class BackgroundSyncManager {
|
||||
BGTaskScheduler.shared.register(
|
||||
forTaskWithIdentifier: Self.refreshTaskIdentifier,
|
||||
using: nil
|
||||
) { task in
|
||||
) { [weak self] task in
|
||||
guard let task = task as? BGAppRefreshTask else { return }
|
||||
Task { @MainActor in
|
||||
await self.handleRefreshTask(task)
|
||||
await self?.handleRefreshTask(task)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,10 +74,10 @@ final class BackgroundSyncManager {
|
||||
BGTaskScheduler.shared.register(
|
||||
forTaskWithIdentifier: Self.processingTaskIdentifier,
|
||||
using: nil
|
||||
) { task in
|
||||
) { [weak self] task in
|
||||
guard let task = task as? BGProcessingTask else { return }
|
||||
Task { @MainActor in
|
||||
await self.handleProcessingTask(task)
|
||||
await self?.handleProcessingTask(task)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user