Skip to content

Commit 433e4e2

Browse files
committed
Merge branch 'develop' into v5
# Conflicts: # Gemfile.lock # Sources/StreamChat/Controllers/PollController/PollVoteListController.swift # TestTools/StreamChatTestTools/Mocks/StreamChat/Repositories/PollsRepository_Mock.swift # fastlane/Pluginfile
2 parents de95a96 + 1d11124 commit 433e4e2

File tree

57 files changed

+1783
-975
lines changed

Some content is hidden

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

57 files changed

+1783
-975
lines changed

.github/workflows/sdk-size-metrics.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ jobs:
1818
runs-on: macos-15
1919
env:
2020
GITHUB_TOKEN: '${{ secrets.CI_BOT_GITHUB_TOKEN }}'
21+
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}
2122
steps:
2223
- name: Connect Bot
2324
uses: webfactory/[email protected]
@@ -28,10 +29,13 @@ jobs:
2829

2930
- uses: ./.github/actions/bootstrap
3031

31-
- name: Run SDK Size Metrics
32+
- name: Run General SDK Size Metrics
3233
run: bundle exec fastlane show_frameworks_sizes
3334
timeout-minutes: 30
3435
env:
35-
GITHUB_PR_NUM: ${{ github.event.pull_request.number }}
3636
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
3737
APPSTORE_API_KEY: ${{ secrets.APPSTORE_API_KEY }}
38+
39+
- name: Run Detailed SDK Size Metrics
40+
run: bundle exec fastlane size_analyze
41+
timeout-minutes: 30

.github/workflows/sync-mock-server.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: Mock Server
22

33
on:
44
schedule:
5-
# Runs "At 00:00 on day-of-month 1 and 15"
6-
- cron: '0 0 1,15 * *'
5+
# Runs "At 00:00 on day-of-month 1"
6+
- cron: '0 0 1 * *'
77

88
workflow_dispatch:
99

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ App Thinning Size Report.txt
9191
app-thinning.plist
9292
*.dmg
9393
*.pkg*
94+
*LinkMap.txt
9495

9596
# gcloud
9697
google-cloud-sdk

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
33

44
# Upcoming
55

