Skip to content

Commit d0ee6f0

Browse files
Merge pull request #158 from sendbird/release/3.30.0
Release/3.30.0 -> main
2 parents 2b0696e + 98425a5 commit d0ee6f0

27 files changed

+3228
-527
lines changed

CHANGELOG.md

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

3+
### v3.30.0 (Feb 27, 2025)
4+
5+
## Improvements
6+
### Minimum iOS Version Requirement Updated
7+
- The minimum supported iOS version has been raised from iOS 12 to **iOS 13**.
8+
- No changes to functionality—just ensuring compatibility with modern iOS environments.
9+
310
### v3.29.2 (Feb 10, 2025)
411

512
## New Interfaces

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.23.1"
22+
from: "4.25.0"
2323
),
2424
],
2525
targets: [
2626
.binaryTarget(
2727
name: "SendbirdUIKit",
28-
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.29.2/SendbirdUIKit.xcframework.zip", // SendbirdUIKit_URL
29-
checksum: "bd2b10a922a2f9c4ddd091ef6ee548e7fbaec8b89575c0d7c6586c9201f1e850" // SendbirdUIKit_CHECKSUM
28+
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.30.0/SendbirdUIKit.xcframework.zip", // SendbirdUIKit_URL
29+
checksum: "b6c87631c28690713a9260e0fea87b820801f6f65645573e66e806f697ac6ea3" // SendbirdUIKit_CHECKSUM
3030
),
3131
.binaryTarget(
3232
name: "SendbirdUIMessageTemplate",
33-
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.29.2/SendbirdUIMessageTemplate.xcframework.zip", // SendbirdUIMessageTemplate_URL
34-
checksum: "2dfc617fbec3b617b8b18f44fdda10cf6c3f2e75ec156574b1eb734cf5546bc1" // SendbirdUIMessageTemplate_CHECKSUM
33+
url: "https://github.com/sendbird/sendbird-uikit-ios/releases/download/3.30.0/SendbirdUIMessageTemplate.xcframework.zip", // SendbirdUIMessageTemplate_URL
34+
checksum: "10a2e3f694bf99feab335a3ee76363b0a7d7ffc96a0acb219ef56e0be6cc02b6" // 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.23.1+
63+
- Sendbird Chat SDK for iOS 4.25.0+
6464

6565
<br />
6666

Sample/QuickStart.xcodeproj/project.pbxproj

Lines changed: 3084 additions & 250 deletions
Large diffs are not rendered by default.

Sample/QuickStart.xcodeproj/xcshareddata/xcschemes/QuickStart.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1250"
3+
LastUpgradeVersion = "1430"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

Sample/QuickStart/Base/GroupChannel/MySettings/UserInfoTitleView.swift

Lines changed: 33 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -102,73 +102,39 @@ class UserInfoTitleView: UIView {
102102
constant: 23)
103103
)
104104

105-
if #available(iOS 11.0, *) {
106-
layoutConstraints.append(self.lineView.leadingAnchor.constraint(
107-
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
108-
constant: 16)
109-
)
110-
layoutConstraints.append(self.lineView.trailingAnchor.constraint(
111-
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
112-
constant: -16)
113-
)
114-
layoutConstraints.append(self.userIdTitleLabel.leadingAnchor.constraint(
115-
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
116-
constant: 16)
117-
)
118-
layoutConstraints.append(self.userIdTitleLabel.trailingAnchor.constraint(
119-
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
120-
constant: -16)
121-
)
122-
layoutConstraints.append(self.userIdLabel.leadingAnchor.constraint(
123-
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
124-
constant: 16)
125-
)
126-
layoutConstraints.append(self.userIdLabel.trailingAnchor.constraint(
127-
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
128-
constant: -16)
129-
)
130-
layoutConstraints.append(self.bottomLineView.leadingAnchor.constraint(
131-
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
132-
constant: 16)
133-
)
134-
layoutConstraints.append(self.bottomLineView.trailingAnchor.constraint(
135-
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
136-
constant: -16)
137-
)
138-
} else {
139-
layoutConstraints.append(self.lineView.leadingAnchor.constraint(
140-
equalTo: self.leadingAnchor,
141-
constant: 16)
142-
)
143-
layoutConstraints.append(self.lineView.trailingAnchor.constraint(
144-
equalTo: self.trailingAnchor,
145-
constant: -16)
146-
)
147-
layoutConstraints.append(self.userIdTitleLabel.leadingAnchor.constraint(
148-
equalTo: self.leadingAnchor,
149-
constant: 16)
150-
)
151-
layoutConstraints.append(self.userIdTitleLabel.trailingAnchor.constraint(
152-
equalTo: self.trailingAnchor,
153-
constant: -16)
154-
)
155-
layoutConstraints.append(self.userIdLabel.leadingAnchor.constraint(
156-
equalTo: self.leadingAnchor,
157-
constant: 16)
158-
)
159-
layoutConstraints.append(self.userIdLabel.trailingAnchor.constraint(
160-
equalTo: self.trailingAnchor,
161-
constant: -16)
162-
)
163-
layoutConstraints.append(self.bottomLineView.leadingAnchor.constraint(
164-
equalTo: self.leadingAnchor,
165-
constant: 16)
166-
)
167-
layoutConstraints.append(self.bottomLineView.trailingAnchor.constraint(
168-
equalTo: self.trailingAnchor,
169-
constant: -16)
170-
)
171-
}
105+
layoutConstraints.append(self.lineView.leadingAnchor.constraint(
106+
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
107+
constant: 16)
108+
)
109+
layoutConstraints.append(self.lineView.trailingAnchor.constraint(
110+
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
111+
constant: -16)
112+
)
113+
layoutConstraints.append(self.userIdTitleLabel.leadingAnchor.constraint(
114+
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
115+
constant: 16)
116+
)
117+
layoutConstraints.append(self.userIdTitleLabel.trailingAnchor.constraint(
118+
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
119+
constant: -16)
120+
)
121+
layoutConstraints.append(self.userIdLabel.leadingAnchor.constraint(
122+
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
123+
constant: 16)
124+
)
125+
layoutConstraints.append(self.userIdLabel.trailingAnchor.constraint(
126+
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
127+
constant: -16)
128+
)
129+
layoutConstraints.append(self.bottomLineView.leadingAnchor.constraint(
130+
equalTo: self.safeAreaLayoutGuide.leadingAnchor,
131+
constant: 16)
132+
)
133+
layoutConstraints.append(self.bottomLineView.trailingAnchor.constraint(
134+
equalTo: self.safeAreaLayoutGuide.trailingAnchor,
135+
constant: -16)
136+
)
137+
172138
layoutConstraints.append(self.userIdTitleLabel.topAnchor.constraint(
173139
equalTo: self.lineView.bottomAnchor,
174140
constant: 15)

Sample/QuickStart/Customize/Manager/Common/SampleManager.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
import UIKit
1010
import SendbirdChatSDK
11+
#if canImport(SendbirdUIKit)
12+
import SendbirdUIKit
13+
#endif
1114

1215
// This function handles alertController to be used in the sample app.
1316
class AlertManager: NSObject {

Sample/QuickStart/Customize/View/Channel/ChannelVC_CustomHeader.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
import UIKit
1010
import SendbirdChatSDK
11+
#if canImport(SendbirdUIKit)
12+
import SendbirdUIKit
13+
#endif
1114

1215
// MARK: - Module
1316
class CustomChannelModule { }

Sample/QuickStart/Customize/View/Channel/ChannelVC_CustomMessageMenuItem.swift

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,11 @@ class CustomGroupChannelModuleList: SBUGroupChannelModule.List {
8181
private func createReportMessageMenuItem(for message: BaseMessage) -> SBUMenuItem {
8282
var iconImage: UIImage?
8383

84-
if #available(iOS 13.0, *) {
85-
let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold)
86-
iconImage = UIImage(
87-
systemName: "exclamationmark.triangle",
88-
withConfiguration: symbolConfiguration
89-
)
90-
}
84+
let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold)
85+
iconImage = UIImage(
86+
systemName: "exclamationmark.triangle",
87+
withConfiguration: symbolConfiguration
88+
)
9189

9290
let menuItem = SBUMenuItem(
9391
title: "Report",

Sample/QuickStart/Customize/View/OpenChannel/OpenChannelVC_CustomMessageMenuItem.swift

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,12 @@ class CustomOpenChannelModuleList: SBUOpenChannelModule.List {
8181
private func createReportMessageMenuItem(for message: BaseMessage) -> SBUMenuItem {
8282
var iconImage: UIImage?
8383

84-
if #available(iOS 13.0, *) {
85-
let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold)
86-
if let image = UIImage(
87-
systemName: "exclamationmark.triangle",
88-
withConfiguration: symbolConfiguration
89-
)?.withRenderingMode(.alwaysOriginal) {
90-
iconImage = image.sbu_with(tintColor: SBUColorSet.primary300)
91-
}
84+
let symbolConfiguration = UIImage.SymbolConfiguration(pointSize: 24, weight: .bold)
85+
if let image = UIImage(
86+
systemName: "exclamationmark.triangle",
87+
withConfiguration: symbolConfiguration
88+
)?.withRenderingMode(.alwaysOriginal) {
89+
iconImage = image.sbu_with(tintColor: SBUColorSet.primary300)
9290
}
9391

9492
let menuItem = SBUMenuItem(

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.23.1
11+
from: 4.25.0
1212
SendbirdUIKit:
1313
url: https://github.com/sendbird/sendbird-uikit-ios-spm
14-
from: 3.29.2
14+
from: 3.30.0
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.29.2'
41+
MARKETING_VERSION: '3.30.0'
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.29.2"
3+
s.version = "3.30.0"
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 => "0ee8ef0e3819088fcb348b0373107ec302083b60" }
19+
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendBirdUIKit.zip", :sha1 => "64f5bcc2f19eb07a1f3377a23cca9d8fdf2c4cd6" }
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.23.1"
24-
s.dependency "SendbirdUIMessageTemplate", ">= 3.29.2"
23+
s.dependency "SendbirdChatSDK", ">= 4.25.0"
24+
s.dependency "SendbirdUIMessageTemplate", ">= 3.30.0"
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.29.2"
3+
s.version = "3.30.0"
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 => "6185fbdb1f69ff451c4665d6bc25503f9f96a3dd" }
18+
s.source = { :http => "https://github.com/sendbird/sendbird-uikit-ios/releases/download/#{s.version}/SendbirdUIMessageTemplate.zip", :sha1 => "0dfdb45fb8d87d8d9c1ea04e0f264f17187ec728" }
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.23.1"
22+
s.dependency "SendbirdChatSDK", ">= 4.25.0"
2323
s.ios.library = "icucore"
2424
end

Sources/Extension/Shared/UIApplication+SBUIKit.swift

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,8 @@ import UIKit
1111
extension UIApplication {
1212
/// This computed property returns the current active window of the application.
1313
public var currentWindow: UIWindow? {
14-
if #available(iOS 13.0, *) {
15-
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
16-
let window = windowScene?.windows.first { $0.isKeyWindow }
17-
return window
18-
} else {
19-
return UIApplication.shared.keyWindow
20-
}
14+
let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene
15+
let window = windowScene?.windows.first { $0.isKeyWindow }
16+
return window
2117
}
2218
}

Sources/Extension/Shared/UIImage+SBUIKit.swift

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -16,31 +16,7 @@ public extension UIImage {
1616
/// - Returns: `Uiimage` objects with tint color
1717
func sbu_with(tintColor: UIColor?) -> UIImage {
1818
guard let tintColor = tintColor else { return self }
19-
if #available(iOS 13.0, *) {
20-
return withTintColor(tintColor)
21-
} else {
22-
let image = self
23-
UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
24-
tintColor.setFill()
25-
let context = UIGraphicsGetCurrentContext()
26-
context?.translateBy(x: 0, y: image.size.height)
27-
context?.scaleBy(x: 1.0, y: -1.0)
28-
context?.setBlendMode(CGBlendMode.normal)
29-
let rect = CGRect(
30-
origin: .zero,
31-
size: CGSize(width: image.size.width, height: image.size.height)
32-
)
33-
context?.clip(to: rect, mask: image.cgImage!)
34-
context?.fill(rect)
35-
36-
guard let newImage = UIGraphicsGetImageFromCurrentImageContext() else {
37-
return self
38-
}
39-
40-
UIGraphicsEndImageContext()
41-
42-
return newImage
43-
}
19+
return withTintColor(tintColor)
4420
}
4521

4622
/// This applies the tint color to the `UIImage` with `forTemplate` option.

Sources/Extension/Shared/UIView+SBUIKit.swift

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,15 +1332,9 @@ private var _sementicContentAttributeValue: UISemanticContentAttribute?
13321332
extension UIView {
13331333
static var currentSemanticContentAttribute: UISemanticContentAttribute {
13341334
if let value = _sementicContentAttributeValue { return value }
1335-
if #available(iOS 13.0, *) {
1336-
let value = UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.rootViewController?.view.semanticContentAttribute ?? .unspecified
1337-
_sementicContentAttributeValue = value
1338-
return value
1339-
} else {
1340-
let value = UIApplication.shared.keyWindow?.rootViewController?.view.semanticContentAttribute ?? .unspecified
1341-
_sementicContentAttributeValue = value
1342-
return value
1343-
}
1335+
let value = UIApplication.shared.windows.first(where: { $0.isKeyWindow })?.rootViewController?.view.semanticContentAttribute ?? .unspecified
1336+
_sementicContentAttributeValue = value
1337+
return value
13441338
}
13451339

13461340
static func getCurrentLayoutDirection(view: UIView? = nil) -> UIUserInterfaceLayoutDirection {

Sources/Extension/UINavigationController+SBUIKit.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ extension UINavigationController {
1919
/// - Since: 2.1.14
2020
@objc
2121
open func sbu_setupNavigationBarAppearance(tintColor: UIColor, shadowColor: UIColor? = nil) {
22-
guard #available(iOS 13.0, *) else { return }
2322
let appearance = UINavigationBarAppearance()
2423
appearance.configureWithOpaqueBackground()
2524
appearance.backgroundColor = tintColor

Sources/Info.plist

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>CFBundleDevelopmentRegion</key>
6+
<string>$(DEVELOPMENT_LANGUAGE)</string>
7+
<key>CFBundleExecutable</key>
8+
<string>$(EXECUTABLE_NAME)</string>
9+
<key>CFBundleIdentifier</key>
10+
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11+
<key>CFBundleInfoDictionaryVersion</key>
12+
<string>6.0</string>
13+
<key>CFBundleName</key>
14+
<string>$(PRODUCT_NAME)</string>
15+
<key>CFBundlePackageType</key>
16+
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
17+
<key>CFBundleShortVersionString</key>
18+
<string>$(MARKETING_VERSION)</string>
19+
<key>CFBundleVersion</key>
20+
<string>$(CURRENT_PROJECT_VERSION)</string>
21+
<key>SBUAppVersion</key>
22+
<string>$(SBU_APP_VERSION)</string>
23+
</dict>
24+
</plist>

0 commit comments

Comments
 (0)