Releases: sendbird/sendbird-ios-distribution
SendbirdAIAgentMessenger-v1.0.0
Sendbird AI Agent iOS SDK - GA Release Changelog
v1.0.0 (Sep 25, 2025)
Highlights
- AI Agent Chat: Engage in natural, context-aware conversations with an AI agent, including real-time messaging and conversation list functionality.
- Messenger Launcher Widget: Easily add a floating launcher button to your app's interface for quick access to AI chat.
- Full-Screen Messenger: Launch full-screen chat conversations with the AI agent through dedicated screens.
- Rich Message Templates: Support for various interactive message formats through structured templates including buttons, cards, lists, and more.
- Easy Integration: Initialize and launch the AI agent messenger with just a few lines of code.
- Markdown & Code Syntax Highlighting: Comprehensive markdown text rendering with syntax highlighting for code blocks.
- Multi-language Support: Built-in support for 11 languages with the ability to extend to additional languages through custom localization.
- Complete Theme System: Provides a foundational theme system including light/dark mode, with ongoing expansion to add richer customization options.
- Modular Architecture: Flexible module system allowing complete customization of UI components.
Requirements
The minimum requirements for AI Agent for iOS are:
- iOS 14.0 or higher
- Swift 5.10 or higher
- Xcode 16.3 or higher
- SendbirdChatSDK 4.30.0 or higher
- SendbirdUIMessageTemplate 3.32.2 or higher
Installation
The SDK can be installed through various package managers.
Swift Package Manager (SPM)
dependencies: [
.package(url: "https://github.com/sendbird/sendbird-ai-agent-messenger-ios.git", from: "1.0.0")
]
CocoaPods
source 'https://github.com/sendbird/sendbird-ios-distribution.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '15.0'
target 'YourApp' do
use_frameworks!
pod 'SendbirdAIAgentMessenger', '~> 1.0.0'
end
# Required for XCFramework download scripts
post_install do |installer|
project = installer.aggregate_targets[0].user_project
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO'
end
end
project.save
end
Features
Sendbird AI Agent Messenger SDK has been officially released!
This SDK enables you to seamlessly integrate an enterprise-grade AI-powered chat agent into your iOS applications.
1. Messenger Launcher Widget
The SDK provides MessengerLauncher functionality that can be easily attached to your application's root view programmatically.
To add the MessengerLauncher to your screen, simply call the attachLauncher()
function specifying the AI agent ID:
AIAgentMessenger.attachLauncher(aiAgentId: "your_ai_agent_id")
- Configure the Launcher's behavior and appearance through
SBALauncherOptions
:-
entryPoint
: Specify which screen to open from the launcherconversation
: Navigate directly to conversation screen (default)conversationList
: Navigate to conversation list screen
-
layout.position
: Determine which corner of the screen the launcher appears inleadingTop
: Top lefttrailingTop
: Top rightleadingBottom
: Bottom lefttrailingBottom
: Bottom right (default)
-
layout.margin
: Set margins around the launcher button -
layout.useSafeArea
: Configure safe area usage -
displayStyle
: Set messenger display modefullscreen
: Display in full-screen modeoverlay
: Display as overlay (default)
-
context
: Key-value dictionary for passing conversation context information
-
Attach the launcher to your activity or view to create a floating entry point for AI chat.
2. Full-Screen Messenger
You can open full-screen conversations.
// Present conversation screen
AIAgentMessenger.presentConversation(aiAgentId: "your_ai_agent_id")
// Or present conversation list screen
AIAgentMessenger.presentConversationList(aiAgentId: "your_ai_agent_id")
3. Rich Message Templates
Support for various interactive elements through structured message templates including buttons, cards, lists, and more.
4. Easy Integration
Initialize and launch the AI agent messenger with just a few lines of code.
// Create new conversation
AIAgentMessenger.createConversation(aiAgentId: "your_ai_agent_id") { result in
switch result {
case .success(let channelURL):
// Conversation creation successful
case .failure(let error):
// Conversation creation failed
}
}
5. Markdown & Code Syntax Highlighting
Provides advanced text rendering capabilities including markdown text rendering and code block syntax highlighting.
6. Multi-language Support
Supports global application development through a multi-language support system.
- Built-in 11 Language Support: Korean, English, Japanese, German, Spanish, Italian, French, Dutch, Portuguese, Turkish, Hindi
- Extensible Localization: Custom localization system for additional language support
- Dynamic Language Switching: Real-time language changes within the app
- Language-specific Optimization: Automatic font and layout adjustments for each language
- Developer-friendly: Easy extension following standard iOS localization patterns
7. Complete Theme System
Provides a foundational theme system including light/dark mode. Future updates will add richer customization options.
// Update color scheme
AIAgentMessenger.update(colorScheme: .dark)
// Font customization
SBAFontSet.fontFamily = "YourCustomFont"
- Basic Theme Support: Automatic light/dark mode switching
- Font Customization: Custom font family support through SBAFontSet
- Ongoing Expansion: Gradual addition of brand-specific color and style options
8. Modular Architecture
Flexible module system allows complete customization of UI components.
- MVVM Pattern: Clean separation of concerns
- Event-driven Communication: Delegate, DataSource, HandleEvent patterns
- Module Replacement: Easy UI customization through simple module replacement
- @LayoutSlot Pattern: Declarative UI composition
9. Session Management and Authentication
The SDK supports flexible user authentication through two session types.
Authenticated Users (Manual Session)
// Create session info for authenticated users
let sessionInfo = AIAgentMessenger.SessionInfo.manual(
userId: "user123",
sessionToken: "your_session_token",
sessionDelegate: self // Implement SessionDelegate protocol
)
// Update session information
AIAgentMessenger.updateSessionInfo(with: sessionInfo)
// Authenticate with AI agent
AIAgentMessenger.authenticate(aiAgentId: "your_ai_agent_id") { result in
switch result {
case .success(let activeChannelURL):
// Authentication successful
case .failure(let error):
// Authentication failed
}
}
Anonymous Users (Anonymous Session)
// Create session info for anonymous users (app attribute settings required)
let anonymousSessionInfo = AIAgentMessenger.SessionInfo.anonymous()
// Update session information
AIAgentMessenger.updateSessionInfo(with: anonymousSessionInfo)
// Authenticate with AI agent (same method)
AIAgentMessenger.authenticate(aiAgentId: "your_ai_agent_id") { result in
// Handle authentication
}
Note: To use Anonymous Session, app attribute settings must be enabled in the Sendbird dashboard.
Architecture
Modular Architecture
- MVVM Pattern: Clean separation of concerns
- Event-driven Communication: Delegate, DataSource, HandleEvent patterns
- Module System: Flexible customization through
SBAModuleSet
- @LayoutSlot Pattern: Declarative UI composition
Key Components
- AIAgentMessenger: Main public API
- SBAModuleSet: Customizable module system
- SBATheme: Comprehensive theme management
Known Issues
- Limited support for some SwiftUI features on iOS 14.0
Support
- Sample Apps: iOS AIAgent basic sample
- Technical Support: Sendbird Support
This release is the first GA (Generally Available) version of the Sendbird AI Agent iOS SDK. It is safe for use in production environments.
SendbirdAIAgentCore-v1.0.0
Sendbird AI Agent iOS SDK - GA Release Changelog
v1.0.0 (Sep 25, 2025)
Highlights
- AI Agent Chat: Engage in natural, context-aware conversations with an AI agent, including real-time messaging and conversation list functionality.
- Messenger Launcher Widget: Easily add a floating launcher button to your app's interface for quick access to AI chat.
- Full-Screen Messenger: Launch full-screen chat conversations with the AI agent through dedicated screens.
- Rich Message Templates: Support for various interactive message formats through structured templates including buttons, cards, lists, and more.
- Easy Integration: Initialize and launch the AI agent messenger with just a few lines of code.
- Markdown & Code Syntax Highlighting: Comprehensive markdown text rendering with syntax highlighting for code blocks.
- Multi-language Support: Built-in support for 11 languages with the ability to extend to additional languages through custom localization.
- Complete Theme System: Provides a foundational theme system including light/dark mode, with ongoing expansion to add richer customization options.
- Modular Architecture: Flexible module system allowing complete customization of UI components.
Requirements
The minimum requirements for AI Agent for iOS are:
- iOS 14.0 or higher
- Swift 5.10 or higher
- Xcode 16.3 or higher
- SendbirdChatSDK 4.30.0 or higher
- SendbirdUIMessageTemplate 3.32.2 or higher
Installation
The SDK can be installed through various package managers.
Swift Package Manager (SPM)
dependencies: [
.package(url: "https://github.com/sendbird/sendbird-ai-agent-messenger-ios.git", from: "1.0.0")
]
CocoaPods
source 'https://github.com/sendbird/sendbird-ios-distribution.git'
source 'https://cdn.cocoapods.org/'
platform :ios, '15.0'
target 'YourApp' do
use_frameworks!
pod 'SendbirdAIAgentMessenger', '~> 1.0.0'
end
# Required for XCFramework download scripts
post_install do |installer|
project = installer.aggregate_targets[0].user_project
project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_USER_SCRIPT_SANDBOXING'] = 'NO'
end
end
project.save
end
Features
Sendbird AI Agent Messenger SDK has been officially released!
This SDK enables you to seamlessly integrate an enterprise-grade AI-powered chat agent into your iOS applications.
1. Messenger Launcher Widget
The SDK provides MessengerLauncher functionality that can be easily attached to your application's root view programmatically.
To add the MessengerLauncher to your screen, simply call the attachLauncher()
function specifying the AI agent ID:
AIAgentMessenger.attachLauncher(aiAgentId: "your_ai_agent_id")
- Configure the Launcher's behavior and appearance through
SBALauncherOptions
:-
entryPoint
: Specify which screen to open from the launcherconversation
: Navigate directly to conversation screen (default)conversationList
: Navigate to conversation list screen
-
layout.position
: Determine which corner of the screen the launcher appears inleadingTop
: Top lefttrailingTop
: Top rightleadingBottom
: Bottom lefttrailingBottom
: Bottom right (default)
-
layout.margin
: Set margins around the launcher button -
layout.useSafeArea
: Configure safe area usage -
displayStyle
: Set messenger display modefullscreen
: Display in full-screen modeoverlay
: Display as overlay (default)
-
context
: Key-value dictionary for passing conversation context information
-
Attach the launcher to your activity or view to create a floating entry point for AI chat.
2. Full-Screen Messenger
You can open full-screen conversations.
// Present conversation screen
AIAgentMessenger.presentConversation(aiAgentId: "your_ai_agent_id")
// Or present conversation list screen
AIAgentMessenger.presentConversationList(aiAgentId: "your_ai_agent_id")
3. Rich Message Templates
Support for various interactive elements through structured message templates including buttons, cards, lists, and more.
4. Easy Integration
Initialize and launch the AI agent messenger with just a few lines of code.
// Create new conversation
AIAgentMessenger.createConversation(aiAgentId: "your_ai_agent_id") { result in
switch result {
case .success(let channelURL):
// Conversation creation successful
case .failure(let error):
// Conversation creation failed
}
}
5. Markdown & Code Syntax Highlighting
Provides advanced text rendering capabilities including markdown text rendering and code block syntax highlighting.
6. Multi-language Support
Supports global application development through a multi-language support system.
- Built-in 11 Language Support: Korean, English, Japanese, German, Spanish, Italian, French, Dutch, Portuguese, Turkish, Hindi
- Extensible Localization: Custom localization system for additional language support
- Dynamic Language Switching: Real-time language changes within the app
- Language-specific Optimization: Automatic font and layout adjustments for each language
- Developer-friendly: Easy extension following standard iOS localization patterns
7. Complete Theme System
Provides a foundational theme system including light/dark mode. Future updates will add richer customization options.
// Update color scheme
AIAgentMessenger.update(colorScheme: .dark)
// Font customization
SBAFontSet.fontFamily = "YourCustomFont"
- Basic Theme Support: Automatic light/dark mode switching
- Font Customization: Custom font family support through SBAFontSet
- Ongoing Expansion: Gradual addition of brand-specific color and style options
8. Modular Architecture
Flexible module system allows complete customization of UI components.
- MVVM Pattern: Clean separation of concerns
- Event-driven Communication: Delegate, DataSource, HandleEvent patterns
- Module Replacement: Easy UI customization through simple module replacement
- @LayoutSlot Pattern: Declarative UI composition
9. Session Management and Authentication
The SDK supports flexible user authentication through two session types.
Authenticated Users (Manual Session)
// Create session info for authenticated users
let sessionInfo = AIAgentMessenger.SessionInfo.manual(
userId: "user123",
sessionToken: "your_session_token",
sessionDelegate: self // Implement SessionDelegate protocol
)
// Update session information
AIAgentMessenger.updateSessionInfo(with: sessionInfo)
// Authenticate with AI agent
AIAgentMessenger.authenticate(aiAgentId: "your_ai_agent_id") { result in
switch result {
case .success(let activeChannelURL):
// Authentication successful
case .failure(let error):
// Authentication failed
}
}
Anonymous Users (Anonymous Session)
// Create session info for anonymous users (app attribute settings required)
let anonymousSessionInfo = AIAgentMessenger.SessionInfo.anonymous()
// Update session information
AIAgentMessenger.updateSessionInfo(with: anonymousSessionInfo)
// Authenticate with AI agent (same method)
AIAgentMessenger.authenticate(aiAgentId: "your_ai_agent_id") { result in
// Handle authentication
}
Note: To use Anonymous Session, app attribute settings must be enabled in the Sendbird dashboard.
Architecture
Modular Architecture
- MVVM Pattern: Clean separation of concerns
- Event-driven Communication: Delegate, DataSource, HandleEvent patterns
- Module System: Flexible customization through
SBAModuleSet
- @LayoutSlot Pattern: Declarative UI composition
Key Components
- AIAgentMessenger: Main public API
- SBAModuleSet: Customizable module system
- SBATheme: Comprehensive theme management
Known Issues
- Limited support for some SwiftUI features on iOS 14.0
Support
- Sample Apps: iOS AIAgent basic sample
- Technical Support: Sendbird Support
This release is the first GA (Generally Available) version of the Sendbird AI Agent iOS SDK. It is safe for use in production environments.
SendbirdMarkdownUI-v1.0.2
Expanded and Improved Markdown Syntax
Summary
This PR adds comprehensive HTML block element support to MarkdownUI, enabling proper rendering of HTML tables, lists, headings, code blocks, and blockquotes alongside existing Markdown syntax. Additionally includes major stability and iOS 14/15 compatibility improvements to ensure reliable operation across all supported iOS versions.
Problems Solved
HTML Block Support
- HTML tables displayed as plain text: HTML
<table>
elements were not parsed and appeared as raw HTML text - iOS 15 Markdown table parsing disabled: Table extension was only enabled for iOS 16+, causing Markdown tables to fail parsing on iOS 15
- HTML block elements unsupported: All HTML block elements (
<ul>
,<h1>
,<blockquote>
, etc.) were rendered as plain text
Stability & Compatibility Issues
- UnderlineStyle not working: Links and other underlined text not displaying properly
- Runtime crash risks: Force casting and unsafe operations causing app crashes
- FontProperties nil access: Font styling not applied due to uninitialized properties
- iOS 14 color conversion failures: SwiftUI Color to UIColor conversions failing on iOS 14
- Incomplete attribute mapping: Text styling inconsistencies between iOS versions
Changes Made
Core Parser Enhancement
File: MarkdownParser.swift
- Removed iOS version restriction for table extension
- Enabled
"table"
extension for all iOS versions (14+) - 🆕 Replaced all
fatalError
calls with safe fallback handling - 🆕 Added debug warnings for unexpected parser conditions
- 🆕 Fixed force unwrapping of
asciiValue
with nil coalescing
HTML Block Processing
File: BlockNode+View.swift
- Extended
.htmlBlock
case to handle 6 HTML types - Added 10 new functions for HTML detection and parsing
- Implemented proper iOS version branching for optimal rendering
Text Styling Improvements
Files: UnderlineStyle.swift
, Theme+GitHub.swift
- 🆕 Fixed UnderlineStyle not working by correcting CompatLineStyle usage
- 🆕 Added proper indentation for Theme DSL chaining
File: TextStyle.swift
- 🆕 Added comprehensive property mapping between AttributeContainer types
- 🆕 Added bidirectional conversion for underlineStyle, strikethroughStyle
- 🆕 Mapped kern, baselineOffset, link, tracking properties
Safety & Compatibility Enhancements
File: InlineText.swift
- 🆕 Replaced unsafe force casting (
as!
) with safe optional casting (as?
) - 🆕 Added proper fallback handling for type conversion failures
Files: FontDigitVariant.swift
, FontCapsVariant.swift
, FontWeight.swift
, etc.
- 🆕 Added nil checks and initialization for FontProperties across all font styles
- 🆕 Ensured font styling works properly on all iOS versions
File: CompatAttributeContainer.swift
- 🆕 Initialize container with default FontProperties to prevent nil access
Files: ForegroundColor.swift
, BackgroundColor.swift
- 🆕 Added iOS 15+ availability checks for UIColor(Color) conversions
- 🆕 Provided safe fallbacks for iOS 14 color handling
Supported HTML Types
HTML Element | Example | Renders As | iOS 14-15 | iOS 16+ |
---|---|---|---|---|
<table> |
<table><tr><td>data</td></tr></table> |
CompatTableView / TableView | VStack+HStack | Grid-based |
<ul> |
<ul><li>item</li></ul> |
BulletedListView | Supported | Supported |
<ol> |
<ol><li>item</li></ol> |
NumberedListView | Supported | Supported |
<h1> -<h6> |
<h1>Title</h1> |
HeadingView | Supported | Supported |
<pre><code> |
<pre><code>code</code></pre> |
CodeBlockView | Supported | Supported |
<blockquote> |
<blockquote>quote</blockquote> |
BlockquoteView | Supported | Supported |
Technical Implementation
HTML Detection Functions
private func isHTMLTable(_ html: String) -> Bool
private func isHTMLList(_ html: String) -> Bool
private func isHTMLHeading(_ html: String) -> Bool
private func isHTMLCode(_ html: String) -> Bool
private func isHTMLBlockquote(_ html: String) -> Bool
HTML Parsing Functions
private func parseHTMLTable(_ html: String) -> some View
private func parseHTMLList(_ html: String) -> some View
private func parseHTMLHeading(_ html: String) -> some View
private func parseHTMLCode(_ html: String) -> some View
private func parseHTMLBlockquote(_ html: String) -> some View
Content Extraction Functions
private func extractTableData(from html: String) -> (alignments: [RawTableColumnAlignment], rows: [RawTableRow])
private func extractListItems(from html: String) -> [RawListItem]
private func extractHeading(from html: String) -> (level: Int, content: String)
private func extractCodeContent(from html: String) -> String
private func extractBlockquoteContent(from html: String) -> String
private func extractDirectTextOnly(from html: String) -> String
iOS Compatibility & Stability
iOS 14-15: Enhanced Compatibility
- Safe color conversion handling: Prevents crashes from unsupported Color APIs
- Comprehensive font property support: All font styling now works reliably
- Safe fallback handling: Parser no longer crashes on unexpected input
- Uses existing
CompatTableView
andCompatTableCell
- VStack + HStack layout instead of Grid
- Full feature parity with newer versions
iOS 16+: Modern TableView
- Leverages Grid-based TableView for optimal performance
- Additional features like ImageFlow support
- Proper attribute mapping: Consistent styling across all iOS versions
Cross-Version Reliability
- 🆕 No more force casting: All type conversions use safe optional casting
- 🆕 FontProperties always initialized: Prevents nil access issues
- 🆕 Debug warnings instead of crashes: Parser continues operation on unexpected input
- 🆕 Complete attribute synchronization: Text styling consistent across iOS versions
Text Styling Improvements
Fixed Issues
- UnderlineStyle now works properly: Links and underlined text display correctly
- Font properties always applied: Weight, size, style consistently work across iOS versions
- Color handling improved: Safe conversion between SwiftUI Color and UIColor/NSColor
- Attribute mapping complete: All text styling properties properly synchronized
Before vs After
Feature | Before | After |
---|---|---|
Link underlines | ❌ Not displayed | ✅ Properly underlined |
Font weight | ❌ Sometimes ignored | ✅ Always applied |
Text colors | ❌ iOS 14 crashes | ✅ Safe fallbacks |
Parser errors | ❌ App crashes | ✅ Debug warnings + continue |
Nested HTML Handling
For nested HTML structures (e.g., nested lists), the implementation:
- Detects nested
<ul>
/<ol>
tags within list items - Removes nested HTML tags to prevent display issues
- Extracts direct text content only
- Renders as clean, flat list structure
Style Consistency
HTML elements now render identically to their Markdown equivalents:
Feature | Markdown | HTML | Result |
---|---|---|---|
Table | | header | data | |
<table><tr><td>data</td></tr></table> |
Identical table styling |
List | - item |
<ul><li>item</li></ul> |
Identical list styling |
Heading | # title |
<h1>title</h1> |
Identical heading styling |
Code | ```code``` |
<pre><code>code</code></pre> |
Identical code block styling |
Quote | > quote |
<blockquote>quote</blockquote> |
Identical blockquote styling |
Testing
Created test.md
file with comprehensive examples comparing Markdown and HTML syntax side-by-side to verify identical rendering results.
🆕 Additional stability testing:
- Verified safe handling of malformed HTML input
- Confirmed proper fallback behavior on all iOS versions
- Tested font styling consistency across iOS 14-16
- Validated color conversion safety on iOS 14
Limitations
- Nested HTML structures: Complex nested elements are flattened
- Inline HTML:
<code>
,<span>
and other inline elements not supported - HTML attributes:
class
,id
,style
attributes are ignored - Custom HTML: Only standard HTML5 block elements supported
Backward Compatibility
- ✅ No breaking changes to existing API
- ✅ All existing Markdown functionality preserved
- ✅ HTML elements gracefully fall back to text display if unsupported
- ✅ Full iOS 14+ compatibility maintained
- 🆕 Enhanced stability: Reduced crash risks and improved error handling
Performance Impact
- Minimal performance impact through reuse of existing MarkdownUI components
- No new view types created
- Efficient regex-based HTML parsing
- Proper iOS version branching for optimal performance
- 🆕 Safer operations: Reduced runtime overhead from crash prevention
Key Benefits
For Users
- 📱 HTML content renders properly instead of showing raw HTML text
- 🎨 Consistent styling between Markdown and HTML elements
- 💪 More stable app experience with reduced crash risks
- ⚡ Better performance on iOS 14 with proper compatibility handling
For Developers
- 🛡️ Defensive programming: Safe fallbacks prevent production crashes
- 🔧 Better debugging: Debug warnings instead of silent failures
- 📊 Consistent behavior: Reliable text styling across all iOS versions
- 🏗️ Maintainable code: Proper error handling and type safety
Issue
**🎯 This PR not only a...
SendbirdAIAgentMessenger-v0.10.10
Public API Changes
- Exposed
contentAlignment
property inSBAConfig.ConversationList.Header
andSBAConfig.Conversation.Header
as public- Allows external customization of header content alignment in conversation and conversation list modules
- Font properties are now public
- Several font-related properties and accessors were changed to
public
, allowing external modules to read and modify font settings
- Several font-related properties and accessors were changed to
- FontFamily is now exposed
- The FontFamily type and relevant configuration points are now public for broader customization
Features
- Introduced alignment customization for conversation headers - Developers can now set header alignment to leading, center, or trailing via configuration
Bug Fixes
- Fixed layout issues for centered header content - Ensures headers properly center their content when configured
- Resolved inconsistencies in header padding and spacing - Unified constants and logic for more predictable UI presentation
- Theme synchronization fix
- Resolved issues where font or theme changes in DefaultTheme and MessengerInfo were not properly synced
- Markdown bullet point syntax alignment issue fix
- Fixed an issue where Markdown bullet points were centered within the entire content
How to Customize Fonts
You can customize fonts in the following ways:
-
Using Public Properties
- Access and set font properties directly on SBAFont:
SBAFontSet.h1 = UIFont.systemFont(ofSize: 20, weight: .bold) SBAFontSet.h2 = UIFont.systemFont(ofSize: 18, weight: .semibold) SBAFontSet.body1 = UIFont.systemFont(ofSize: 16, weight: .regular) SBAFontSet.button1 = UIFont.systemFont(ofSize: 16, weight: .bold) SBAFontSet.caption1 = UIFont.systemFont(ofSize: 12, weight: .medium)
-
FontFamily Customization
- Assign a new FontFamily to global fontSet:
// Set font family globally for all fonts SBAFontSet.fontFamily = "Avenir"
SendbirdAIAgentCore-v0.10.10
Public API Changes
- Exposed
contentAlignment
property inSBAConfig.ConversationList.Header
andSBAConfig.Conversation.Header
as public- Allows external customization of header content alignment in conversation and conversation list modules
- Font properties are now public
- Several font-related properties and accessors were changed to
public
, allowing external modules to read and modify font settings
- Several font-related properties and accessors were changed to
- FontFamily is now exposed
- The FontFamily type and relevant configuration points are now public for broader customization
Features
- Introduced alignment customization for conversation headers - Developers can now set header alignment to leading, center, or trailing via configuration
Bug Fixes
- Fixed layout issues for centered header content - Ensures headers properly center their content when configured
- Resolved inconsistencies in header padding and spacing - Unified constants and logic for more predictable UI presentation
- Theme synchronization fix
- Resolved issues where font or theme changes in DefaultTheme and MessengerInfo were not properly synced
- Markdown bullet point syntax alignment issue fix
- Fixed an issue where Markdown bullet points were centered within the entire content
How to Customize Fonts
You can customize fonts in the following ways:
-
Using Public Properties
- Access and set font properties directly on SBAFont:
SBAFontSet.h1 = UIFont.systemFont(ofSize: 20, weight: .bold) SBAFontSet.h2 = UIFont.systemFont(ofSize: 18, weight: .semibold) SBAFontSet.body1 = UIFont.systemFont(ofSize: 16, weight: .regular) SBAFontSet.button1 = UIFont.systemFont(ofSize: 16, weight: .bold) SBAFontSet.caption1 = UIFont.systemFont(ofSize: 12, weight: .medium)
-
FontFamily Customization
- Assign a new FontFamily to global fontSet:
// Set font family globally for all fonts SBAFontSet.fontFamily = "Avenir"
SendbirdAIAgentMessenger-v0.10.9
Public API Changes
SBAViewModelSet.ConversationViewModel
is now public - Allows external customization of conversation view modelsSBAConversationViewModel
class and its delegate methods are now public - Enables subclassing and custom implementationsSBAConversationViewController.viewModel
andchannel
properties are now public - Provides public access to conversation state
Features
- Added
reset()
functionality to conversation components - Enables starting new conversations without navigation controller
Improvements
- Enhanced conversation initialization - Refactored
SBAConversationViewModel
to use builder pattern for initialization parameters - Improved "Start New Conversation" flow - Fixed behavior when using ViewControllerSet without navigation controller
Bug Fixes
- Fixed conversation reset when starting new conversation - Properly resets header, list, and input components
- Fixed navigation handling for non-navigation controller scenarios - Gracefully handles cases without
AIAgentNavigationController
SendbirdAIAgentCore-v0.10.9
Public API Changes
SBAViewModelSet.ConversationViewModel
is now public - Allows external customization of conversation view modelsSBAConversationViewModel
class and its delegate methods are now public - Enables subclassing and custom implementationsSBAConversationViewController.viewModel
andchannel
properties are now public - Provides public access to conversation state
Features
- Added
reset()
functionality to conversation components - Enables starting new conversations without navigation controller
Improvements
- Enhanced conversation initialization - Refactored
SBAConversationViewModel
to use builder pattern for initialization parameters - Improved "Start New Conversation" flow - Fixed behavior when using ViewControllerSet without navigation controller
Bug Fixes
- Fixed conversation reset when starting new conversation - Properly resets header, list, and input components
- Fixed navigation handling for non-navigation controller scenarios - Gracefully handles cases without
AIAgentNavigationController
SendbirdAIAgentMessenger-v0.10.8
Improvements
- Added
InitParamsBuilder
forSBAConversationViewController
SBAViewControllerSet.ConversationViewController.init(
aiAgentId: "YOUR_AI_AGENT_ID",
paramsBuilder: { params in
params.language = "ko"
params.countryCode = "KR"
params.context = [:]
}
)
SendbirdAIAgentCore-v0.10.8
Improvements
- Added
InitParamsBuilder
forSBAConversationViewController
SBAViewControllerSet.ConversationViewController.init(
aiAgentId: "YOUR_AI_AGENT_ID",
paramsBuilder: { params in
params.language = "ko"
params.countryCode = "KR"
params.context = [:]
}
)
SendbirdAIAgentMessenger-v0.10.7
Features
-
Conversation Module Customization
- Made
SBAConversationModule.List.Cell
public with customizable subviews:UserNameView
StateView
DateView
- Added public access to message cell types:
AdminMessageCell
UserMessageCell
FileMessageCell
TypingIndicatorMessageCell
UnknownMessageCell
- Made
-
Header Configuration
- Added
ContentAlignment
enum inSBAConfig.Conversation.Header
for content alignment control- Supports
.leading
,.center
,.trailing
alignment options
- Supports
- Added
contentAlignment
property (default:.leading
)
- Added
Improvements
- Common
- Improved memory management with proper cleanup in deinit methods
- Enhanced null safety with optional handling
Bug Fixes
-
View Lifecycle
- Fixed potential crash in
SBAFileViewController
when dismissing - Added safety checks for view controller state before animations
- Fixed infinite recursion in
setupStyles()
- Fixed potential crash in
-
Layout Issues
- Fixed constraint activation timing issues
- Fixed markdown view layout with proper max width handling