Pulse 2.0 (Beta 1)
Pre-release
Pre-release
- The documentation for this release is generated by DocC
- Increase minimum supported platforms to iOS 13.0, watchOS 7.0, tvOS 13.0, macOS 11.0
PulseUI
- Add support for pending requests. The requests are now added to the console as soon as they are started. This is also supported by the remote logger and Pulse Pro - #88
- Add a way to store and display decoding errors (works with
JSONDecoder
or any other decoder). Decoding errors are highlighted directly in the downloaded response JSON. - Add a new Insights screen that analyses network traffic and presents some key insights in a visual way (takes advantage of Swift Charts)
- Add a new store sharing screen where you can specify the output format, the time range, and the log level of the exported messages.
- Add an all-new store details view (takes advantage of Swift Charts)
- Add support for download and upload tasks
- Completely redesigned Request Summary page. You can now see both the "original" and the "current" request.
- Display parsed query items in the request summary (iOS, macOS)
- Display response size directly in the message and request lists and also clearly marked responses coming from the cache
- You can now open the Response view fullscreen (iOS)
- Optimize response and message viewer to use less vertical space during search (iOS)
- When you open a network log, it now shows the Response screen by default, which is what you want most of the time (iOS)
- (iOS, macOS) Add simple syntax-highlighting for HTML
- "Hosts" network filter now allows multi-selection and some hosts are now displayed inline in the filters panel
- Update HTML/Markdown export to match the new Summary screen and add request body to the output (all)
- Add an option to switch between original and current requests in Summary (iOS, macOS)
- Add "Redirect", "Response Size", "Task Type", and "Response Source" network filters (iOS, macOS)
- Use triple-column layout on iPad (iOS 14+)
- Add "Time Period" filter to network filters
FileViewer
now renders big files lazily- (watchOS) Add "Only Errors" and "Only Network" filters directly on the home page
- (watchOS) Remove a way to pin messages
- (watchOS) Fix an issue where if the data section was empty, it'll still display a "Show" button taking up valuable vertical space
- (watchOS) Move the "Remove Messages" button and sharing options to a new Settings page
- (watchOS) Reduce binary size (TODO: by how much?)
- (tvOS) Red binary size
- (iOS, macOS) Add an option to copy "key" to KeyValuePairView context menu
- (iOS 16) context menu for KeyValuePairView now shows full value
- (iOS) Add an option to preview HTML response in a web view
- Free all of the memoized memory when closing the console
- Improve image viewer: add image border, display size, and type
- Add "Domain", "Redirect" and "Duration" fields to the request summary
PulseCore
- Add significant space optimizations that add up to up to 90% reduction in the total space used by
LoggerStore
. The biggest improvement comes from the fact that the response blobs are now stored in compressed formats and decoded on-demand when you view them. And small blobs (<32 KB) are now stored directly in the database: SQLite is great at storing small blobs. The format for the unstructured data stored in the DB was also improved: for example, URLSessionTask metrics now take up to 50% less space. And finally the database now uses DELETE journal_mode. - The logger is now optimized for working with images. It now stores only image thumbnails using HEIF. This can save 95% or more space depending on the original image size.
- Switch to SHA1 from SHA256 for generating response body hashes. It’s about 30% faster and uses just 40 characters for file names for blobs instead of 64 characters for SHA256.
- Reduce the store memory usage. When you just write the logs and network requests in the background it now consumes zero memory.
- Add a way to store decoding errors (
NetworkLogger/isWaitingForDecoding
andNetworkLogger/logTask(_:didFinishDecodingWith:)
) - You can now get store info (
LoggerStore/info
) for the current store, not just for the archives. - Sweeps are now performed much less regularly (used to be on every app launch)
- Add
copy(to:predicate)
that allows you to create a copy of the store but only with messages that pass the given predicate. - Add
LoggerStore.destroy()
for when you want to delete the store that's already open - There is now a single
LoggerStore/Configuration/sizeLimit
option because smaller blobs are now inlined in the database. NetworkLogger
no longer stores trace messages – all information about the requests is now available in a structured way- You can now change the default store (
LoggerStore.shared
). It automatically registers as for remote logging source. - Add
LoggerStore.Configuration
. The options, such assizeLimit
can now be set on a per-store basis. - Add
responseBodySizeLimit
toLoggerStore.Configration
with the default value of 10 Mb, preventing resources that are too large from being stored. - Add
LoggerStore/Configuration/maxAge
to limit the maximum age of stored messages and requests. By default, it's 2 weeks. When the outdated messages are deleted, the associated blobs also are (which wasn't the case in Pulse 1.0). - Add a new way to filter out or modify store events:
willHandleEvent
. It's available on bothNetworkLogger
andLoggerStore
level - Make it easier to redact sensitive information from requests. Add
redactringSensitiveHeaders(_:)
toNetworkLogger.Request
. - Add
contentType
andexpectedContentLength
toNetworkLoggerResponse
- Add
originalRequest
andcurrentRequest
toLoggerNetworkRequestDetailsEntity
- Add
taskId
,taskType
,startDate
,requestBodySize
,responseBodySize
,isFromCache
,redirectCount
,progress
(relationship) toLoggerNetworkRequestEntity
- Add support for download tasks
- Add
loadTask(_:didUpdateProgress:)
toNetworkLogger
for progress reporting - Add a new
LoggerStore
optionsynchronous
. When enabled, all writes to the store happen immediately and synchronously (you generally shouldn't need it). - Add a complete error description for networking errors
- Add convenience property ``LoggerStore/viewContext`
- Make
LoggerStore.model
private
Fixes
- Fix an issue with pins sometimes incorrectly being displayed in table cells
- Fix an issue with some debug logs appearing in the console when remote logging is enabled
- Fix metrics rendering for request start/end
- Fix an issue where on watchOS and tvOS all messages were displayed by default (and not just messages from the current session)
- (watchOS, tvOS) Fix an issue where sometimes the details screen can get popped automatically
- Fix an issue where "Remove Messages" button was not available when filters were applied that filter out all messages
- Fix an issue where the network logger was storing
localizedDescription
for errors instead of adebugDescription
- Fix an issue with errors that don't provide an error not being recorded as request failures
- Fix an issue where some dates were formatted using the current locale
- (iOS) Fix line height in raw headers viewer
- Fix an issue where TransferSize view was showing info from only the latest transaction
- Fix an issue where after calling
LoggerStore.copy(to:)
the temporary files created during archive weren't deleted - Fix an issue where N of messages wasn't being updated in the search bar (iOS)
PulseUI (macOS)
If someone is testing your macOS app, they now have a convenient way to preview the logs right from the app and enable remote logging.
Demo
- You can now use all demo projects to test Pulse Pro (remote logging is available for all of them)