From 83f89c126e30b820ec76212b5d728541a23da822 Mon Sep 17 00:00:00 2001 From: Mehul Parmar Date: Wed, 9 Apr 2025 21:15:15 +0530 Subject: [PATCH 1/5] Update - Easy to disable "Report" & "Settings" options in prompts - UserDefaults.standard.set(true, forKey: "pulse-disable-report-issue-prompts") - UserDefaults.standard.set(true, forKey: "pulse-disable-settings-prompts") --- Demo/Sources/iOS/Pulse_Demo_iOSApp.swift | 7 +++++++ .../Features/Console/Views/ConsoleContextMenu.swift | 13 +++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Demo/Sources/iOS/Pulse_Demo_iOSApp.swift b/Demo/Sources/iOS/Pulse_Demo_iOSApp.swift index 95e7afd01..8b473e815 100644 --- a/Demo/Sources/iOS/Pulse_Demo_iOSApp.swift +++ b/Demo/Sources/iOS/Pulse_Demo_iOSApp.swift @@ -25,6 +25,13 @@ private final class AppViewModel: ObservableObject { init() { // This code registers the store with the `RemoteLogger` (important!) LoggerStore.shared = .demo + + /* + //Disable: options -> 1. "Settings", "Get Pulse Pro", "Report Issue" + UserDefaults.standard.set(true, forKey: "pulse-disable-support-prompts") + UserDefaults.standard.set(true, forKey: "pulse-disable-report-issue-prompts") + UserDefaults.standard.set(true, forKey: "pulse-disable-settings-prompts") + */ // RemoteLogger.shared.isAutomaticConnectionEnabled = true diff --git a/Sources/PulseUI/Features/Console/Views/ConsoleContextMenu.swift b/Sources/PulseUI/Features/Console/Views/ConsoleContextMenu.swift index e39343ba5..e9bab75a3 100644 --- a/Sources/PulseUI/Features/Console/Views/ConsoleContextMenu.swift +++ b/Sources/PulseUI/Features/Console/Views/ConsoleContextMenu.swift @@ -25,9 +25,12 @@ struct ConsoleContextMenu: View { ConsoleSortByMenu() } Section { - Button(action: { router.isShowingSettings = true }) { - Label("Settings", systemImage: "gear") + if !UserDefaults.standard.bool(forKey: "pulse-disable-settings-prompts") { + Button(action: { router.isShowingSettings = true }) { + Label("Settings", systemImage: "gear") + } } + if !environment.store.options.contains(.readonly) { Button(role: .destructive, action: environment.removeAllLogs) { Label("Remove Logs", systemImage: "trash") @@ -40,8 +43,10 @@ struct ConsoleContextMenu: View { Label("Get Pulse Pro", systemImage: "link") } } - Button(action: buttonSendFeedbackTapped) { - Label("Report Issue", systemImage: "envelope") + if !UserDefaults.standard.bool(forKey: "pulse-disable-report-issue-prompts") { + Button(action: buttonSendFeedbackTapped) { + Label("Report Issue", systemImage: "envelope") + } } } } label: { From 18b21748ca475cd46b2db8bf13f66e46ee961222 Mon Sep 17 00:00:00 2001 From: Kabir Oberai Date: Thu, 10 Apr 2025 14:53:57 -0400 Subject: [PATCH 2/5] Handle InputStream.read failures --- Sources/Pulse/Helpers/Helpers.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/Pulse/Helpers/Helpers.swift b/Sources/Pulse/Helpers/Helpers.swift index d961d107e..28f202c6b 100644 --- a/Sources/Pulse/Helpers/Helpers.swift +++ b/Sources/Pulse/Helpers/Helpers.swift @@ -88,6 +88,7 @@ extension URLRequest { var bodyStreamData = Data() while bodyStream.hasBytesAvailable { let readData = bodyStream.read(buffer, maxLength: bufferSize) + guard readData != 1 else { return nil } // read failed bodyStreamData.append(buffer, count: readData) } return bodyStreamData From f8e1e2700dc18a68a4a650253ed48b4ae78d10ef Mon Sep 17 00:00:00 2001 From: Kabir Oberai Date: Thu, 10 Apr 2025 15:07:12 -0400 Subject: [PATCH 3/5] Fix constant --- Sources/Pulse/Helpers/Helpers.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Pulse/Helpers/Helpers.swift b/Sources/Pulse/Helpers/Helpers.swift index 28f202c6b..c262add0b 100644 --- a/Sources/Pulse/Helpers/Helpers.swift +++ b/Sources/Pulse/Helpers/Helpers.swift @@ -88,7 +88,7 @@ extension URLRequest { var bodyStreamData = Data() while bodyStream.hasBytesAvailable { let readData = bodyStream.read(buffer, maxLength: bufferSize) - guard readData != 1 else { return nil } // read failed + guard readData != -1 else { return nil } // read failed bodyStreamData.append(buffer, count: readData) } return bodyStreamData From 6dff47cdafe7bcd1232f69707b962cb2e4304a47 Mon Sep 17 00:00:00 2001 From: Kirill Benderskii <> Date: Thu, 17 Apr 2025 16:25:43 +0400 Subject: [PATCH 4/5] Fix crash on AVAssetDownloadTask swizzling --- Sources/Pulse/NetworkLogger/NetworkLogger.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/Pulse/NetworkLogger/NetworkLogger.swift b/Sources/Pulse/NetworkLogger/NetworkLogger.swift index 91c423cf4..b99f21094 100644 --- a/Sources/Pulse/NetworkLogger/NetworkLogger.swift +++ b/Sources/Pulse/NetworkLogger/NetworkLogger.swift @@ -2,6 +2,7 @@ // // Copyright (c) 2020-2024 Alexander Grebenyuk (github.com/kean). +import AVFoundation import Foundation /// A wrapper on top of ``LoggerStore`` that simplifies logging of network requests. @@ -167,6 +168,7 @@ public final class NetworkLogger: @unchecked Sendable { let context = context(for: task) lock.unlock() + guard !task.isKind(of: AVAssetDownloadTask.self) else { return } guard let originalRequest = task.originalRequest else { return } send(.networkTaskCreated(LoggerStore.Event.NetworkTaskCreated( taskId: context.taskId, From 1bc75a94ab62cb1266565d2af627214e30937e5e Mon Sep 17 00:00:00 2001 From: jamie-hyeon_karrot Date: Mon, 1 Sep 2025 18:05:49 +0900 Subject: [PATCH 5/5] fix: Add watchOS to AVAssetDownloadTask availability check AVAssetDownloadTask is not available on watchOS either, not just tvOS. Updated conditional compilation to exclude both tvOS and watchOS. --- Sources/Pulse/NetworkLogger/NetworkLogger.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/Pulse/NetworkLogger/NetworkLogger.swift b/Sources/Pulse/NetworkLogger/NetworkLogger.swift index b99f21094..a37a80d55 100644 --- a/Sources/Pulse/NetworkLogger/NetworkLogger.swift +++ b/Sources/Pulse/NetworkLogger/NetworkLogger.swift @@ -168,7 +168,9 @@ public final class NetworkLogger: @unchecked Sendable { let context = context(for: task) lock.unlock() +#if !os(tvOS) && !os(watchOS) guard !task.isKind(of: AVAssetDownloadTask.self) else { return } +#endif guard let originalRequest = task.originalRequest else { return } send(.networkTaskCreated(LoggerStore.Event.NetworkTaskCreated( taskId: context.taskId,