Structured Logging System
Pulse is a powerful logging system. Record and inspect network requests and logs right from your iOS app using Pulse Console. Share and view logs in Pulse macOS app. Logs are recoded locally and never leave your device.
Pulseis not a tool, it's a framework. It records events from
URLSessionor from frameworks that use it, such as
Alamofire, and displays them using
PulseUIviews that you integrate directly into your app.
Pulse is distributed using Swift Package Manager as a binary framework. It is built using SwiftUI and includes no resources to ensure its tiny size. The thinned
.ipawith Pulse included takes <640 KB. You can simply leave it in your app store builds. And because it's a binary framework, it doesn't increase your compile time.
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.
Pulse is integrated directly into your app and is always recording (when your code tells it to). Pulse console is available for everyone who has your test builds. You or your QA team can view the logs on the device and easily share them to attach to bug reports. That's powerful.
Pulse is available only for GitHub sponsors. Once the number of sponsors reaches a certain level, the project will become available to everyone.
The access to the private project manifest is provided manually, there might be a bit of a delay before you get access after sponsoring.
Please follow the Installation Guide.
The primary class in Pulse is
PersistentLogHandlerwhich can be used as a logging backend for SwiftLog.
If you are not using SwiftLog in your project, you can use
Pulse.PersistentLogHandlerdirectly without the need for bootstrapping.
Use SwiftLog as usual to start logging messages.
let logger = Logger(label: "com.yourcompany.yourapp")
logger.info("This message will be stored persistently")
For more information, please follow the dedicated guide.
All logged messages are stored persistently using Core Data, including metadata and other information. You get full access to all of the recorded messages at any time using
let message = try LoggerMessageStore.default.allMessage()
// NSPersistentStoreContainer let container = logger.store.container
PulseUI framework provides all of the views that you saw on the screenshots.
MainViewControllerfor convenient UIKit integration) to display the root view with tabs. Use
PinViewto display individual tabs.
let view = MainView()
Pulse views are built using SwiftUI and require iOS 13. But even if your app requires iOS 11, no need to worry. Pulse can still be easily integrated into your project. The framework itself requires iOS 11 and Pulse views can be easily added conditionally on iOS 13+. To show Pulse from UIKit, use convenience
| Pulse | Swift | Xcode | Platforms | |---------------|-----------------|-----------------|---------------------------------------------------| | Pulse 0.9.2 | Swift 5.3 | Xcode 12.0 | iOS 11.0 (views requires iOS 13) | | Pulse 0.9.0 | Swift 5.3 | Xcode 12.0 | iOS 13.0 (Upcoming conditional iOS 11+ and other platforms) | | Pulse 0.3 | Swift 5.2 | Xcode 11.3 | iOS 11.0 / watchOS 4.0 / macOS 10.13 / tvOS 11.0 |
Pulse is available under the MIT license. See the LICENSE file for more info.