iOS session replay

Last updated:

|Edit this page

🚧 NOTE: iOS session replay is considered beta and is free while in beta. We are keen to gather as much feedback as possible so if you try this out please let us know. You can send feedback via the in-app support panel or one of our other support options.

Installation

Install and configure PostHog as you normally would. Ensure you've enabled session recordings in your project settings and then add config.sessionReplay = true to your PostHog configuration alongside any of your other configuration options.

Swift
let config = PostHogConfig(apiKey: apiKey)
// Enable session recording. Requires enabling in your project settings as well.
// Default is false.
config.sessionReplay = true
// Whether text inputs are masked. Default is true.
// Password inputs are always masked regardless
config.sessionReplayConfig.maskAllTextInputs = true
// Whether images are masked. Default is true.
config.sessionReplayConfig.maskAllImages = true
// Whether network requests are captured in recordings. Default is true
// Only metric-like data like speed, size, and response code are captured.
// No data is captured from the request or response body.
config.sessionReplayConfig.captureNetworkTelemetry = true
// Whether replays are created using high quality screenshots. Default is false.
// Required for SwiftUI.
// If disabled, replays are created using wireframes instead.
// The screenshot may contain sensitive information, so use with caution
config.sessionReplayConfig.screenshotMode = true

Masking and redacting

Your replays may contain sensitive information. For example, if you're building a banking app you may not want to capture how much money a user has in their account.

To replace any type of UIView with a redacted version in the replay, set the accessibilityIdentifier to ph-no-capture:

Swift
let imvProfilePhoto = UIImageView(frame: CGRect(x: 50, y: 50, width: 100, height: 100))
imvProfilePhoto.accessibilityIdentifier = "ph-no-capture"

Note: This is currently not supported for SwiftUI. We're investigating the issue.

Note: A technical issue is causing the SwiftUI Text view to be detected as a SwiftUI Image view. This means that it'll be automatically masked if maskAllImages is set to true, even if the maskAllTextInputs is disabled. We're investigating this issue.

Masking in SwiftUI

Limitations

  • Requires PostHog iOS SDK version >= 3.6.0, and it's recommended to always use the latest version.
  • SwiftUI is only supported if the screenshotMode option is enabled.
    • Text views in SwiftUI are considered images, so they are masked unless maskAllImages is disabled.
  • Replays are representation of the user's screen, not a video recording.
  • Custom views are not fully supported if screenshotMode is disabled.
  • WebView is not supported. A placeholder will be shown.
  • React Native and Flutter for iOS aren't supported.

Questions?

Was this page useful?

Next article

Privacy Controls

PostHog offers a range of controls to limit what data is captured by session recordings. Our privacy controls run in the browser or mobile app. So, masked data is never sent over the network to PostHog. Input elements As any input element is highly likely to contain sensitive text such as email or password, we mask these by default . You can explicitly set this to false to disable the masking. You can then specify inputs types you would like to be masked. Mask or un-mask specific inputs You can…

Read next article