Skip to content

iOS SDK (Swift)

Official iOS SDK for embedding chat in iOS and macOS apps.

  • iOS 14.0+ / macOS 12.0+
  • Swift 5.5+
  • Xcode 13.0+

Add to your Package.swift:

dependencies: [
.package(url: "https://github.com/Uchara-AI/sdk-ios.git", from: "1.0.0")
]

Or in Xcode:

  1. File → Add Packages…
  2. Enter https://github.com/Uchara-AI/sdk-ios.git
  3. Select version 1.0.0 or later
import UcharaSDK
class ChatViewController: UIViewController {
let visitor = VisitorSDK(config: VisitorConfig(
apiURL: "https://api.uchara.com",
widgetToken: "wgt_your_token_here"
))
override func viewDidLoad() {
super.viewDidLoad()
// Initialize session
visitor.initialize { result in
switch result {
case .success(let session):
print("Session initialized: \(session.contactId)")
self.loadConversation()
case .failure(let error):
print("Error: \(error.localizedDescription)")
}
}
// Listen for real-time events
visitor.onEvent = { event in
switch event {
case .messageNew(let message):
print("New message: \(message.content ?? "")")
case .typing(let senderType, _, _):
print("\(senderType) is typing…")
default:
break
}
}
}
func loadConversation() {
visitor.getActiveConversation { result in
switch result {
case .success(let conv):
if let conv = conv {
self.loadMessages(conversationId: conv.id)
} else {
self.startNewConversation()
}
case .failure(let error):
print("Error: \(error)")
}
}
}
func startNewConversation() {
visitor.startConversation(message: "Hello!") { result in
if case .success(let conv) = result {
print("Conversation started: \(conv.id)")
}
}
}
func sendMessage(_ text: String) {
guard let convId = visitor.currentConversationId else { return }
visitor.sendMessage(conversationId: convId, content: text) { result in
if case .success(let message) = result {
print("Message sent: \(message.id)")
}
}
}
}
@available(iOS 15.0, *)
func setupChat() async {
do {
let session = try await visitor.initialize()
print("Session: \(session.contactId)")
if let conv = try await visitor.getActiveConversation() {
let messages = try await visitor.getMessages(conversationId: conv.id)
print("Loaded \(messages.count) messages")
}
} catch {
print("Error: \(error)")
}
}