When your customers need help, the last thing they want is to leave your app. Making them open a browser, search for your support page, or dig through email for ticket updates creates friction that hurts the customer experience. That's why embedding support directly into your iOS app with the Zendesk mobile SDK has become essential for modern customer service.
This guide walks you through integrating Zendesk's iOS SDK from start to finish. Whether you're building a new app or adding support to an existing one, you'll learn the exact steps to get customer messaging working in your application. For teams looking to add AI-powered responses to their mobile support, we'll also cover how eesel AI works alongside the Zendesk mobile SDK.

What you'll need
Before you start, here's what you'll need:
- A Zendesk Support or Suite plan
- Xcode 11.4 or later
- An iOS app targeting iOS 14 or later
- Admin access to your Zendesk account to retrieve channel keys
- Swift 5.2.2+ or Objective-C project
The SDK supports both Swift and Objective-C, so you can integrate it regardless of which language your app uses. Swift Package Manager works best for modern projects, but CocoaPods and Carthage remain available if your project already depends on them.
Step 1: Choose the right Zendesk SDK for your needs
Many developers don't realize that Zendesk offers multiple SDKs for iOS. Picking the wrong one can create problems later, so it's worth understanding the differences upfront.
Zendesk Messaging SDK (recommended for new projects)
This is Zendesk's modern SDK and the one you should use for any new integration. It provides a contemporary messaging experience where users can have ongoing conversations that persist over time. The Messaging SDK is actively maintained, with the latest version (2.37.0) released in January 2026.
Key capabilities include:
- Multi-conversation support (users can have multiple ongoing conversations)
- Rich messaging with carousels, forms, and file attachments
- Push notification support for real-time updates
- Proactive messaging from your business
- Wait time banners showing queue position
Classic Support SDK (legacy/archived)
Important: The classic Zendesk SDK for iOS was archived on November 23, 2024. The GitHub repository is now read-only. If you're currently using this SDK, you should plan a migration to the Messaging SDK. See Zendesk's migration guide for detailed steps.
Sunshine Conversations SDK (advanced use cases)
For apps needing highly customized messaging experiences, Sunshine Conversations (formerly Smooch) offers more flexibility. It supports advanced features like custom UI implementations and complex conversational workflows. However, for most standard support use cases, the Messaging SDK is the better choice.
Step 2: Add the SDK to your Xcode project
The Zendesk Messaging SDK supports four installation methods. Swift Package Manager is the recommended approach for modern iOS development.
Swift Package Manager (recommended)
- In Xcode, select File > Swift Packages > Add Package Dependency
- Enter the repository URL:
https://github.com/zendesk/sdk_messaging_ios/ - Follow Xcode's prompts to add ZendeskMessagingSDK as a dependency
Xcode will automatically resolve and download all required dependencies.
CocoaPods
Add this line to your Podfile:
pod 'ZendeskSDKMessaging'
Then run pod install.
Carthage
Add this to your Cartfile:
github "zendesk/sdk_messaging_ios"
Run carthage update --use-xcframeworks, then drag the frameworks into your project.
Required permissions
Add these keys to your app's Info.plist to enable camera, microphone, and photo library access:
NSCameraUsageDescriptionallows camera access for images and videosNSMicrophoneUsageDescriptionallows microphone access for video captureNSPhotoLibraryUsageDescriptionallows photo library read/write access

Step 3: Initialize the SDK in your app
Once the SDK is added to your project, you need to initialize it with your channel key.
Getting your channel key
Your channel key is generated in the Zendesk Admin Center:
- Log into the Zendesk Admin Center
- Navigate to Channels > Messaging
- Click Add Channel and select iOS
- Follow the prompts to generate your channel key

