Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
83abc0f
Update release version to snapshot
Sep 23, 2025
de341d8
[CI] Update swift format lane to check for foundation import (#973)
testableapple Sep 24, 2025
3895749
Fix openChannel not working when searching or another chat shown (#975)
martinmitrevski Sep 24, 2025
46c632d
Fix crash when using font that does not support bold or italic trait …
nuno-vieira Sep 24, 2025
d30fdf3
Make the commandsHandler and the mention methods public to allow cust…
sheep-q Sep 29, 2025
f77076b
Open markdown formatter (#978)
nuno-vieira Sep 29, 2025
4e4438e
Demo app: fix timeout on create new chat screen (#980)
martinmitrevski Sep 29, 2025
5fc1b8d
Add participant actions in channel info view (#982)
martinmitrevski Oct 1, 2025
f50d1a4
Add support for overriding `onImageTap` in `LinkAttachmentView` (#986)
nuno-vieira Oct 1, 2025
6cf0a57
Use explicit set of rules in SwiftFormat and SwiftLint and bump versi…
laevandus Oct 2, 2025
5beb176
Fix multiple issues around mark unread and unread banner (#989)
nuno-vieira Oct 2, 2025
2e3ae3d
Add support for customizing text colors in `LinkAttachmentView` (#992)
nuno-vieira Oct 3, 2025
aadde08
[CI] Support Xcode 26 (#988)
testableapple Oct 3, 2025
ff4977d
[CI] Get the correct target branch on public interface validation (#994)
testableapple Oct 6, 2025
e7d470f
Bump Xcode version to 26.0.1 (#997)
testableapple Oct 6, 2025
7a7130c
[CI] Partly revert Xcode 26 rollout (#998)
testableapple Oct 6, 2025
8512624
Expose `MediaAttachment` properties and initializer (#1000)
nuno-vieira Oct 6, 2025
95ebc7f
open ChannelInfoViewModel control proprties (#995)
KhaledElsherbeny Oct 7, 2025
c7547c2
Add ColorPalette.navigationBarGlyph and fix add member toolbar item o…
laevandus Oct 7, 2025
48c177d
Include current user in the more channel actions members list (#1001)
laevandus Oct 7, 2025
a8bc1b5
Update StreamChat dependency to 4.90.0 (#1004)
laevandus Oct 8, 2025
12091c6
Bump 4.90.0
Oct 8, 2025
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
39 changes: 21 additions & 18 deletions .github/workflows/cron-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,24 @@ jobs:
strategy:
matrix:
include:
- ios: 18.5
xcode: 16.4
os: macos-15
# - ios: "26.0" TODO: IOS-1181
# device: "iPhone 17 Pro"
# xcode: "26.0.1"
# setup_runtime: false
- ios: "18.5"
device: "iPhone 16 Pro"
xcode: "26.0.1"
setup_runtime: false
- ios: 17.5
xcode: 15.4
os: macos-14
- ios: "17.5"
device: "iPhone 15 Pro"
setup_runtime: false
- ios: 16.4
xcode: 15.3 # fails on 15.4
os: macos-14
xcode: "26.0.1"
setup_runtime: true
- ios: "16.4"
device: "iPhone 14 Pro"
xcode: "16.4"
setup_runtime: true
fail-fast: false
runs-on: ${{ matrix.os }}
runs-on: macos-15
env:
GITHUB_EVENT: ${{ toJson(github.event) }}
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
Expand Down Expand Up @@ -91,9 +92,11 @@ jobs:
strategy:
matrix:
include:
- xcode: 16.4
- xcode: 26.0.1 # swift 6.2
os: macos-15
- xcode: 16.4 # swift 6.1
os: macos-15
- xcode: 16.1
- xcode: 16.1 # swift 6.0
os: macos-14
fail-fast: false
runs-on: ${{ matrix.os }}
Expand All @@ -107,20 +110,20 @@ jobs:
XCODE_VERSION: ${{ matrix.xcode }}

build-old-xcode:
name: Build SDKs (Xcode 15)
name: Build SDKs (Old Xcode)
runs-on: macos-14
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- name: Connect Bot
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
- uses: actions/checkout@v3.1.0
- uses: ./.github/actions/xcode-cache
- uses: ./.github/actions/ruby-cache
timeout-minutes: 25
- name: Build SwiftUI
run: bundle exec fastlane test_ui device:"iPhone 15" build_for_testing:true
run: bundle exec fastlane test_ui device:"iPhone 16" build_for_testing:true
timeout-minutes: 25
- name: Build XCFrameworks
run: bundle exec fastlane build_xcframeworks
Expand All @@ -133,7 +136,7 @@ jobs:
name: Automated Code Review
runs-on: macos-14
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
Expand Down
20 changes: 12 additions & 8 deletions .github/workflows/smoke-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
runs-on: macos-14
if: ${{ github.event.inputs.record_snapshots != 'true' }}
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
Expand All @@ -63,22 +63,22 @@ jobs:
- run: bundle exec fastlane pod_lint
if: startsWith(github.event.pull_request.head.ref, 'release/')

build-xcode15:
name: Build SDKs (Xcode 15)
build-old-xcode:
name: Build SDKs (Old Xcode)
runs-on: macos-14
if: ${{ github.event.inputs.record_snapshots != 'true' }}
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- name: Connect Bot
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.BOT_SSH_PRIVATE_KEY }}
- uses: actions/checkout@v3.1.0
- uses: ./.github/actions/xcode-cache
- uses: ./.github/actions/ruby-cache
timeout-minutes: 25
- name: Build SwiftUI
run: bundle exec fastlane test_ui device:"iPhone 15" build_for_testing:true
run: bundle exec fastlane test_ui device:"iPhone 16" build_for_testing:true
timeout-minutes: 25
- name: Build XCFrameworks
run: bundle exec fastlane build_xcframeworks
Expand All @@ -90,6 +90,10 @@ jobs:
test-ui-debug:
name: Test SwiftUI (Debug)
runs-on: macos-15
env:
GITHUB_TOKEN: ${{ secrets.CI_BOT_GITHUB_TOKEN }} # to open a PR
IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.5)" # TODO: IOS-1181
XCODE_VERSION: "16.4" # TODO: IOS-1181
steps:
- uses: actions/checkout@v4.1.1
- uses: ./.github/actions/bootstrap
Expand All @@ -99,8 +103,6 @@ jobs:
- name: Run UI Tests (Debug)
run: bundle exec fastlane test_ui device:"${{ env.IOS_SIMULATOR_DEVICE }}" record:"${{ github.event.inputs.record_snapshots }}"
timeout-minutes: 120
env:
GITHUB_TOKEN: ${{ secrets.CI_BOT_GITHUB_TOKEN }} # to open a PR
- name: Run Sonar analysis
if: ${{ github.event.inputs.record_snapshots != 'true' }}
run: bundle exec fastlane sonar_upload
Expand Down Expand Up @@ -157,6 +159,8 @@ jobs:
- build-test-app-and-frameworks
env:
LAUNCH_ID: ${{ needs.allure_testops_launch.outputs.launch_id }}
IOS_SIMULATOR_DEVICE: "iPhone 16 Pro (18.5)" # TODO: IOS-1181
XCODE_VERSION: "16.4" # TODO: IOS-1181
strategy:
matrix:
batch: [0, 1]
Expand Down
70 changes: 58 additions & 12 deletions .swiftformat
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,66 @@
--header "\nCopyright © {year} Stream.io Inc. All rights reserved.\n"
--swiftversion 5.9

--ifdef no-indent
--disable redundantType
--disable extensionAccessControl
--disable andOperator
--disable hoistPatternLet
--disable typeSugar

--disable redundantGet # it removes get async throws from getters
# Use allow-list
--rules blankLinesAroundMark
--rules blankLinesAtEndOfScope
--rules blankLinesAtStartOfScope
--rules blankLinesBetweenScopes
--rules braces
--rules consecutiveBlankLines
--rules consecutiveSpaces
--rules duplicateImports
--rules elseOnSameLine
--rules emptyBraces
--rules enumNamespaces
--rules fileHeader
--rules indent
--rules initCoderUnavailable
--rules isEmpty
--rules leadingDelimiters
--rules linebreakAtEndOfFile
--rules linebreaks
--rules modifierOrder
--rules numberFormatting
--rules redundantBackticks
--rules redundantBreak
--rules redundantExtensionACL
--rules redundantFileprivate
--rules redundantLet
--rules redundantLetError
--rules redundantNilInit
--rules redundantObjc
--rules redundantPattern
--rules redundantRawValues
--rules redundantVoidReturnType
--rules semicolons
--rules sortedImports
--rules spaceAroundBraces
--rules spaceAroundBrackets
--rules spaceAroundComments
--rules spaceAroundGenerics
--rules spaceAroundOperators
--rules spaceAroundParens
--rules spaceInsideBraces
--rules spaceInsideBrackets
--rules spaceInsideComments
--rules spaceInsideGenerics
--rules spaceInsideParens
--rules strongOutlets
--rules strongifiedSelf
--rules todos
--rules trailingCommas
--rules trailingSpace
--rules unusedArguments
--rules void
--rules wrap
--rules wrapArguments
--rules wrapAttributes
--rules yodaConditions

# Rules inferred from Swift Standard Library:
--disable anyObjectProtocol, wrapMultilineStatementBraces
# Configuration for enabled rules
--ifdef no-indent
--indent 4
--enable isEmpty
--disable redundantParens # it generates mistakes for e.g. "if (a || b), let x = ... {}"
--semicolons inline
--nospaceoperators ..., ..< # what about ==, +=?
--commas inline
Expand Down
12 changes: 9 additions & 3 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ excluded:
- Sources/StreamChatSwiftUI/StreamNuke

only_rules:
# Currently enabled autocorrectable rules
- attribute_name_spacing
- closing_brace
- colon
Expand All @@ -19,14 +18,15 @@ only_rules:
- empty_enum_arguments
- empty_parameters
- empty_parentheses_with_trailing_closure
- explicit_init
- file_name_no_space
- joined_default_parameter
- leading_whitespace
- legacy_cggeometry_functions
- legacy_constant
- legacy_constructor
- legacy_nsgeometry_functions
- mark
- multiline_arguments
- no_space_in_method_call
- prefer_type_checking
- private_over_fileprivate
Expand All @@ -52,5 +52,11 @@ only_rules:
- vertical_whitespace
- void_return

multiline_arguments:
only_enforce_after_first_closure_on_first_line: true

trailing_whitespace:
ignores_empty_lines: true
ignores_empty_lines: true

file_name_no_space:
severity: error
26 changes: 26 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### 🔄 Changed

# [4.90.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.90.0)
_October 08, 2025_

### ✅ Added
- Opens the `commandsHandler` and makes the mention methods public [#979](https://github.com/GetStream/stream-chat-swiftui/pull/979)
- Opens `MarkdownFormatter` so that it can be customised [#978](https://github.com/GetStream/stream-chat-swiftui/pull/978)
- Add participant actions in channel info view [#982](https://github.com/GetStream/stream-chat-swiftui/pull/982)
- Add support for overriding `onImageTap` in `LinkAttachmentView` [#986](https://github.com/GetStream/stream-chat-swiftui/pull/986)
- Add support for customizing text colors in `LinkAttachmentView` [#992](https://github.com/GetStream/stream-chat-swiftui/pull/992)
- Expose `MediaAttachment` properties and initializer [#1000](https://github.com/GetStream/stream-chat-swiftui/pull/1000)
- Add `ColorPalette.navigationBarGlyph` for configuring the glyph color for buttons in navigation bars [#999](https://github.com/GetStream/stream-chat-swiftui/pull/999)
- Allow overriding `ChatChannelInfoViewModel` properties: `shouldShowLeaveConversationButton`, `canRenameChannel`, and `shouldShowAddUserButton` [#995](https://github.com/GetStream/stream-chat-swiftui/pull/995)

### 🐞 Fixed
- Fix openChannel not working when searching or another chat shown [#975](https://github.com/GetStream/stream-chat-swiftui/pull/975)
- Fix crash when using a font that does not support bold or italic trait [#976](https://github.com/GetStream/stream-chat-swiftui/pull/976)
- Fix unread messages banner not shown for one-page channels [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix unread messages banner not shown if the whole channel is unread [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix channel not marking read when passing by the unread message [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix random scroll after marking a message unread [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix marking channel read when the user scrolls to the bottom after marking a message as unread [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix replying to unread messages marking them instantly as read [#989](https://github.com/GetStream/stream-chat-swiftui/pull/989)
- Fix rendering of the add users button on iOS 26 [#999](https://github.com/GetStream/stream-chat-swiftui/pull/999)
- Use `ColorPalette.navigationBarTint` for the background of the add users button [#999](https://github.com/GetStream/stream-chat-swiftui/pull/999)
- Fix showing all the channel members in the more channel actions view [#1001](https://github.com/GetStream/stream-chat-swiftui/pull/1001)

# [4.89.1](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.89.1)
_September 23, 2025_

Expand Down
4 changes: 2 additions & 2 deletions DemoAppSwiftUI/ChannelHeader/CustomChannelHeader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public struct CustomChannelHeader: ToolbarContent {
.resizable()
.scaledToFit()
.frame(width: 24, height: 24)
.foregroundColor(Color.white)
.foregroundColor(Color(colors.navigationBarGlyph))
.padding(.all, 8)
.background(colors.navigationBarTintColor)
.clipShape(Circle())
Expand Down Expand Up @@ -75,7 +75,7 @@ struct CustomChannelModifier: ChannelListHeaderViewModifier {
actionsPopupShown: $actionsPopupShown
)
#if compiler(>=6.2)
.sharedBackgroundVisibility(.hidden)
.sharedBackgroundVisibility(.hidden)
#endif
}
} else {
Expand Down
2 changes: 1 addition & 1 deletion DemoAppSwiftUI/ChannelHeader/NewChatViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ class NewChatViewModel: ObservableObject, ChatUserSearchControllerDelegate {

if !loadingNextUsers {
loadingNextUsers = true
searchController.loadNextUsers(limit: 50) { [weak self] _ in
searchController.loadNextUsers { [weak self] _ in
guard let self = self else { return }
self.chatUsers = self.searchController.userArray
self.loadingNextUsers = false
Expand Down
4 changes: 2 additions & 2 deletions Githubfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ export YEETD_VERSION='1.0'
export SONAR_VERSION='6.2.1.4610'
export IPSW_VERSION='3.1.592'
export INTERFACE_ANALYZER_VERSION='1.0.7'
export SWIFT_LINT_VERSION='0.55.1'
export SWIFT_FORMAT_VERSION='0.47.12'
export SWIFT_LINT_VERSION='0.59.1'
export SWIFT_FORMAT_VERSION='0.58.2'
export SWIFT_GEN_VERSION='6.5.1'
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.89.0")
.package(url: "https://github.com/GetStream/stream-chat-swift.git", from: "4.90.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-9.43%20MB-blue"/>
<img id="stream-chat-swiftui-label" alt="StreamChatSwiftUI" src="https://img.shields.io/badge/StreamChatSwiftUI-9.57%20MB-blue"/>
</p>

## SwiftUI StreamChat SDK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ public struct DefaultChannelHeaderModifier<Factory: ViewFactory>: ChatChannelHea
isActive: $isActive
)
#if compiler(>=6.2)
.sharedBackgroundVisibility(.hidden)
.sharedBackgroundVisibility(.hidden)
#endif
}
} else {
Expand Down
Loading
Loading