Skip to content

Commit bb92d7d

Browse files
Merge pull request #178 from sendbird/release/3.32.4
Release/3.32.4 -> main
2 parents de6dee2 + 23afc0c commit bb92d7d

44 files changed

Lines changed: 571 additions & 99 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CHANGELOG.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,27 @@
11
# Changelog
22

3+
### v3.32.4 (Nov 19, 2025)
4+
5+
# SendbirdUIKit
6+
7+
### New feature and interfaces
8+
- Added connection-delayed handling: new dialog with live countdown and a new event (`didDelayConnection(retryAfter:)`) to observe retry timers.
9+
- Use below interfaces to customize dialog text.
10+
- `SBUStringSet.Alert_Busy_Server_Title`
11+
- `SBUStringSet.Alert_Busy_Server_Message`
12+
- To use this feature, `SendbirdChatSDK 4.34.1` or above is required.
13+
14+
### Changed
15+
- Updated dependency SDK versions to latest stable releases
16+
- SendbirdChatSDK: v4.34.1
17+
18+
# SendbirdUIMessageTemplate
19+
20+
### Changed
21+
- Updated dependency SDK versions to latest stable releases
22+
- SendbirdChatSDK: v4.34.1
23+
24+
325
### v3.32.3 (Oct 30, 2025)
426

527
# SendbirdUIKit

