All Versions
14
Latest Version
Avg Release Cycle
56 days
Latest Release
4 days ago

Changelog History
Page 1

  • v5.2.3 Changes

    June 10, 2026

    What's Changed

    • ๐Ÿ›  fix: use opaque graphics context when resizing the app icon by @tsushanth in #371
    • ๐Ÿ›  fix: RichTextView share/copy produces empty content when textView is nil by @mehmetozkn in #369

    ๐Ÿ†• New Contributors

    Full Changelog : 5.2.2...5.2.3

  • v5.2.2 Changes

    May 17, 2026

    What's Changed

    • ๐Ÿ›  Fix SIGTRAP in NetworkTaskEntity.state(in:) when session UUID is NULL by @bdolewski in #368
    • Speed up text search in NetworkInspector for large response bodies by @rusik in #367
    • Recreate blobs directory after store schema migration by @rusik in #366
    • ๐Ÿ‘Œ Improve Liquid Glass support

    ๐Ÿ†• New Contributors

    Full Changelog : 5.2.1...5.2.2

  • v5.2.1 Changes

    April 20, 2026
    • ๐Ÿ›  Fix a crash on iOS 26 Simulator where UIImage(named:) raises NSInternalInconsistencyException ("Need an imageRef") for app icon assets that can't be rasterized for the current trait (#364)
  • v5.2 Changes

    April 19, 2026

    ๐Ÿš€ This release introduces improvements to search, filters, session management, performance, and more. See them in action in the recording.

    Distribution

    • โœ‚ Remove CocoaPods support
    • โœ‚ Remove pre-built binaries (subject to change if there is a strong demand)

    Search

    • โšก๏ธ Rewrite the console search engine around a new ConsoleSearchSession that owns a private-queue Core Data context and runs fetching, matching, and live-update observation entirely off the main thread. Results are incremental, cancelable, and batched through a short flush interval, so the UI no longer hitches on large stores โ€” tested end-to-end on stores with 1M+ messages
    • Preserve grouping while searching the console: search results are now rendered under the same section headers as the main list and share collapse state, so switching into and out of search no longer flattens the view
    • Bring the full search suggestions experience to PulseUI: the search bar now surfaces both recent searches and filter suggestions (domains, paths, status codes, methods) sourced from the store index, and tapping a suggested filter applies it directly to the active criteria. Previously this was only available in Rift, and PulseUI showed recent searches only
    • โž• Add simplified search tokens so you can quickly filter by domain, path, status code, and HTTP method (work-in-progress)
    • โž• Add a separate "Query" search scope so you can search URL query strings independently of the path
    • ๐Ÿ”€ Merge "Original Request Headers" and "Current Request Headers" into a single "Request Headers" scope
    • ๐Ÿ”„ Change the default network search scopes to include the response body alongside the URL โ€” searching for a JSON value now works out of the box
    • ๐Ÿ”Š Redesign the search scopes picker: it's now sectioned by Logs and Network, with per-section "All / None" toggles and a "Reset to Defaults" action
    • 0๏ธโƒฃ Scope changes within a search session are temporary. Use the new "Save as Default" action in the scopes picker to persist your preferred selection across app launches
    • Stop resetting scopes and string search options when the search sheet is dismissed
    • ๐Ÿ”Š The scopes pill now shows a meaningful label ("All", "Logs", "Network", the scope title, โ€ฆ) instead of just a count
    • Extend StringSearchOptions: add a new "Multiple Words" kind that matches strings containing every space-separated word, and "Matching" / "Matching Word" matching rules for exact and word-boundary matches. Reword the existing rules for consistency ("Containing", "Starting With", "Ending With"). Applied uniformly across every search surface
    • ๐Ÿ›  Fix a bug where the URL scope silently stripped the query string before searching

    Filters

    • Bring the advanced filters into the main console: every network and message predicate is now available
    • โž• Add "Status Code", "Content Type", "Duration", "Request Body Size", and "Request State" to the built-in network filters, organised into Response, Request, and Advanced sections
    • โž• Add "Path" to the "Field" options in custom network filters, backed by a new stored attribute on NetworkTaskEntity, and organize the field picker into groups with section headers for easier navigation
    • โž• Add "Error Domain" and "Task Description" to the "Field" options in custom filters
    • Auto-save recent filters: the last-used filter combinations are now remembered and shown in a dedicated "Recent Filters" section, letting you re-apply previous criteria in one tap
    • ๐Ÿ‘Œ Improve filters on watchOS: replace the Status Code range picker with a standard Picker offering predefined options (Any, Success 2xx, Redirects 3xx, Client Errors 4xx, Server Errors 5xx, All Errors), and remove Duration, Response Body Size, and Request Body Size filters that didn't fit the small screen. The available network filters on watchOS are now: Status Code, Content Type, HTTP Method, Custom Filters, Hosts, Task Type, Request State, Response Source, and Redirect. Message filters: Custom Filters, Levels, and Labels.

    Sessions

    • โž• Add a "Sessions" shortcut to the console toolbar for quick access to the sessions picker. When a non-current session is selected, the icon is highlighted as a reminder
    • โž• Add a "Show Previous Session" footer to the console list: appears at the bottom of the list and loads the next older session on tap
    • Redesign session cells: session numbering, a "Current" badge for the active session, message counts, and relative timestamps for today's sessions (e.g. "5 min ago")
    • โž• Add a context menu to session cells with a preview showing the session date, app version, and UUID
    • โž• Add a "Remove Logs" swipe action and context-menu item for the current session that clears its logs without deleting the session itself
    • ๐Ÿšš Move the Share swipe action to the leading edge and Delete to the trailing edge in the session list
    • โž• Add "Select" mode to the session list. Each date-grouped section now shows a "Select All" / "Deselect All" button in Select mode, so you can grab every session for a given day in one tap. The selection count is shown in the navigation title and actions live on the bottom bar โ€” which now also appears correctly in read-only stores
    • Bring the full sessions picker to watchOS and tvOS โ€” previously these platforms only showed a truncated list

    Console list & toolbar

    • ๐Ÿ”Š Redesign the console heading: the navigation title is now inline and doubles as a menu for switching between "All", "Logs", and "Network", with a subtitle showing the current count (e.g. "21 Tasks"). While searching, the title reflects the search state
    • โž• Add "Select" mode to the console list: enter via the context menu or a two-finger swipe gesture, pick multiple log entries, and share them using the toolbar at the bottom. Selection works in search mode too
    • Consolidate the regular and search toolbars into a single ConsoleToolbarView. Filters and the "Only Errors" toggle now live on the leading edge in both modes; the search scopes pill and string-options menu appear on the trailing edge only while searching
    • โž• Add "Sort By" and "Group By" pills to the console toolbar (non-search mode). Sort By exposes the field and ascending/descending order; Group By is wired all the way through ConsoleDataSource so the list is now rendered as proper sections in PulseUI on iOS for the first time. Both menus remain available from the "More" menu
    • โž• Add a quick-reset xmark.circle to the Filters, Sort By, and Group By pills: when non-default, tap to reset in one tap
    • ๐Ÿ‘‰ Make grouped sections in the console list collapsible: tap a section header to toggle expansion, with a chevron indicating the current state. The group name is followed by the item count
    • Persist manually collapsed console sections across launches, scoped to the current (mode, groupBy). "Collapse All" / "Expand All" stay in-memory only
    • ๐Ÿšš Move "Filters" out of the inline navigation bar items and into the "More" menu
    • ๐Ÿ’… Unify all console toolbar pills (Filters, Only Errors, Sort By, Group By, search scopes/options) on a shared layout so they share the same height and visual style

    Customisation API (ConsoleDelegate)

    • โž• Add ConsoleDelegate protocol for per-task customization of ConsoleView. ConsoleView.init now accepts an optional delegate that can return a different ConsoleListDisplaySettings for each task. The protocol is @MainActor and uses UserSettings.shared.listDisplayOptions as the default
    • โž• Add ConsoleDelegate.console(contentViewFor:) to replace the task cell's main content area (method + URL) with a caller-supplied SwiftUI view. When non-nil, it supersedes ConsoleListDisplaySettings.ContentSettings entirely; the header and footer still render from settings as usual
    • โž• Add ConsoleDelegate.console(responseBodyViewFor:) to replace the built-in response body viewer with a caller-supplied SwiftUI view. Use it to plug in a protobuf decoder (via the integrator's own SwiftProtobuf types) or any other format the default FileViewer doesn't understand
    • โž• Add ConsoleDelegate.console(inspectorViewFor:) to inject a custom SwiftUI section into the network inspector (e.g. decoded GraphQL variables, parsed protobuf). Rendered after the built-in response/metrics sections
    • โž• Add ConsoleDelegate.console(contextMenuFor:) to inject app-specific items (e.g. "Replay", "Open in admin panel") into the task cell's context menu and into the network inspector's "More" menu
    • โž• Add ConsoleDelegate.console(redact:field:for:) for masking sensitive strings (auth tokens, PII) before they are rendered. Applied to URL, host, header, task-description, and caller-supplied strings in the task cell as well as the inspector's navigation title. A new ConsoleRedactionField enum identifies which field is about to be rendered
    • ๐Ÿ— Make RichTextView and RichTextViewModel public so integrators building custom responseBodyViewFor: views can reuse the standard text-viewer chrome (search, line numbers, link detection, share). Construct a RichTextViewModel(string:contentType:) from an NSAttributedString (optionally produced by the existing attributed-string helpers) and wrap it in RichTextView
    • โž• Add ConsoleListDisplaySettings.ContentSettings.customText to render a caller-supplied string verbatim in place of the default method + URL content (e.g. a GraphQL operation name). When set, showMethod and components are ignored
    • โž• Add ConsoleListDisplaySettings.TaskField.url(components:) to render the full URL, or a specific URLComponent when provided, in header/footer fields
    • โž• Add ConsoleListDisplaySettings.TaskField.custom(String) to render a caller-supplied string verbatim in header/footer fields
    • โž• Add NetworkLogger.ContentType.isProtobuf for matching application/x-protobuf and application/grpc content types

    ๐ŸŽ Performance

    • โšก๏ธ Optimize the console list rendering path: cache formatted timestamps on LoggerMessageEntity / NetworkTaskEntity so each...
  • v5.1.4 Changes

    April 15, 2025

    What's Changed

    ๐Ÿ†• New Contributors

  • v5.1.3 Changes

    February 25, 2025

    What's Changed

    ๐Ÿ†• New Contributors

    Full Changelog : 5.1.2...5.1.3

  • v5.1.2 Changes

    October 11, 2024

    What's Changed

    • ๐Ÿ›  Fix an issue with isAutomaticConnectionEnabled not starting the browser the first time it's enabled
    • ๐Ÿ›  Fix crash when exporting HAR file by @rounak in #299
    • ๐Ÿ›  Fix concurrency issue in StoreDetailsViewModel by @ejensen in #302
    • โšก๏ธ Update the deep search. It will now show all search scopes found and only one match per scope. You can tap on a match to see the scope with a prepopulated search query to see the remaining items.
    • ๐Ÿ›  Fix an issue with deep search not working for request and response headers

    ๐Ÿ†• New Contributors

  • v5.1.1 Changes

    September 20, 2024

    What's Changed

    • Implement deep JSON redaction by @briancordanyoung in #292
    • ๐Ÿ›  Fix a CoreData multithreading issue in LoggerStore.info() by @ejensen in #293
    • ๐Ÿ›  Fix ConsoleView focus state clipping on tvOS by @ejensen in #295
    • โช Revert the removal of the NetworkLoggerโ€™s convenience initializer by @ejensen in #294

    ๐Ÿ†• New Contributors

  • v5.1 Changes

    September 17, 2024

    Appearance

    0๏ธโƒฃ Pulse 5.1 features an enhanced design for console cells with improved information hierarchy. It has multiple tweaks, but the main change is how the URLs are formatted. By default, the console will now show only the path with a host as a secondary field below it.

    Screenshot 2024-09-15 at 7 44 04โ€ฏPM

    Customization

    ๐Ÿ“š The new cells are now also fully customizable using the new ConsoleListDisplaySettings type. And if you are using Pulse Pro (available on App Store), you can configure them using the new "Appearance" settings screen.

    Screenshot 2024-09-15 at 7 45 33โ€ฏPM

    CocoaPods

    ๐Ÿš€ With CocoaPods going into maintenance mode, new Pulse releases will no longer be published to CocoaPods Trunk. However, the Podpsec files will continue to be available for now, and you can install Pulse using CocoaPods by pointing directly to this repo.

    Other Changes

    • โž• Add new convenience APIs for accessing messages and tasks stored in the logger: LoggerStore/message(sortDescriptors:predicate:) and LoggerStore/tasks(sortDescriptors:predicate:). Deprecate allTasks and allMessages.
    • ๐Ÿ›  Fix an issue with thumbnails for image responses being too aggressively compressed and add LoggerStore.ThumbnailOptions to make it customizable
    • โšก๏ธ Update image response viewer to show thumbnails at a 2x resolution
    • Display thumbnail resolution in the response viewer
    • ๐Ÿ›  Fix an issue with app icons send too blurry to the Pulse Pro app
    • ๐Ÿ‘Œ Improve support for .inMemory store option, which is now guaranteed to not write anything on disk, including the store manifest. It also no longer requires the .create option like the regular store and the storeURL parameter can point to anything, including /dev/null.
    • ๐Ÿ—„ Deprecate UserSettings.displayHeaders (user new ConsoleListDisplaySettings instead)
    • ๐Ÿ›  Fix xcprivacy warnings when used with SwiftPM, thanks to @alphatroya
    • ๐ŸŽ Performance optimizations
  • v5.0 Changes

    September 05, 2024

    Announcement

    ๐ŸŽ Pulse macOS and iOS apps are now available on the App Store. Learn more in the announcement.

    Requirements

    • Swift 5.10 (Xcode 15.3)
    • ๐ŸŽ iOS 15, tvOS 15, macOS 12, watchOS 8, visionOS 1

    ๐Ÿ”„ Changes

    Pulse SDK 5.0 greatly simplifies the integration experience and introduces two new ways for capturing network traffic.

    • Option 1 (Quickest) Add a new PulseProxy module for automatic capturing of all network traffic from the app with a single line โ€“ the quickest way to try Pulse

      importPulseProxy#if DEBUGNetworkLogger.enableProxy()#endif

    • Option 2 (Recommended) Add new URLSessionProtocol and URLSessionProxy as a new recommended way to track network traffic and enable other Pulse features like response mocking

      if DEBUGletsession:URLSessionProtocol=URLSessionProxy(configuration:.default)#elseletsession:URLSessionProtocol=URLSession(configuration:.default)#endif

    • ๐Ÿ“š Learn more about the new network logging method in the fully rewritten Getting Started and Network Logging & Debugging guides

    • โž• Add compatibility with Swift 6 (not official until Xcode 16 RC ships)

    • โฌ‡๏ธ Reduce the size of the framework by nearly 15%

    • โž• Add RemoteLogger.isAutomaticConnectionEnabled property to allow automatic connection to Pulse apps

    • โž• Add and document the new public MockingURLProtocol used to enable network debugging features of Pulse apps. It is registered automatically with the new URLSessionProxy

    • โž• Add @MainActor to a few main-thread confined types like RemoteLogger

    • โž• Add new UserSettings properties: isRemoteLoggingHidden and allowedShareStoreOutputs,

    • 0๏ธโƒฃ Increase the default LoggerStore size limit from 128 MB to 256 MB and response body size limit from 5 MB to 8 MB

    • โž• Add support for changing LoggerStore.shared.configuration to make it easier to configure the default store

    • NetworkLogger.shared and LoggerStore.shared can now be both replaced with your custom instances and in any order with any other operations.

    • โšก๏ธ UpdateRemoteLogger.Connection to perform work on the background queue so that Pulse now runs almost no code on the main queue

    • ๐Ÿ‘‰ Make LoggerStore.info an async method

    • ๐Ÿ›  Fix export of PDF in dark mode (#288), thanks to @ilyalehchylin

    • LoggerStore/export no longer returns LoggerStore.Info

    • โž• Add .create and .sweep options to the default LoggerStoreinit`

    • โœ‚ Remove the console for MacOS as it is no longer feasible to maintain the reusable code between Pulse SDK and Pulse standalone app for Mac. If you are using the console for macOS, please consider using the standalone Pulse app.

    • โœ‚ Remove some of the text-based search filters, which wasnโ€™t the right UX for a phone. In upcoming versions, it will be replaced with convenient controls.

    • โœ‚ Remove deprecated LoggerStore.copy(to:) and LoggerStore.pins

    • โœ‚ Remove support for exporting store as a package (DocumentType.package)

    • ๐Ÿ› Bug fixes and performance improvements