import SwiftUI import OSLog struct LogScreen: View { @State private var entries: [OSLogEntryLog] = [] @State private var previousOccurenceDate: Date? private var store: OSLogStore! init() { do { store = try OSLogStore(scope: .currentProcessIdentifier) } catch { } } var body: some View { VStack { ScrollView(.vertical) { LazyVStack { ForEach(entries, id: \.self) { log in Text(log.composedMessage) } } } } .toolbar { ToolbarItem(placement: .topBarTrailing) { Button { loadLogEntries() } label: { Image(systemName: "arrow.triangle.2.circlepath") } } ToolbarItem(placement: .topBarTrailing) { Button { Logger.default.info("NEW LOG") } label: { Image(systemName: "plus.circle") } } } } private func loadLogEntries() { DispatchQueue.global().async { do { let position = { defer { previousOccurenceDate = Date.now } if let previousOccurenceDate { return store.position(date: previousOccurenceDate) } else { return store.position(timeIntervalSinceLatestBoot: 0) } }() let newEntries: [OSLogEntryLog] = try store .getEntries(at: position) .compactMap { $0 as? OSLogEntryLog } self.entries.append(contentsOf: newEntries) } catch { Logger.default.critical("Cannot extract logs from OSLogStore: \(error)") } } } }