Skip to content

Commit b3e85e0

Browse files
committed
Fix concurrency warnings
1 parent 42f7b0a commit b3e85e0

9 files changed

+18
-6
lines changed

Sources/PulseUI/Features/Console/ConsoleDataSource.swift

+9-4
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ protocol ConsoleDataSourceDelegate: AnyObject {
1717
func dataSource(_ dataSource: ConsoleDataSource, didUpdateWith diff: CollectionDifference<NSManagedObjectID>?)
1818
}
1919

20+
@MainActor
2021
final class ConsoleDataSource: NSObject, NSFetchedResultsControllerDelegate {
2122
weak var delegate: ConsoleDataSourceDelegate?
2223

@@ -134,12 +135,16 @@ final class ConsoleDataSource: NSObject, NSFetchedResultsControllerDelegate {
134135

135136
// MARK: NSFetchedResultsControllerDelegate
136137

137-
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
138-
delegate?.dataSource(self, didUpdateWith: nil)
138+
nonisolated func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
139+
MainActor.assumeIsolated {
140+
delegate?.dataSource(self, didUpdateWith: nil)
141+
}
139142
}
140143

141-
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeContentWith diff: CollectionDifference<NSManagedObjectID>) {
142-
delegate?.dataSource(self, didUpdateWith: diff)
144+
nonisolated func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChangeContentWith diff: CollectionDifference<NSManagedObjectID>) {
145+
MainActor.assumeIsolated {
146+
delegate?.dataSource(self, didUpdateWith: diff)
147+
}
143148
}
144149

145150
// MARK: Predicate

Sources/PulseUI/Features/Console/ConsoleEnvironment.swift

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import SwiftUI
1111
///
1212
/// - warning: It's marked with `ObservableObject` to make it possible to be used
1313
/// with `@StateObject` and `@EnvironmentObject`, but it never changes.
14+
@MainActor
1415
final class ConsoleEnvironment: ObservableObject {
1516
let title: String
1617
let store: LoggerStore

Sources/PulseUI/Features/Console/List/ConsoleListViewModel.swift

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Pulse
88
import Combine
99
import SwiftUI
1010

11+
@MainActor
1112
final class ConsoleListViewModel: ConsoleDataSourceDelegate, ObservableObject, ConsoleEntitiesSource {
1213
#if os(iOS) || os(visionOS)
1314
@Published private(set) var visibleEntities: ArraySlice<NSManagedObject> = []

Sources/PulseUI/Features/Console/Views/ConsoleRouterView.swift

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import CoreData
77
import Pulse
88
import Combine
99

10+
@MainActor
1011
final class ConsoleRouter: ObservableObject {
1112
#if os(macOS)
1213
@Published var selection: ConsoleSelectedItem?

Sources/PulseUI/Features/Filters/ConsoleFilterViewModel.swift

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Pulse
77
import Combine
88
import SwiftUI
99

10+
@MainActor
1011
final class ConsoleFiltersViewModel: ObservableObject {
1112
@Published var mode: ConsoleMode = .all
1213
@Published var options = ConsoleDataSource.PredicateOptions()

Sources/PulseUI/Features/Filters/ConsoleFiltersView.swift

+1
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ struct ConsoleFiltersView_Previews: PreviewProvider {
157157
}
158158

159159
@available(iOS 15, macOS 13, visionOS 1.0, *)
160+
@MainActor
160161
private func makePreview(isOnlyNetwork: Bool) -> some View {
161162
let store = LoggerStore.mock
162163
let entities: [NSManagedObject] = try! isOnlyNetwork ? store.allTasks() : store.allMessages()

Sources/PulseUI/Features/Search/ConsoleSearchViewModel.swift

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Pulse
77
import CoreData
88
import Combine
99

10+
@MainActor
1011
protocol ConsoleEntitiesSource {
1112
var events: PassthroughSubject<ConsoleUpdateEvent, Never> { get }
1213
var entities: [NSManagedObject] { get }
@@ -20,6 +21,7 @@ final class ConsoleSearchBarViewModel: ObservableObject {
2021
}
2122

2223
@available(iOS 15, visionOS 1.0, *)
24+
@MainActor
2325
final class ConsoleSearchViewModel: ObservableObject, ConsoleSearchOperationDelegate {
2426
var isSearchActive: Bool = false {
2527
didSet {

Sources/PulseUI/Features/Search/Services/ConsoleSearchOperation.swift

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ final class ConsoleSearchOperation: @unchecked Sendable {
3030
private let hasLogFilters: Bool
3131
private let hasNetworkFilers: Bool
3232

33-
@MainActor
3433
weak var delegate: ConsoleSearchOperationDelegate?
3534

3635
init(entities: [NSManagedObject],

Sources/PulseUI/Features/Search/Services/ConsoleSearchSuggestionsService.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import CoreData
1010
import Combine
1111

1212
@available(iOS 15, visionOS 1.0, *)
13+
@MainActor
1314
struct ConsoleSearchSuggestionsViewModel {
1415
let searches: [ConsoleSearchSuggestion]
1516
let filters: [ConsoleSearchSuggestion]
@@ -19,7 +20,7 @@ struct ConsoleSearchSuggestionsViewModel {
1920
}
2021
}
2122

22-
struct ConsoleSearchSuggestionsContext {
23+
struct ConsoleSearchSuggestionsContext: Sendable {
2324
let searchText: String
2425
let index: LoggerStoreIndex
2526
let parameters: ConsoleSearchParameters

0 commit comments

Comments
 (0)