How to navigate Pulse

There is always this friction when it comes to debugging native apps: you can’t inspect anything that happens behind the scenes unless you use special tools, not even network requests. That’s not the case on the web with tools like Safari Web Inspector. I wanted to bring something similar to native apps.

What is Pulse? It’s a persistent logger with a network inspector, but not just a tool. It’s also a framework.

  • PulseCore.framework (iOS, macOS, watchOS, tvOS) provides a logger itself and a network proxy for automatically capturing network requests
  • PulseUI.framework (iOS, macOS, watchOS, tvOS) containing all the UI components you’ll see on the screenshots
  • Document-based Pulse apps (iOS, macOS) to view logs shared from other devices

As a developer, you integrate the frameworks into your app and configure them to capture logs1 and network traffic. You then add a way to display a Pulse console to view logs right on the device (can be a shake gesture, for example).

As a QA engineer testing the app, you can view the network requests right on your iOS device without installing any special tools. And when you find a defect, you can send the logs to the developer using any native sharing mechanism. The developer can view the shared files using a dedicated Pulse app available both on macOS and iOS.

What Pulse is Not #

Pulse is not a network debugging proxy tool like Proxyman, Charles, or Wireshark. It won’t automatically intercept all network traffic coming from your app or device. And to view logs in realtime, you need to use PulseUI.framework that you integrate into your app. The dedicated Pulse iOS and macOS also use PulseUI.framework and are there to view logs manually shared from other devices.

Requirements #

Pulse Swift Xcode Platforms
PulseCore 0.14.0 Swift 5.3 Xcode 12.0 iOS 11.0 / watchOS 6.0 / tvOS 11.0 / macOS 11.0
PulseUI 0.14.0 Swift 5.3 Xcode 12.0 iOS 13.0 / watchOS 7.0 / tvOS 13.0 / macOS 11.0

PulseUI.framework can be installed on earlier platform versions, e.g iOS 11, but you won’t be able to access any of the APIs.

  1. If you are using SwiftLog, you can also install Pulse.framework that adds PersistentLogHandler class that can be used as SwiftLog backend.