Swift SDK for TelemetryDeck, a privacy-conscious analytics service for apps and websites.

What's New

Version 1.4.3


This version adds support for integrating TelemetryDeck via CocoaPods, for projects who prefer CocoaPods over Swift Package Manager.

Thanks a lot to @chrisvasselli for the contribution!

What's Changed

New Contributors

Full Changelog: 1.4.2...1.5.0


This package allows you to send signals to TelemetryDeck from your Swift code. Sign up for a free account at


Init the Telemetry Manager at app startup, so it knows your App ID (you can retrieve the App ID from your TelemetryDeck Dashboard under Set Up App)

let configuration = TelemetryManagerConfiguration(appID: "<YOUR-APP-ID>")
// optional: modify the configuration here
TelemetryManager.initialize(with: configuration)

For example, if you're building a scene based app, in the init() function for your App:

import SwiftUI
import TelemetryClient

struct TelemetryTestApp: App {
    var body: some Scene {
        WindowGroup {

    init() {
        // Note: Do not add this code to `WindowGroup.onAppear`, which will be called
        //       *after* your window has been initialized, and might lead to our initialization
        //       occurring too late.
        let configuration = TelemetryManagerConfiguration(appID: "<YOUR-APP-ID>")
        TelemetryManager.initialize(with: configuration)

Then send signals like so:


Debug -> Test Mode

If your app's build configuration is set to "Debug", all signals sent will be marked as testing signals. In the Telemetry Viewer app, actvivate Test Mode to see those.

If you want to manually control wether test mode is active, you can set the configuration.testMode property.

User Identifiers

Telemetry Manager will create a user identifier for you user that is specific to app installation and device. If you have a better user identifier available, such as an email address or a username, you can use that instead, by passing it on to the TelemetryManagerConfiguration (the identifier will be hashed before sending it).

configuration.defaultUser = ""

You can update the configuration after TelemetryManager is already initialized.


You can also send additional payload data with each signal:

TelemetryManager.send("databaseUpdated", with: ["numberOfDatabaseEntries": "3831"])

Telemetry Manager will automatically send a base payload with these keys:

  • platform
  • systemVersion
  • appVersion
  • buildNumber
  • isSimulator
  • isTestFlight
  • isAppStore
  • modelName
  • architecture
  • operatingSystem
  • targetEnvironment


With each Signal, the client sends a hash of your user ID as well as a session ID. This gets automatically generated when the client is initialized, so if you do nothing, you'll get a new session each time your app is started from cold storage.

On iOS, tvOS, and watchOS, the session identifier will automatically update whenever your app returns from background, or if it is launched from cold storage. On other platforms, a new identifier will be generated each time your app launches. If you'd like more fine-grained session support, write a new random session identifier into the TelemetryManagerConfiguration's sessionID property each time a new session begins.

Custom Salt

By default, user identifiers are hashed by the TelemetryDeck SDK, and then sent to the Ingestion API, where we'll add a salt to the received identifier and hash it again.

This is enough for most use cases, but if you want to extra privacy conscious, you can add in you own salt on the client side. The TelemetryDeck SDK will append the salt to all user identifers before hashing them and sending them to us.

If you'd like to use a custom salt, you can do so by passing it on to the TelemetryManagerConfiguration

let configuration = TelemetryManagerConfiguration(appID: "<YOUR-APP-ID>", salt: "<A RANDOM STRING>")

Custom Server

A very small subset of our customers will want to use a custom signal ingestion server or a custom proxy server. To do so, you can pass the URL of the custom server to the TelemetryManagerConfiguration:

let configuration = TelemetryManagerConfiguration(appID: "<YOUR-APP-ID>", baseURL: "")

Developing this SDK

Your PRs on TelemetryDeck's Swift Client are very much welcome. Check out the SwiftClientTester project, which provides a harness you can use to work on the library and try out new things.

When making a new release, run ./ MAJOR.MINOR.PATCH to bump the version string in the SDK, create a new commit and tag that commit accordingly all in one step.


  • Swift Tools 5.2.0
View More Packages from this Author


  • None
Last updated: Fri Mar 17 2023 12:42:55 GMT-0500 (GMT-05:00)