Use the Honeycomb OpenTelemetry Swift SDK to collect telemetry data from your iOS application and send it to Honeycomb. Instrumenting your application lets you measure how it behaves on actual devices, detect performance issues, and better understand how users experience your application.
This guide walks you through the process of instrumenting an application in your local development environment and verifying that telemetry is successfully flowing to Honeycomb.
Before getting started, make sure you have:
A Honeycomb account If you don’t already have an account, sign up for one. Honeycomb stores your data in either a US-based or EU-based location, depending on your account region:
Required Tools
A Honeycomb Ingest API Key For this guide, you’ll need a Honeycomb Ingest API Key with the Can create services/datasets permission. This key lets your application send telemetry to Honeycomb and create a dataset for your service.
To send telemetry from your application, add the Honeycomb OpenTelemetry Swift SDK to your project. The Honeycomb OpenTelemetry Swift SDK is compatible with applications targeting iOS 13+.
If you manage dependencies using Xcode:
https://github.com/honeycombio/honeycomb-opentelemetry-swift
.Honeycomb
package to your application’s target dependencies.If you manage dependencies manually:
Package.swift
file:dependencies: [
.package(url: "https://github.com/honeycombio/honeycomb-opentelemetry-swift.git",
from: "0.0.10")
],
Honeycomb
to your target dependencies:dependencies: [
.product(name: "Honeycomb", package: "honeycomb-opentelemetry-swift"),
],
To start collecting telemetry, configure the SDK early in your application’s lifecycle.
This ensures that events such as startup time and early view loads are captured.
We recommend setting it up in the init()
method of your App
class, or something equivalent.
Here’s an example configuration using the HoneycombOptions.Builder()
, which lets us use the builder pattern to set configuration options:
import Honeycomb
import SwiftUI
@main
struct ExampleApp: App {
init() {
do {
let options = try HoneycombOptions.Builder()
// Uncomment the line below to send to EU instance. Defaults to US.
// .setAPIEndpoint("https://api.eu1.honeycomb.io:443")
.setAPIKey("YOUR-API-KEY")
.setServiceName("YOUR-SERVICE-NAME")
.setServiceVersion("0.0.1")
.setDebug(true)
.build()
try Honeycomb.configure(options: options)
} catch {
NSException(name: NSExceptionName("HoneycombOptionsError"),
reason: "\(error)").raise()
}
}
}
In this example, key configuration options include:
https://api.honeycomb.io:443
(the Honeycomb US instance URL).https://api.eu1.honeycomb.io:443
.true
to enable debug logs, which can help troubleshoot configuration issues during development.The Honeycomb OpenTelemetry Swift SDK includes built-in support for capturing common system and runtime events. These can provide useful context without requiring additional code. These include:
URLSession
.By default, most of these instrumentation libraries are enabled. You can selectively turn them on or off in your configuration:
let options = try HoneycombOptions.Builder()
// ...
.setMetricKitInstrumentationEnabled(true)
.setURLSessionInstrumentationEnabled(true)
.setUIKitInstrumentationEnabled(true)
.setTouchInstrumentationEnabled(false)
.setUnhandledExceptionInstrumentationEnabled(true)
// ...
.build()
try Honeycomb.configure(options: options)
Once your application is instrumented, check that telemetry data is reaching Honeycomb:
Confirm that debugging is enabled by setting .setDebug(true)
in your SDK configuration.
Build and run your application.
Check your logs for output like this:
๐ Honeycomb SDK Debug Mode Enabled ๐
Honeycomb options: HoneycombOptions(...)
Not sampling, emitting all spans
serviceName
value.If you donโt see any data, visit Troubleshooting.
Take a look at the data that you have generated using automatic instrumentation through the iOS Launchpad or a custom Board.
If you’re using Honeycomb for Frontend Oberservability, the iOS Launchpad provides a starting point for reviewing the telemetry from your iOS application. The Launchpad helps you:
It’s a great place to start exploring how your application behaves in real-world conditions.
You can also explore your data by creating a Board from a pre-configured Board template. Our specialized template for mobile iOS data includes a curated set of ready-made queries and visualizations based on the fields collected by the Honeycomb OpenTelemetry Swift SDK.
This template gives you an immediate, actionable view into common mobile metrics, like application start times, cold launches, crashes, and session flows, without needing to build anything from scratch. You can use it as-is or customize it to fit your needs.
To learn more, visit Use Board Templates.
Running into issues? Here are some common problems and ways to fix them.
Make sure that you:
"YOUR-API-KEY"
with a valid Ingest API Key.The Honeycomb OpenTelemetry Swift SDK uses the value passed to .setApiKey()
to send your telemetry data.
This must be set correctly for data to reach Honeycomb.
Check the value passed to .setServiceName()
.
This value determines the name of your dataset in Honeycomb.
If you leave it blank, the default will be inferred from your bundle, which might not be descriptive or consistent across builds.