Package.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,19 @@ let package = Package(
1919
.package(
2020
name: "SendbirdChatSDK",
2121
url: "https://github.com/sendbird/sendbird-chat-sdk-ios",
22-
from: "4.31.1"
22+
from: "4.34.1"
2323
),
2424
],
2525
targets: [
2626
.binaryTarget(
2727
name: "SendbirdUIKit",
28-
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.32.3/SendbirdUIKit.xcframework.zip", // SendbirdUIKit_URL
29-
checksum: "ec4acc31a3b471ae963853e4ca37e7ac6cabc37869a79b009b4c9151d2481bf1" // SendbirdUIKit_CHECKSUM
28+
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.32.4/SendbirdUIKit.xcframework.zip", // SendbirdUIKit_URL
29+
checksum: "7484a96e6d9c7b17e1fced2c0d512a51463420bf76d715b210b1cc27f269643f" // SendbirdUIKit_CHECKSUM
3030
),
3131
.binaryTarget(
3232
name: "SendbirdUIMessageTemplate",
33-
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.32.3/SendbirdUIMessageTemplate.xcframework.zip", // SendbirdUIMessageTemplate_URL
34-
checksum: "b67e09d27f8cf8877b21c5340859a3510633fa8e1ebcb71abae86b4903f892c6" // SendbirdUIMessageTemplate_CHECKSUM
33+
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.32.4/SendbirdUIMessageTemplate.xcframework.zip", // SendbirdUIMessageTemplate_URL
34+
checksum: "fac7a3716593cbd70706cb10dd86074f631dbc24ae594728dc2aae9ecc16f0de" // SendbirdUIMessageTemplate_CHECKSUM
3535
),
3636
.target(
3737
name: "SendbirdUIKitTarget",

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ The minimum requirements for Sendbird UIKit for iOS are:
6060

6161
- iOS 13+
6262
- Swift 5.10+
63-
- Sendbird Chat SDK for iOS 4.31.1+
63+
- Sendbird Chat SDK for iOS 4.34.1+
6464

6565
<br />
6666

Sample/QuickStart.xcodeproj/project.pbxproj

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@
264264
822A1F87107E0C4A095CAD7C /* SBUToastView.Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF5DE2B2666D2B65CDA0152 /* SBUToastView.Item.swift */; };
265265
8489DD47060FE2B39C0945AF /* SBUCreateChannelTypeSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF10E0EC450DD894DA49B5AC /* SBUCreateChannelTypeSelector.swift */; };
266266
8508BBA0776BF1201CAE2EE2 /* SBUBaseMessageCellParams.Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF29F40C4B325172B9267249 /* SBUBaseMessageCellParams.Deprecated.swift */; };
267+
857EDC6D0180FA08A85A2399 /* SBUBaseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 546F7670FE01EF913C6CADF2 /* SBUBaseViewModel.swift */; };
267268
8672A0D7AFB0A030EC641963 /* SBUFormView.Deprecated.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F4C501F576D92788E3942DC /* SBUFormView.Deprecated.swift */; };
268269
86B289A332CC444E839C21EB /* SBUMessageThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2C8B9B8ACEF7BFD4E0EDABF /* SBUMessageThreadViewModel.swift */; };
269270
87404C792A8BD0A1441DD8BF /* PaddingLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 39CEC371C1FBADB87EA861F0 /* PaddingLabel.swift */; };
@@ -763,6 +764,7 @@
763764
5272D0E7C0F343DB343FDB98 /* SBUCreateChannelModule.Header.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SBUCreateChannelModule.Header.swift; sourceTree = "<group>"; };
764765
5408E1E16164054B0ED584D6 /* SBUUserListModule.Header.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SBUUserListModule.Header.swift; sourceTree = "<group>"; };
765766
5437192861219B555FFA2612 /* SBUBaseMessageCell.Feedback.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SBUBaseMessageCell.Feedback.swift; sourceTree = "<group>"; };
767+
546F7670FE01EF913C6CADF2 /* SBUBaseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SBUBaseViewModel.swift; sourceTree = "<group>"; };
766768
54738A17EFAA5A55C27FCBA3 /* QuickStart.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = QuickStart.entitlements; sourceTree = "<group>"; };
767769
550493C492FC37F4EDD96D6F /* SBUMessageSearchModule.Deprecated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SBUMessageSearchModule.Deprecated.swift; sourceTree = "<group>"; };
768770
5526A6E24F389AC90F29DF8B /* MainView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainView.xib; sourceTree = "<group>"; };
@@ -2282,6 +2284,7 @@
22822284
8438D2D52659CF112560D41A /* Common */ = {
22832285
isa = PBXGroup;
22842286
children = (
2287+
546F7670FE01EF913C6CADF2 /* SBUBaseViewModel.swift */,
22852288
F3A62A8E1B23FB3548AC64F8 /* SBUCommonDelegate.swift */,
22862289
);
22872290
path = Common;
@@ -3419,6 +3422,7 @@
34193422
DF2822F72D7BB9D71F5D0BFA /* SBUBaseSelectUserViewModel.swift in Sources */,
34203423
6105042311AFF0FB83091527 /* SBUBaseViewController.Unavailable.swift in Sources */,
34213424
9E040C5061E7D3576D0A0FDE /* SBUBaseViewController.swift in Sources */,
3425+
857EDC6D0180FA08A85A2399 /* SBUBaseViewModel.swift in Sources */,
34223426
2D13A06C3DCEEDDB3C515FE0 /* SBUBottomSheetController.swift in Sources */,
34233427
4EFF71F28765CF5DAF46860E /* SBUCacheManager.Config.swift in Sources */,
34243428
5DF4F31C8AE6356CBCC1378D /* SBUCacheManager.DiskCache.swift in Sources */,
@@ -3853,7 +3857,7 @@
38533857
"@executable_path/Frameworks",
38543858
"@loader_path/Frameworks",
38553859
);
3856-
MARKETING_VERSION = 3.32.3;
3860+
MARKETING_VERSION = 3.32.4;
38573861
PRODUCT_BUNDLE_IDENTIFIER = com.sendbird.uikit.sample;
38583862
PRODUCT_NAME = "$(TARGET_NAME)";
38593863
SDKROOT = iphoneos;
@@ -3881,7 +3885,7 @@
38813885
"@executable_path/Frameworks",
38823886
"@loader_path/Frameworks",
38833887
);
3884-
MARKETING_VERSION = 3.32.3;
3888+
MARKETING_VERSION = 3.32.4;
38853889
PRODUCT_BUNDLE_IDENTIFIER = com.sendbird.uikit.sample;
38863890
PRODUCT_NAME = "$(TARGET_NAME)";
38873891
SDKROOT = iphoneos;
@@ -4026,7 +4030,7 @@
40264030
"@executable_path/Frameworks",
40274031
"@loader_path/Frameworks",
40284032
);
4029-
MARKETING_VERSION = 3.32.3;
4033+
MARKETING_VERSION = 3.32.4;
40304034
PRODUCT_BUNDLE_IDENTIFIER = com.sendbird.uikit.sample.NotificationService;
40314035
PRODUCT_NAME = "$(TARGET_NAME)";
40324036
SDKROOT = iphoneos;
@@ -4054,7 +4058,7 @@
40544058
"@executable_path/Frameworks",
40554059
"@loader_path/Frameworks",
40564060
);
4057-
MARKETING_VERSION = 3.32.3;
4061+
MARKETING_VERSION = 3.32.4;
40584062
PRODUCT_BUNDLE_IDENTIFIER = com.sendbird.uikit.sample.NotificationService;
40594063
PRODUCT_NAME = "$(TARGET_NAME)";
40604064
SDKROOT = iphoneos;
@@ -4103,15 +4107,15 @@
41034107
repositoryURL = "https://github.com/sendbird/sendbird-uikit-ios-spm";
41044108
requirement = {
41054109
kind = upToNextMajorVersion;
4106-
minimumVersion = 3.32.3;
4110+
minimumVersion = 3.32.4;
41074111
};
41084112
};
41094113
A4CD81EE92C875D0E22463C6 /* XCRemoteSwiftPackageReference "sendbird-chat-sdk-ios" */ = {
41104114
isa = XCRemoteSwiftPackageReference;
41114115
repositoryURL = "https://github.com/sendbird/sendbird-chat-sdk-ios";
41124116
requirement = {
41134117
kind = upToNextMajorVersion;
4114-
minimumVersion = 4.31.1;
4118+
minimumVersion = 4.34.1;
41154119
};
41164120
};
41174121
/* End XCRemoteSwiftPackageReference section */

