Skip to content

4.80.0 Release #861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jun 17, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/cron-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
setup_runtime: false
- ios: 17.5
xcode: 15.4
os: macos-15
os: macos-14
device: "iPhone 15 Pro"
setup_runtime: false
- ios: 16.4
Expand Down Expand Up @@ -112,7 +112,7 @@ jobs:

build-old-xcode:
name: Build SDKs (Xcode 15)
runs-on: macos-15
runs-on: macos-14
env:
XCODE_VERSION: "15.4"
steps:
Expand All @@ -122,8 +122,6 @@ jobs:
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
- uses: actions/checkout@v3.1.0
- uses: ./.github/actions/ruby-cache
- name: List Xcode versions
run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'"
timeout-minutes: 25
- name: Build SwiftUI
run: bundle exec fastlane test_ui device:"iPhone 15" build_for_testing:true
Expand All @@ -137,7 +135,7 @@ jobs:

automated-code-review:
name: Automated Code Review
runs-on: macos-15
runs-on: macos-14
env:
XCODE_VERSION: "15.4"
steps:
Expand Down
32 changes: 32 additions & 0 deletions .github/workflows/merge-main-to-develop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: "Merge main to develop"

on:
workflow_dispatch:

permissions:
contents: write

jobs:
merge:
name: Merge
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.1
with:
token: ${{ secrets.ADMIN_API_TOKEN }}
fetch-depth: 0

- uses: ./.github/actions/ruby-cache

- run: bundle exec fastlane merge_main
env:
GITHUB_TOKEN: ${{ secrets.ADMIN_API_TOKEN }}

- uses: 8398a7/action-slack@v3
if: failure()
with:
status: ${{ job.status }}
text: "⚠️ <!subteam^S030AAHLDLN>, the merge of `main` to `develop` failed on CI. Consider using this command locally: `bundle exec fastlane merge_main`"
fields: repo,commit,author,workflow
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
8 changes: 0 additions & 8 deletions .github/workflows/release-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,3 @@ jobs:
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }}
run: bundle exec fastlane publish_release --verbose

- uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: "🎉 The new release has been shipped! 🚢\n\n⚠️ <!subteam^S030AAHLDLN>, don't forget to merge `main` back to `develop` from `localhost` using the command: `bundle exec fastlane merge_main`"
fields: repo
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
8 changes: 3 additions & 5 deletions .github/workflows/smoke-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,15 +46,15 @@ jobs:

automated-code-review:
name: Automated Code Review
runs-on: macos-15
runs-on: macos-14
if: ${{ github.event.inputs.record_snapshots != 'true' }}
env:
XCODE_VERSION: "15.4"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
- name: Run Danger
run: bundle exec danger
run: bundle exec fastlane lint_pr
- name: Run Fastlane Linting
run: bundle exec fastlane rubocop
- name: Run SwiftFormat Linting
Expand All @@ -65,7 +65,7 @@ jobs:

build-xcode15:
name: Build SDKs (Xcode 15)
runs-on: macos-15
runs-on: macos-14
if: ${{ github.event.inputs.record_snapshots != 'true' }}
env:
XCODE_VERSION: "15.4"
Expand All @@ -76,8 +76,6 @@ jobs:
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
- uses: actions/checkout@v3.1.0
- uses: ./.github/actions/ruby-cache
- name: List Xcode versions
run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'"
timeout-minutes: 25
- name: Build SwiftUI
run: bundle exec fastlane test_ui device:"iPhone 15" build_for_testing:true
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,19 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### 🔄 Changed

# [4.80.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.80.0)
_June 17, 2025_

