| title | Swift SDK |
|---|---|
| icon | swift |
| description | Native iOS/macOS SDK for connecting to Omi devices with local Whisper transcription |
An easy-to-install Swift package for connecting to Omi devices. Get started in seconds with local Whisper-based transcription - no cloud API required.
Native iOS/macOS support Whisper runs on-device Connect in minutesOpen Xcode → File → New Project → iOS → App
<Note>
Make sure to select **Storyboard** as the Interface option.
</Note>
<img
src="https://github.com/user-attachments/assets/7e59be15-48dc-4ff1-bcf1-235b8bab3990"
alt="Xcode New Project"
style={{maxWidth: '600px'}}
/>
<Tip>
If you aren't prompted to add the package to your target, click "Add Package" again, then "Add to Target" and choose your project.
</Tip>
<img
src="https://github.com/user-attachments/assets/5295b4df-81b6-49b2-80d8-67c43e2a31c2"
alt="Add Package to Target"
style={{maxWidth: '600px'}}
/>
```xml
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app needs Bluetooth access to connect to BLE devices.</string>
```
Get transcription working in 2 minutes:
Replace your `ViewController.swift` with:```swift
import UIKit
import omi_lib
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.lookForDevice()
}
func lookForDevice() {
OmiManager.startScan { device, error in
print("starting scan")
if let device = device {
print("got device ", device)
self.connectToOmiDevice(device: device)
OmiManager.endScan()
}
}
}
func connectToOmiDevice(device: Device) {
OmiManager.connectToDevice(device: device)
self.listenToLiveTranscript(device: device)
self.reconnectIfDisconnects()
}
func reconnectIfDisconnects() {
OmiManager.connectionUpdated { connected in
if connected == false {
self.lookForDevice()
}
}
}
func listenToLiveTranscript(device: Device) {
OmiManager.getLiveTranscription(device: device) { transcription in
print("transcription:", transcription ?? "no transcription")
}
}
}
```
<Note>
There's no UI in this example - transcription appears in the Xcode logs.
</Note>
<img
src="https://github.com/user-attachments/assets/636b33ac-7ea7-4e1c-b490-8ec99b1feef8"
alt="Xcode Console Output"
style={{maxWidth: '600px'}}
/>
The OmiManager class provides all device interaction methods:
import omi_lib
// Scan for any Omi device
func lookForDevice() {
OmiManager.startScan { device, error in
if let device = device {
print("got device ", device)
self.connectToOmiDevice(device: device)
OmiManager.endScan()
}
}
}
// Scan for a specific device
func lookForSpecificDevice(device_id: String) {
OmiManager.startScan { device, error in
if let device = device, device.id == "some_device_id" {
print("got device ", device)
self.connectToOmiDevice(device: device)
OmiManager.endScan()
}
}
}func connectToOmiDevice(device: Device) {
OmiManager.connectToDevice(device: device)
self.reconnectIfDisconnects()
}
func reconnectIfDisconnects() {
OmiManager.connectionUpdated { connected in
if connected == false {
self.lookForDevice()
}
}
}| Method | Description |
|---|---|
startScan(callback) |
Start scanning for Omi devices |
endScan() |
Stop scanning |
connectToDevice(device) |
Connect to a discovered device |
connectionUpdated(callback) |
Monitor connection state changes |
getLiveTranscription(device, callback) |
Receive real-time transcription |
getLiveAudio(device, callback) |
Receive audio file URLs |
MIT License - Omi's Swift SDK is open source.
Compare all available SDKs View source code and contribute