Sample/QuickStart/MainViews/ViewControllers/BasicUsages/BasicUsagesViewController.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,25 @@ extension BasicUsagesViewController: UserEventDelegate {
159159

160160
extension BasicUsagesViewController: ConnectionDelegate {
161161
func didSucceedReconnection() {
162+
print("[connection delegate] reconnected")
162163
self.updateUnreadCount()
164+
SBUAlertView.dismiss()
165+
}
166+
167+
func didDelayConnection(retryAfter: UInt) {
168+
print("[connection delegate] connection delayed")
169+
170+
SBUAlertView.show(
171+
title: SBUStringSet.Alert_Busy_Server_Title,
172+
message: SBUStringSet.Alert_Busy_Server_Message,
173+
cancelButtonItem: nil,
174+
delegate: nil,
175+
countDownSeconds: retryAfter,
176+
enableBackgroundTapToDismiss: false
177+
)
178+
}
179+
180+
func didStartReconnection() {
181+
print("[connection delegate] started reconnecting")
163182
}
164183
}

Sample/project.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ options:
88
packages:
99
SendbirdChatSDK:
1010
url: https://github.com/sendbird/sendbird-chat-sdk-ios
11-
from: 4.31.1
11+
from: 4.34.1
1212
SendbirdUIKit:
1313
url: https://github.com/sendbird/sendbird-uikit-ios-spm
14-
from: 3.32.3
14+
from: 3.32.4
1515
schemes:
1616
QuickStart:
1717
analyze:
@@ -38,7 +38,7 @@ settingGroups:
3838
FRAMEWORK_SEARCH_PATHS: ''
3939
IPHONEOS_DEPLOYMENT_TARGET: '13.0'
4040
LD_RUNPATH_SEARCH_PATHS: ["$(inherited)", "@executable_path/Frameworks", "@loader_path/Frameworks"]
41-
MARKETING_VERSION: '3.32.3'
41+
MARKETING_VERSION: '3.32.4'
4242
PRODUCT_NAME: "$(TARGET_NAME)"
4343
SDKROOT: iphoneos
4444
SWIFT_VERSION: '5.0'

SendBirdUIKit.podspec

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "SendBirdUIKit"
3-
s.version = "3.32.3"
3+
s.version = "3.32.4"
44
s.summary = "UIKit based on SendbirdChatSDK"
55
s.description = "Sendbird UIKit is a framework composed of basic UI components based on SendbirdChatSDK."
66
s.homepage = "https://sendbird.com"
@@ -16,11 +16,11 @@ Pod::Spec.new do |s|
1616
"Kai" => "kai.lee@sendbird.com"
1717
}
1818
s.platform = :ios, "13.0"
19-
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendBirdUIKit.zip", :sha1 => "8dfd977a2031ba8f855f45831af54b0d807a5893" }
19+
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendBirdUIKit.zip", :sha1 => "316aae725855022c75cc3ba6be6e3ce38e4cee6b" }
2020
s.ios.vendored_frameworks = 'SendBirdUIKit/SendbirdUIKit.xcframework'
2121
s.ios.frameworks = ["UIKit", "Foundation", "CoreData", "SendbirdChatSDK"]
2222
s.requires_arc = true
23-
s.dependency "SendbirdChatSDK", ">= 4.31.1"
24-
s.dependency "SendbirdUIMessageTemplate", ">= 3.32.3"
23+
s.dependency "SendbirdChatSDK", ">= 4.34.1"
24+
s.dependency "SendbirdUIMessageTemplate", ">= 3.32.4"
2525
s.ios.library = "icucore"
2626
end

