---
title: iOS SDK · BuzzKit
description: Registration, identity, events, action buttons and a notification settings screen in one Swift package.
canonical: https://buzzkit.dev/features/ios-sdk
last-updated: 2026-09-02
---

# Drop the SDK in. The rest is wired.

The iOS SDK is the only thing your app needs for notifications. Configure it with a client key, identify the user by your own id, register for push, and track what they do.

## Four lines to a registered device

Configure once with a client key, identify the signed-in user, register for push and track events. The SDK stamps device model, app version and push permission on the subscriber as system attributes.

```
BuzzKit.configure(apiKey: "bk_pk_live_…")
BuzzKit.identify("user_42")
try await BuzzKit.registerForPush()
BuzzKit.track("workout.completed", data: ["duration": 42])
```

## Events that survive being offline

Every tracked event gets a unique id and its original timestamp, waits in a local queue while offline, and drains in batches of up to 100. The API dedupes on the id, and timestamps up to seven days old are accepted.

```
// Queued on the device with its own id and time,
// sent in batches once the network is back
BuzzKit.track("workout.completed", data: ["duration": 42])
BuzzKit.track("class.booked", data: ["class": "hiit-18"])

// Opens, backgrounds and notification taps
// are tracked for you
```

## Actions, deep links and settings for free

Action buttons defined on a send are registered by the SDK, and the opened receipt carries the tapped button and any typed text. A deep link opens through your handler, and the preferences endpoint is the whole settings screen.

```
BuzzKit.onDeepLink { url in
    router.open(url)
}
```

## Capabilities

- **Client keys.** A key that only reaches the client API, safe inside the binary.
- **System attributes.** Country, timezone, language, app version and permission on identify.
- **Sandbox aware.** Debug builds register with the sandbox credential.
- **Live Activities.** Activity and push-to-start tokens registered for you.
- **Local notifications.** Workflow sends can fire as local notifications, offline included.
- **Preferences screen.** The topic list per channel, grouped by category.

## Questions

### How do I add push notifications to an iOS app?

Add the Swift package, call configure with a client key, identify the user and register for push. Tokens, permission state and events are handled by the SDK.

### Is it safe to ship the API key in the app?

Client keys only reach the client API and carry no scopes. For production, have your backend compute an identity hash per user so a stolen key cannot claim another id.

### Does the SDK work with SwiftUI and UIKit?

Yes. It is a Swift package with static entry points that fits either lifecycle, and it forwards the delegate callbacks for tokens and remote notifications.

## Related

- [Live Activities](https://buzzkit.dev/features/live-activities.md): Start, update and end iOS Live Activities through the same API that sends your push.
- [Topics & Preferences](https://buzzkit.dev/features/topics.md): Named notification categories with per-topic, per-channel choices for every subscriber.
- [Sending](https://buzzkit.dev/features/sending.md): One POST sends to a subscriber, a topic or a segment and lands on every device.

## Start

- [Start sending](https://buzzkit.dev/dashboard)
- [API Reference](https://docs.buzzkit.dev)
- [BuzzKit on GitHub](https://github.com/buzzkit-dev/buzzkit)