6+
### 🔄 Changed
7+
8+
# [4.91.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.91.0)
9+
_October 22, 2025_
10+
611
## StreamChat
712
### ✅ Added
813
- Add support for deleting messages only for the current user [#3836](https://github.com/GetStream/stream-chat-swift/pull/3836)
914
- Add `ChatMessageController.deleteMessageForMe()`
1015
- Add `ChatMessage.deletedForMe`
16+
- Allow observing poll changes in `PollVoteListController` [#3849](https://github.com/GetStream/stream-chat-swift/pull/3849)
1117
### 🐞 Fixed
1218
- Fix logout not clearing token when current user had no device registered [#3838](https://github.com/GetStream/stream-chat-swift/pull/3838)
19+
- Fix `PollVoteListController` not updating votes on the vote cast event [#3849](https://github.com/GetStream/stream-chat-swift/pull/3849)
20+
- Fix showing channel when receiving a campaign message with `show_channels` false [#3851](https://github.com/GetStream/stream-chat-swift/pull/3851)
21+
22+
## StreamChatUI
23+
### 🐞 Fixed
24+
- Fix `PollResultsVoteListVC` not updating the vote count [#3849](https://github.com/GetStream/stream-chat-swift/pull/3849)
1325

1426
# [4.90.0](https://github.com/GetStream/stream-chat-swift/releases/tag/4.90.0)
1527
_October 07, 2025_

Gemfile.lock

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,11 @@ GEM
166166
fastlane
167167
pry
168168
fastlane-plugin-sonarcloud_metric_kit (0.2.1)
169-
fastlane-plugin-stream_actions (0.3.91)
169+
fastlane-plugin-stream_actions (0.3.101)
170170
xctest_list (= 1.2.1)
171171
fastlane-plugin-versioning (0.7.1)
172+
fastlane-plugin-xcsize (1.1.0)
173+
xcsize (= 1.1.0)
172174
fastlane-sirp (1.0.0)
173175
sysrandom (~> 1.0)
174176
faye-websocket (0.12.0)
@@ -240,7 +242,7 @@ GEM
240242
minitest (5.25.5)
241243
multi_json (1.17.0)
242244
multipart-post (2.4.1)
243-
mustermann (3.0.3)
245+
mustermann (3.0.4)
244246
ruby2_keywords (~> 0.0.1)
245247
mutex_m (0.3.0)
246248
nanaimo (0.4.0)
@@ -274,8 +276,8 @@ GEM
274276
puma (6.6.1)
275277
nio4r (~> 2.0)
276278
racc (1.8.1)
277-
rack (3.2.2)
278-
rack-protection (4.1.1)
279+
rack (3.2.3)
280+
rack-protection (4.2.0)
279281
base64 (>= 0.1.0)
280282
logger (>= 1.6.0)
281283
rack (>= 3.0.0, < 4)
@@ -329,11 +331,11 @@ GEM
329331
simctl (1.6.10)
330332
CFPropertyList
331333
naturally
332-
sinatra (4.1.1)
334+
sinatra (4.2.0)
333335
logger (>= 1.6.0)
334336
mustermann (~> 3.0)
335337
rack (>= 3.0.0, < 4)
336-
rack-protection (= 4.1.1)
338+
rack-protection (= 4.2.0)
337339
rack-session (>= 2.0.0, < 3)
338340
tilt (~> 2.0)
339341
slather (2.8.5)
@@ -380,6 +382,8 @@ GEM
380382
rouge (~> 3.28.0)
381383
xcpretty-travis-formatter (1.0.1)
382384
xcpretty (~> 0.2, >= 0.0.7)
385+
xcsize (1.1.0)
386+
commander (>= 4.6, < 6.0)
383387
xctest_list (1.2.1)
384388

385389
PLATFORMS
@@ -393,8 +397,9 @@ DEPENDENCIES
393397
fastlane-plugin-create_xcframework
394398
fastlane-plugin-lizard
395399
fastlane-plugin-sonarcloud_metric_kit
396-
fastlane-plugin-stream_actions (= 0.3.91)
400+
fastlane-plugin-stream_actions (= 0.3.101)
397401
fastlane-plugin-versioning
402+
fastlane-plugin-xcsize (= 1.1.0)
398403
faye-websocket
399404
json
400405
lefthook

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<a href="https://sonarcloud.io/summary/new_code?id=GetStream_stream-chat-swift"><img src="https://sonarcloud.io/api/project_badges/measure?project=GetStream_stream-chat-swift&metric=coverage" /></a>
1313
</p>
1414
<p align="center">
15-
<img id="stream-chat-label" alt="StreamChat" src="https://img.shields.io/badge/StreamChat-8.25%20MB-blue"/>
15+
<img id="stream-chat-label" alt="StreamChat" src="https://img.shields.io/badge/StreamChat-8.26%20MB-blue"/>
1616
<img id="stream-chat-ui-label" alt="StreamChatUI" src="https://img.shields.io/badge/StreamChatUI-4.89%20MB-blue"/>
1717
</p>
1818

Sources/StreamChat/APIClient/Endpoints/Payloads/MessagePayloads.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ enum MessagePayloadsCodingKeys: String, CodingKey, CaseIterable {
5858
case reminder
5959
case member
6060
case deletedForMe = "deleted_for_me"
61+
case campaignId = "created_by_campaign_id"
6162
}
6263

6364
extension MessagePayload {
@@ -121,6 +122,8 @@ final class MessagePayload: Decodable, Sendable {
121122
let reminder: ReminderPayload?
122123
let member: MemberInfoPayload?
123124
let deletedForMe: Bool?
125+
126+
let campaignId: String?
124127

125128
/// Only message payload from `getMessage` endpoint contains channel data. It's a convenience workaround for having to
126129
/// make an extra call do get channel details.
@@ -192,6 +195,7 @@ final class MessagePayload: Decodable, Sendable {
192195
reminder = try container.decodeIfPresent(ReminderPayload.self, forKey: .reminder)
193196
member = try container.decodeIfPresent(MemberInfoPayload.self, forKey: .member)
194197
deletedForMe = try container.decodeIfPresent(Bool.self, forKey: .deletedForMe)
198+
campaignId = try container.decodeIfPresent(String.self, forKey: .campaignId)
195199
}
196200

197201
init(
@@ -237,7 +241,8 @@ final class MessagePayload: Decodable, Sendable {
237241
reminder: ReminderPayload? = nil,
238242
location: SharedLocationPayload? = nil,
239243
member: MemberInfoPayload? = nil,
240-
deletedForMe: Bool? = nil
244+
deletedForMe: Bool? = nil,
245+
campaignId: String? = nil
241246
) {
242247
self.id = id
243248
self.cid = cid
@@ -282,6 +287,7 @@ final class MessagePayload: Decodable, Sendable {
282287
self.reminder = reminder
283288
self.member = member
284289
self.deletedForMe = deletedForMe
290+
self.campaignId = campaignId
285291
}
286292
}
287293

Sources/StreamChat/Controllers/PollController/PollVoteListController+Combine.swift

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ extension PollVoteListController {
1111
basePublishers.state.keepAlive(self)
1212
}
1313

14+
/// A publisher emitting a new value every time the poll changes.
15+
public var pollPublisher: AnyPublisher<Poll, Never> {
16+
basePublishers.poll.keepAlive(self)
17+
}
18+
1419
/// A publisher emitting a new value every time the votes change.
1520
public var voteChangesPublisher: AnyPublisher<[ListChange<PollVote>], Never> {
1621
basePublishers.voteChanges.keepAlive(self)
@@ -26,6 +31,9 @@ extension PollVoteListController {
2631
/// A backing subject for `statePublisher`.
2732
let state: CurrentValueSubject<DataController.State, Never>
2833

34+
/// A backing subject for `pollPublisher`.
35+
let poll: PassthroughSubject<Poll, Never> = .init()
36+
2937
/// A backing subject for `voteChangesPublisher`.
3038
let voteChanges: PassthroughSubject<[ListChange<PollVote>], Never> = .init()
3139

@@ -49,4 +57,8 @@ extension PollVoteListController.BasePublishers: PollVoteListControllerDelegate
4957
) {
5058
voteChanges.send(changes)
5159
}
60+
61+
func controller(_ controller: PollVoteListController, didUpdatePoll poll: Poll) {
62+
self.poll.send(poll)
63+
}
5264
}

Sources/StreamChat/Controllers/PollController/PollVoteListController+SwiftUI.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ extension PollVoteListController {
1818
/// The poll votes.
1919
@Published public private(set) var votes: [PollVote] = []
2020

21+
/// The poll which the votes belong to.
22+
@Published public private(set) var poll: Poll?
23+
2124
/// The current state of the controller.
2225
@Published public private(set) var state: DataController.State
2326

@@ -29,6 +32,7 @@ extension PollVoteListController {
2932
controller.multicastDelegate.add(additionalDelegate: self)
3033

3134
votes = controller.votes
35+
poll = controller.poll
3236
}
3337
}
3438
}
@@ -41,6 +45,10 @@ extension PollVoteListController.ObservableObject: PollVoteListControllerDelegat
4145
votes = controller.votes
4246
}
4347

48+
public func controller(_ controller: PollVoteListController, didUpdatePoll poll: Poll) {
49+
self.poll = poll
50+
}
51+
4452
public func controller(_ controller: DataController, didChangeState state: DataController.State) {
4553
self.state = state
4654
}

0 commit comments

Comments
 (0)