Initialization code
Add these imports to your AppDelegate or main app file:
Swift:
import ZendeskSDKMessaging
import ZendeskSDK
Objective-C:
#import <ZendeskSDKMessaging/ZendeskSDKMessaging.h>
#import <ZendeskSDK/ZendeskSDK.h>
Initialize the SDK at app launch:
Swift:
Zendesk.initialize(
withChannelKey: "<your_channel_key>",
messagingFactory: DefaultMessagingFactory()
) { result in
if case let .failure(error) = result {
print("Messaging did not initialize. Error: \(error.localizedDescription)")
}
}
Objective-C:
[Zendesk initializeWithChannelKey:@"<your_channel_key>"
messagingFactory:[[ZDKDefaultMessagingFactory alloc] init]
completionHandler:^(Zendesk * _Nullable zendesk, NSError * _Nullable error) {
if (error != nil) {
NSLog(@"Zendesk did not initialize. Error: %@", error.localizedDescription);
}
}];
The SDK size is approximately 7.5 MB for the XCFramework download, though the final impact on your app size may be smaller due to app thinning and linker optimizations.
Step 4: Set up user authentication
The SDK supports two authentication methods depending on your use case.
Anonymous authentication
For users who haven't logged into your app, use anonymous authentication:
Swift:
let identity = Identity.createAnonymous()
Zendesk.instance?.setIdentity(identity)
This creates a new user record in Zendesk for each device.
JWT authentication
For authenticated users, use JWT to verify their identity:
Swift:
let identity = Identity.createJwt(token: "<your_jwt_token>")
Zendesk.instance?.setIdentity(identity)
JWT authentication ensures that users can access their conversation history across multiple devices and prevents impersonation. As of SDK version 2.34.0, there's also an AuthenticationDelegate for handling token refresh seamlessly.
Step 5: Display the messaging interface
Once initialized, you can present the messaging interface anywhere in your app.
Basic presentation
Swift:
if let viewController = Zendesk.instance?.messaging?.messagingViewController() {
self.navigationController?.show(viewController, sender: self)
}
Objective-C:
UIViewController *viewController = [Zendesk.instance.messaging messagingViewController];
if (viewController != NULL) {
[self.navigationController showViewController:viewController sender:self];
}
Modal presentation
For a modal experience instead of pushing onto the navigation stack:
Swift:
if let viewController = Zendesk.instance?.messaging?.messagingViewController() {
let navigationController = UINavigationController(rootViewController: viewController)
navigationController.modalPresentationStyle = .fullScreen
present(navigationController, animated: true)
}
By default, the SDK navigates to the most recently active conversation. If your account has multi-conversations enabled, users can manage several ongoing conversations at once.
Step 6: Customize the UI and behavior
The SDK offers several customization options to match your app's branding.
Theme colors
You can customize colors through the Zendesk Admin Center, or programmatically for more control. Set your primary color using:
CommonTheme.currentTheme.primaryColor = .cyan
Navigation bar customization
For navigation bar styling, use the standard UIAppearance proxy:
UINavigationBar.appearance().barTintColor = .cyan
Pre-chat forms and bot configuration
You can configure pre-chat forms to collect user information before starting a conversation. Set up forms through your Zendesk Admin Center, or use the SDK's configuration options to customize the experience.
Known iOS limitations
Be aware of these customization limitations on iOS:
- Answer Bot avatar cannot be changed
- Right navigation bar button cannot be overridden
- Navigation title color has limited customization options
- Chat text font cannot be changed
These limitations are documented in Zendesk's iOS documentation and are consistent across iOS implementations.
Common issues and troubleshooting
Here are solutions to problems developers frequently encounter:
Initialization failures
If the SDK fails to initialize:
- Check that your channel key is correct and matches your app's bundle ID
- Make sure your Zendesk account has messaging enabled
- Verify you're using the correct region endpoint (US or EU)
Push notification issues
Push notifications need careful setup:
- Make sure you've uploaded your .p12 certificate to the Zendesk Admin Center
- Verify the APS Environment entitlement is set to "production" (not development)
- Check that your provisioning profile includes push notification capabilities
- Make sure you're using a combined Sandbox & Production certificate, not Sandbox-only
Source: Zendesk push notification setup guide
Authentication errors
JWT authentication issues usually stem from:
- Expired tokens implement token refresh using AuthenticationDelegate
- Incorrect token format make sure your JWT follows Zendesk's required claims
- Clock skew verify server and device times are synchronized
Memory and performance
The SDK is lightweight, but you should:
- Initialize it once at app launch, not repeatedly
- Handle memory warnings appropriately
- Test on older devices if your app supports iOS 14
Enhancing mobile support with eesel AI
While the Zendesk mobile SDK provides the foundation for in-app customer service, many teams want to add intelligent automation to handle common questions without human intervention. That's where we come in.

At eesel AI, we've built an AI platform that works alongside your Zendesk setup to automate responses and improve deflection rates. Instead of just routing tickets, our AI can resolve common issues by drawing from your entire knowledge base, not just Zendesk Guide articles.
Here's how teams typically use us alongside their Zendesk mobile SDK integration:
-
Connect multiple knowledge sources We pull answers from Confluence, Google Docs, Notion, and other platforms where your documentation lives, so customers get complete answers even when information is scattered
-
Test before going live Our simulation mode lets you test AI responses against your past tickets to forecast deflection rates before customers see it
-
Progressive rollout Start with AI drafting replies for review, then expand to full automation as confidence grows
If you're already planning a Zendesk mobile SDK integration, adding AI-powered responses can reduce the volume of tickets that reach your human agents. Check out our Zendesk integration to see how it works.
Start building better mobile support today
Integrating the Zendesk mobile SDK into your iOS app is straightforward once you know the steps. The key is choosing the right SDK (Messaging SDK for new projects), getting your channel key from the Admin Center, and handling authentication appropriately for your use case.
The SDK gives you a professional support experience with minimal development effort. And if you want to take it further with AI-powered automation, eesel AI can help you deflect more tickets and resolve issues faster.
Ready to get started? Head to the Zendesk developer documentation for the latest SDK version and detailed API references.
Frequently Asked Questions
Share this post

Article by
Stevia Putri
Stevia Putri is a marketing generalist at eesel AI, where she helps turn powerful AI tools into stories that resonate. She’s driven by curiosity, clarity, and the human side of technology.



