Core Features
An overview of what the Pulse iOS SDK captures automatically and what requires opt-in.
Automatic Telemetry
The following is captured from the moment Pulse.shared.initialize(...) is called — no additional code required:
| Signal | Description |
|---|---|
| URLSession requests | Every HTTP request made via URLSession: method, URL, status code, duration, error |
| Crashes | Mach exceptions, signals, Objective-C/C++ crashes — full symbolicated report on next launch |
| Screen transitions | UIViewController viewDidLoad, viewWillAppear, viewDidDisappear lifecycle |
| App lifecycle | Foreground and background events |
| App startup | Cold launch duration from SDK init to first screen appearing |
| Session tracking | Unique session ID stamped on every span and log |
Opt-In Instrumentation
These require explicit configuration in the instrumentations closure:
| Instrumentation | What it captures | How to enable |
|---|---|---|
| UIKit Tap | Touch events, tap targets, rage clicks | config.uiKitTap { $0.enabled(true) } |
| Location | Geo attributes on all spans (lat, lon, country, city) | config.location { $0.enabled(true) } |
| Session Replay | Screenshot-based session recording with privacy masking | config.sessionReplay { $0.enabled(true) } |
| Interaction Tracking | Multi-step user flow timing from server config | config.interaction { $0.enabled(true) } |
Remote-Managed Behavior
Beyond local initialize() settings, Pulse fetches a server-side config from your backend on every launch. This lets you change the following without shipping a new app version:
| What | Examples |
|---|---|
| Sampling rates | Collect 10% of sessions globally, or 100% for a specific OS version |
| Feature flags | Disable session replay for a specific app version; enable interaction tracking for a subset of users |
| Attribute mutations | Drop a PII field across all signals, or inject a computed attribute into every span |
| Signal routing | Route custom events to a separate collector endpoint |
| Interaction config | Update the URL where user-flow definitions are fetched without changing app code |
The config is fetched in the background on launch and applied on the next launch. All of this is managed from the Pulse dashboard — no SDK update required.
See SDK Initialization → Remote Config for the full breakdown.
Automatic Instrumentations (detailed guides)
- Network — URLSession request spans
- Crashes — Crash detection and reporting
- Screen Lifecycle — UIViewController events
- Sessions — Session lifecycle management
- App Startup — Launch timing
- UIKit Tap — Touch and rage-click tracking
- Location — Geo attribute enrichment
- Custom Spans — Manual performance tracing
- Custom Events — Business event tracking
- Error Tracking — Non-fatal error reporting