### 🐞 Fixed
- Fix showing unmute user message action just after muting the user [#847](https://github.com/GetStream/stream-chat-swiftui/pull/847)
- Fix rare concurrency crash in `ChannelAvatarsMerger.createMergedAvatar(from:)` [#858](https://github.com/GetStream/stream-chat-swiftui/pull/858)

# [4.79.1](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.79.1)
_June 03, 2025_

### 🐞 Fixed
- Fix `ChatChannelView` keyboard background not using color from palette [#845](https://github.com/GetStream/stream-chat-swiftui/pull/845)
- Fix removing new messages separator when scrolling in the channel view [#846](https://github.com/GetStream/stream-chat-swiftui/pull/846)

# [4.79.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.79.0)
_May 29, 2025_
Expand Down
46 changes: 23 additions & 23 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,28 @@ GEM
artifactory (3.0.17)
ast (2.4.3)
atomos (0.1.3)
aws-eventstream (1.3.2)
aws-partitions (1.1091.0)
aws-sdk-core (3.222.2)
aws-eventstream (1.4.0)
aws-partitions (1.1114.0)
aws-sdk-core (3.225.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.99.0)
aws-sdk-core (~> 3, >= 3.216.0)
aws-sdk-kms (1.104.0)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.183.0)
aws-sdk-core (~> 3, >= 3.216.0)
aws-sdk-s3 (1.189.0)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.11.0)
aws-sigv4 (1.12.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
benchmark (0.4.0)
bigdecimal (3.1.9)
base64 (0.3.0)
benchmark (0.4.1)
bigdecimal (3.2.2)
claide (1.1.0)
claide-plugins (0.9.2)
cork
Expand Down Expand Up @@ -96,7 +96,7 @@ GEM
commander (4.6.0)
highline (~> 2.0.0)
concurrent-ruby (1.3.5)
connection_pool (2.5.2)
connection_pool (2.5.3)
cork (0.3.0)
colored2 (~> 3.1)
danger (9.5.1)
Expand All @@ -122,7 +122,7 @@ GEM
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
dotenv (2.8.1)
drb (2.2.1)
drb (2.2.3)
emoji_regex (3.2.3)
escape (0.0.4)
ethon (0.16.0)
Expand Down Expand Up @@ -159,7 +159,7 @@ GEM
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.4.0)
fastlane (2.227.1)
fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
Expand Down Expand Up @@ -207,7 +207,7 @@ GEM
fastlane
pry
fastlane-plugin-sonarcloud_metric_kit (0.2.1)
fastlane-plugin-stream_actions (0.3.79)
fastlane-plugin-stream_actions (0.3.84)
xctest_list (= 1.2.1)
fastlane-plugin-versioning (0.7.1)
fastlane-sirp (1.0.0)
Expand Down Expand Up @@ -263,7 +263,7 @@ GEM
i18n (1.14.7)
concurrent-ruby (~> 1.0)
jmespath (1.6.2)
json (2.11.3)
json (2.12.2)
jwt (2.10.1)
base64
kramdown (2.5.1)
Expand All @@ -274,7 +274,7 @@ GEM
method_source (1.1.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
mini_portile2 (2.8.8)
mini_portile2 (2.8.9)
minitest (5.25.5)
molinillo (0.8.0)
multi_json (1.15.0)
Expand All @@ -284,7 +284,7 @@ GEM
mutex_m (0.3.0)
nanaimo (0.4.0)
nap (1.1.0)
naturally (2.2.1)
naturally (2.2.2)
netrc (0.11.0)
nio4r (2.7.4)
nkf (0.2.0)
Expand All @@ -311,7 +311,7 @@ GEM
puma (6.6.0)
nio4r (~> 2.0)
racc (1.8.1)
rack (3.1.14)
rack (3.1.16)
rack-protection (4.1.1)
base64 (>= 0.1.0)
logger (>= 1.6.0)
Expand All @@ -322,7 +322,7 @@ GEM
rackup (2.2.1)
rack (>= 3)
rainbow (3.1.1)
rake (13.2.1)
rake (13.3.0)
rchardet (1.9.0)
regexp_parser (2.10.0)
representable (3.2.0)
Expand All @@ -342,7 +342,7 @@ GEM
rubocop-ast (>= 1.23.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.44.1)
rubocop-ast (1.45.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
rubocop-performance (1.19.1)
Expand All @@ -359,7 +359,7 @@ GEM
faraday (>= 0.17.3, < 3)
securerandom (0.4.1)
security (0.1.5)
signet (0.19.0)
signet (0.20.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
Expand Down Expand Up @@ -421,7 +421,7 @@ DEPENDENCIES
fastlane-plugin-create_xcframework
fastlane-plugin-lizard
fastlane-plugin-sonarcloud_metric_kit
fastlane-plugin-stream_actions (= 0.3.79)
fastlane-plugin-stream_actions (= 0.3.84)
fastlane-plugin-versioning
json
plist
Expand Down
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ let package = Package(
)
],
dependencies: [
.package(url: "https://github.com/GetStream/stream-chat-swift.git", from: "4.79.1"),
.package(url: "https://github.com/GetStream/stream-chat-swift.git", from: "4.80.0"),
],
targets: [
.target(
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<p align="center">
<a href="https://sonarcloud.io/summary/new_code?id=GetStream_stream-chat-swiftui"><img src="https://sonarcloud.io/api/project_badges/measure?project=GetStream_stream-chat-swiftui&metric=coverage" /></a>

<img id="stream-chat-swiftui-label" alt="StreamChatSwiftUI" src="https://img.shields.io/badge/StreamChatSwiftUI-8.27%20MB-blue"/>
<img id="stream-chat-swiftui-label" alt="StreamChatSwiftUI" src="https://img.shields.io/badge/StreamChatSwiftUI-8.6%20MB-blue"/>
</p>

## SwiftUI StreamChat SDK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource {
private var channelName = ""
private var onlineIndicatorShown = false
private var lastReadMessageId: String?
private let throttler = Throttler(interval: 3, broadcastLatestEvent: true)
var throttler = Throttler(interval: 3, broadcastLatestEvent: true)

public var channelController: ChatChannelController
public var messageController: ChatMessageController?
Expand Down Expand Up @@ -574,9 +574,7 @@ open class ChatChannelViewModel: ObservableObject, MessagesDataSource {
guard let channel, channel.unreadCount.messages > 0 else { return }
throttler.throttle { [weak self] in
self?.channelController.markRead()
DispatchQueue.main.async {
self?.firstUnreadMessageId = nil
}
// We keep `firstUnreadMessageId` value set which keeps showing the new messages header in the channel view
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,7 @@ public extension MessageAction {
if channel.config.mutesEnabled {
let author = message.author
let currentUser = chatClient.currentUserController().currentUser
let isMuted = currentUser?.mutedUsers.contains(message.author) ?? false
let isMuted = currentUser?.mutedUsers.contains(where: { $0.id == author.id }) ?? false
if isMuted {
let unmuteAction = unmuteAction(
for: message,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ public class ChannelAvatarsMerger: ChannelAvatarsMerging {
@Injected(\.images) private var images

/// Context provided utils.
private lazy var imageProcessor = utils.imageProcessor
private lazy var imageMerger = utils.imageMerger
private var imageProcessor: ImageProcessor { utils.imageProcessor }
private var imageMerger: ImageMerging { utils.imageMerger }

/// Placeholder images.
private lazy var placeholder1 = images.userAvatarPlaceholder1
private lazy var placeholder2 = images.userAvatarPlaceholder2
private lazy var placeholder3 = images.userAvatarPlaceholder3
private lazy var placeholder4 = images.userAvatarPlaceholder4
private var placeholder1: UIImage { images.userAvatarPlaceholder1 }
private var placeholder2: UIImage { images.userAvatarPlaceholder2 }
private var placeholder3: UIImage { images.userAvatarPlaceholder3 }
private var placeholder4: UIImage { images.userAvatarPlaceholder4 }

/// Creates a merged avatar from the given images
/// - Parameter avatars: The individual avatars
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public struct ChatChannelSwipeableListItem<Factory: ViewFactory, ChannelListItem

@GestureState private var offset: CGSize = .zero

/// The channel id of the swipable item.
///
/// - Note: Setting this to nil will reset the swiped state.
@Binding var swipedChannelId: String?

private let numberOfTrailingItems: Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ import Foundation

enum SystemEnvironment {
/// A Stream Chat version.
public static let version: String = "4.79.1"
public static let version: String = "4.80.0"
}
2 changes: 1 addition & 1 deletion Sources/StreamChatSwiftUI/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
<key>CFBundlePackageType</key>
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
<key>CFBundleShortVersionString</key>
<string>4.79.1</string>
<string>4.80.0</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>NSPhotoLibraryUsageDescription</key>
Expand Down
4 changes: 2 additions & 2 deletions StreamChatSwiftUI-XCFramework.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |spec|
spec.name = 'StreamChatSwiftUI-XCFramework'
spec.version = '4.79.1'
spec.version = '4.80.0'
spec.summary = 'StreamChat SwiftUI Chat Components'
spec.description = 'StreamChatSwiftUI SDK offers flexible SwiftUI components able to display data provided by StreamChat SDK.'

Expand All @@ -19,7 +19,7 @@ Pod::Spec.new do |spec|

spec.framework = 'Foundation', 'UIKit', 'SwiftUI'

spec.dependency 'StreamChat-XCFramework', '~> 4.79.1'
spec.dependency 'StreamChat-XCFramework', '~> 4.80.0'

spec.cocoapods_version = '>= 1.11.0'
end
Loading
Loading