SendbirdUIMessageTemplate.podspec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "SendbirdUIMessageTemplate"
3-
s.version = "3.32.3"
3+
s.version = "3.32.4"
44
s.summary = "SendbirdUIMessageTemplate based on SendbirdChatSDK"
55
s.description = "Sendbird UI MessageTemplate is a framework composed of basic Message Template UI components based on SendbirdChatSDK."
66
s.homepage = "https://sendbird.com"
@@ -15,10 +15,10 @@ Pod::Spec.new do |s|
1515
"Kai" => "kai.lee@sendbird.com"
1616
}
1717
s.platform = :ios, "13.0"
18-
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendbirdUIMessageTemplate.zip", :sha1 => "0e506ad26514d6b238ab44846d9154c02bf98da2" }
18+
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendbirdUIMessageTemplate.zip", :sha1 => "4bed46771babf5b439c897265bac6d8ef03f7102" }
1919
s.ios.vendored_frameworks = 'SendbirdUIMessageTemplate/SendbirdUIMessageTemplate.xcframework'
2020
s.ios.frameworks = ["UIKit", "Foundation", "CoreData", "SendbirdChatSDK"]
2121
s.requires_arc = true
22-
s.dependency "SendbirdChatSDK", ">= 4.31.1"
22+
s.dependency "SendbirdChatSDK", ">= 4.34.1"
2323
s.ios.library = "icucore"
2424
end

Sources/Constant/SBUStringSet.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ public class SBUStringSet {
4646
public static var Alert_Allow_PhotoLibrary_Access_Message = "PhotoLibrary access required to get your photos and videos"
4747
/// A text used to ask the user permission for microphone usage.
4848
public static var Alert_Allow_Microphone_Access = "Please allow microphone usage from settings"
49+
50+
public static var Alert_Busy_Server_Title = "Something went wrong.\nYou'll be reconnected \nshortly."
51+
public static var Alert_Busy_Server_Message = "Estimated waiting time:"
4952

5053
// MARK: - Date Format
5154
public static var Date_Yesterday = "Yesterday"

Sources/View/Channel/SBUBaseChannelViewController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import SafariServices
1414
import PhotosUI
1515

1616
@objcMembers
17-
open class SBUBaseChannelViewController: SBUBaseViewController, SBUBaseChannelViewModelDelegate, SBUBaseChannelModuleHeaderDelegate, SBUBaseChannelModuleListDelegate, SBUBaseChannelModuleListDataSource, SBUBaseChannelModuleInputDelegate, SBUBaseChannelModuleInputDataSource, SBUBaseChannelViewModelDataSource, UIGestureRecognizerDelegate, UIViewControllerTransitioningDelegate, PHPickerViewControllerDelegate, UIImagePickerControllerDelegate, UIDocumentPickerDelegate, UIDocumentInteractionControllerDelegate, SBUSelectablePhotoViewDelegate, SBUFileViewControllerDelegate, SBUCommonViewModelDelegate, SBUAlertViewDelegate {
17+
open class SBUBaseChannelViewController: SBUBaseViewController, SBUBaseChannelViewModelDelegate, SBUBaseChannelModuleHeaderDelegate, SBUBaseChannelModuleListDelegate, SBUBaseChannelModuleListDataSource, SBUBaseChannelModuleInputDelegate, SBUBaseChannelModuleInputDataSource, SBUBaseChannelViewModelDataSource, UIGestureRecognizerDelegate, UIViewControllerTransitioningDelegate, PHPickerViewControllerDelegate, UIImagePickerControllerDelegate, UIDocumentPickerDelegate, UIDocumentInteractionControllerDelegate, SBUSelectablePhotoViewDelegate, SBUFileViewControllerDelegate, SBUAlertViewDelegate {
1818

1919
// MARK: - UI Properties (Public)
2020
public var baseHeaderComponent: SBUBaseChannelModule.Header?
@@ -1490,11 +1490,11 @@ open class SBUBaseChannelViewController: SBUBaseViewController, SBUBaseChannelVi
14901490
open func didDismissAlertView() { }
14911491

14921492
// MARK: - SBUCommonViewModelDelegate
1493-
open func shouldUpdateLoadingState(_ isLoading: Bool) {
1493+
open override func shouldUpdateLoadingState(_ isLoading: Bool) {
14941494
self.showLoading(isLoading)
14951495
}
14961496

1497-
open func didReceiveError(_ error: SBError?, isBlocker: Bool) {
1497+
open override func didReceiveError(_ error: SBError?, isBlocker: Bool) {
14981498
self.showLoading(false)
14991499
if self.baseViewModel?.fullMessageList.isEmpty == true, isBlocker {
15001500
self.baseListComponent?.updateEmptyView(type: .error)

0 commit comments

Comments
 (0)