iOS SDK
Add Jake Messenger to UIKit and SwiftUI apps
iOS SDK
TL;DR: Add the Swift package. Configure once. Authenticate from your backend. Call
Jake.present(). iOS 15+.
If you're migrating from Intercom, use the migration guide instead.
1. Install
File → Add Package Dependencies:
https://github.com/EthanQuarry/jake-ios.gitAdd JakeSDK to your app target.
2. Configure
import JakeSDK
// In app startup:
Jake.configure(
workspaceId: "YOUR_WORKSPACE_ID",
publicKey: "YOUR_PUBLIC_KEY",
messengerURL: URL(string: "https://widget.tryjake.ai/messenger")!
)3. Authenticate
Your backend creates the token (same endpoint as the web widget):
let response = try await api.createJakeUserToken()
try await Jake.authenticate(userId: response.userId, token: response.token)Session stored in Keychain. Never put secrets in the app.
4. Present
Button("Contact support") {
Jake.present()
}UIKit: Jake.present(from: self)
5. Logout
Jake.logout() // always call before authenticating a different userUnread and errors
Jake.delegate = self // implement JakeDelegate
func jakeDidUpdateUnreadCount(_ count: Int) { /* badge */ }
func jakeAuthenticationDidExpire() { /* refresh token */ }Events and attributes
Jake.track("subscription_upgraded", properties: ["plan": .string("pro")])
Jake.setUserAttributes(["company": .string("Acme")])Push
Jake.setPushToken(deviceToken) // after registering for notificationsToken registration alone doesn't prove push works — verify on a real device.
Troubleshooting
- "Jake has not been configured" — call
configurebefore anything else - "Authenticate a user before presenting" — wait for
authenticateto complete - Blank screen — check network, workspace values, and Messenger URL
- Auth expires mid-session — SDK dismisses and calls
jakeAuthenticationDidExpire
Next: Go-live checklist →
