Skip to content

Conversation

testableapple
Copy link
Contributor

@testableapple testableapple requested a review from a team as a code owner September 29, 2025 12:12
@testableapple testableapple added the 🤖 CI/CD Any work related to CI/CD label Sep 29, 2025
Copy link

coderabbitai bot commented Sep 29, 2025

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ci/remove-cocoapods

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@Stream-SDK-Bot
Copy link
Collaborator

SDK Size

title develop branch diff status
StreamChat 8.13 MB 7.93 MB -199 KB 🚀
StreamChatUI 4.88 MB 5.06 MB +183 KB 🟢

@Stream-SDK-Bot
Copy link
Collaborator

SDK Performance

target metric benchmark branch performance status
MessageList Hitches total duration 10 ms 5.01 ms 49.9% 🔼 🟢
Duration 2.6 s 2.54 s 2.31% 🔼 🟢
Hitch time ratio 4 ms per s 1.97 ms per s 50.75% 🔼 🟢
Frame rate 75 fps 78.29 fps 4.39% 🔼 🟢
Number of hitches 1 0.6 40.0% 🔼 🟢

Copy link

1 Warning
⚠️ Big PR
1 Message
📖 There seems to be app changes but CHANGELOG wasn't modified.
Please include an entry if the PR includes user-facing changes.
You can find it at CHANGELOG.md.

Generated by 🚫 Danger

Copy link
Member

@nuno-vieira nuno-vieira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! ✅

Copy link

Public Interface

- public final class UserList  
+ public final class UserList: Sendable  
-   @MainActor public lazy var state: UserListState
+   @MainActor public var state: UserListState

- public class ChatReactionListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatReactionListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public struct TypingIndicatorPrivacySettings  
+ public struct TypingIndicatorPrivacySettings: Sendable  

- public struct NewLocationInfo  
+ public struct NewLocationInfo: Sendable  

- public protocol ChatChannelAvatarViewSwiftUIView: View
+ @MainActor public protocol ChatChannelAvatarViewSwiftUIView: View

- public struct PollVote: Hashable, Equatable  
+ public struct PollVote: Hashable, Equatable, Sendable  

- open class StreamAudioSessionConfigurator: AudioSessionConfiguring  
+ open class StreamAudioSessionConfigurator: AudioSessionConfiguring, @unchecked Sendable  
-   open func requestRecordPermission(_ completionHandler: @escaping (Bool) -> Void)
+   open func requestRecordPermission(_ completionHandler: @escaping @Sendable(Bool) -> Void)

 public struct StreamAssetPropertyLoader: AssetPropertyLoading  
-   public func loadProperties(_ properties: [AssetProperty],of asset: Asset,completion: @escaping (Result<Asset, AssetPropertyLoadingCompositeError>) -> Void)
+   public func loadProperties(_ properties: [AssetProperty],of asset: Asset,completion: @escaping @Sendable(Result<Asset, AssetPropertyLoadingCompositeError>) -> Void)

- public struct ChannelQuery: Encodable  
+ public struct ChannelQuery: Encodable, Sendable  

- public struct ChatMessageReaction: Hashable  
+ public struct ChatMessageReaction: Hashable, Sendable  

- public struct DraftMessage  
+ public struct DraftMessage: Sendable  

- open class StreamAudioQueuePlayer: StreamAudioPlayer  
+ open class StreamAudioQueuePlayer: StreamAudioPlayer, @unchecked Sendable  

- public class CurrentChatUserController: DataController, DelegateCallable, DataStoreProvider  
+ public class CurrentChatUserController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public struct ThreadQuery: Encodable  
+ public struct ThreadQuery: Encodable, Sendable  

- public struct AttachmentFile: Codable, Hashable  
+ public struct AttachmentFile: Codable, Hashable, Sendable  
-   public static let sizeFormatter
+   public nonisolated static let sizeFormatter

- extension PollVoteListController: EventsControllerDelegate  
+ extension PollVoteListController  
-   public func eventsController(_ controller: EventsController,didReceiveEvent event: any Event)
+   public var observableObject: ObservableObject
+   
+ 
+   public class ObservableObject: SwiftUI.ObservableObject  
+   
+     public let controller: PollVoteListController
+     @Published public private var votes: LazyCachedMapCollection<PollVote>
+     @Published public private var state: DataController.State

- public protocol MaskProviding
+ @MainActor public protocol MaskProviding

- public final class ReactionList  
+ public final class ReactionList: Sendable  
-   @MainActor public lazy var state: ReactionListState
+   @MainActor public var state: ReactionListState

- public struct MessageReactionType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral  
+ public struct MessageReactionType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable  

- public protocol KeyboardHandler
+ @MainActor public protocol KeyboardHandler

- public struct ThreadRead: Equatable  
+ public struct ThreadRead: Equatable, Sendable  

- public class Logger  
+ public class Logger: @unchecked Sendable  
-   public func callAsFunction(_ level: LogLevel,functionName: StaticString = #function,fileName: StaticString = #filePath,lineNumber: UInt = #line,message: @autoclosure () -> Any,subsystems: LogSubsystem = .other)
+   public func callAsFunction(_ level: LogLevel,functionName: StaticString = #function,fileName: StaticString = #file,lineNumber: UInt = #line,message: @autoclosure () -> Any,subsystems: LogSubsystem = .other)

- public protocol VoiceRecordingAttachmentPresentationViewDelegate: ChatMessageContentViewDelegate
+ @MainActor public protocol VoiceRecordingAttachmentPresentationViewDelegate: ChatMessageContentViewDelegate

- public struct ReactionListQuery: Encodable  
+ public struct ReactionListQuery: Encodable, Sendable  

- @propertyWrapper public class Atomic  
+ @propertyWrapper public class Atomic: @unchecked Sendable  

 extension VideoAttachmentPayload: AttachmentPreviewProvider  
-   public func previewView(components: Components)-> UIView
+   @MainActor public func previewView(components: Components)-> UIView

- public struct ChannelCapability: RawRepresentable, ExpressibleByStringLiteral, Hashable  
+ public struct ChannelCapability: RawRepresentable, ExpressibleByStringLiteral, Hashable, Sendable  

- public struct ChatMessage  
+ public struct ChatMessage: Sendable  

- open class NukeImageProcessor: ImageProcessor  
+ open class NukeImageProcessor: ImageProcessor, @unchecked Sendable  

- open class StreamAudioPlayer: AudioPlaying, AppStateObserverDelegate  
+ open class StreamAudioPlayer: AudioPlaying, AppStateObserverDelegate, @unchecked Sendable  

- public class MessageReminderDeletedEvent: Event  
+ public final class MessageReminderDeletedEvent: Event  

- public protocol LogDestination
+ public protocol LogDestination: Sendable

- public struct UserRole: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral  
+ public struct UserRole: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable  

- public struct ComposerState: RawRepresentable, Equatable  
+ public struct ComposerState: RawRepresentable, Equatable, Sendable  
-   public static var new
+   public static let new
-   public static var edit
+   public static let edit
-   public static var quote
+   public static let quote
-   public static var recording
+   public static let recording
-   public static var recordingLocked
+   public static let recordingLocked

- public struct ChannelListQuery: Encodable, LocalConvertibleSortingQuery  
+ public struct ChannelListQuery: Encodable, Sendable, LocalConvertibleSortingQuery  

- public struct MessagesPagination: Encodable, Equatable  
+ public struct MessagesPagination: Encodable, Equatable, Sendable  

- public protocol GalleryItemPreview
+ @MainActor public protocol GalleryItemPreview

- public struct QuotedAvatarAlignment: RawRepresentable, Equatable  
+ public struct QuotedAvatarAlignment: RawRepresentable, Equatable, Sendable  

- public struct MessageReminderListQuery: Encodable  
+ public struct MessageReminderListQuery: Encodable, Sendable  

 @available(iOSApplicationExtension, unavailable) open class ChatMessageListVC: _ViewController, ThemeProvider, ChatMessageListScrollOverlayDataSource, ChatMessageActionsVCDelegate, ChatMessageContentViewDelegate, GalleryContentViewDelegate, GiphyActionContentViewDelegate, FileActionContentViewDelegate, LinkPreviewViewDelegate, PollAttachmentViewInjectorDelegate, UITableViewDataSource, UITableViewDelegate, UIGestureRecognizerDelegate, VoiceRecordingAttachmentPresentationViewDelegate  
-   open func jumpToUnreadMessage(animated: Bool = true,onHighlight: ((IndexPath) -> Void)? = nil)
+   open func jumpToUnreadMessage(animated: Bool = true,onHighlight: (@Sendable(IndexPath) -> Void)? = nil)

- public struct PollOption: Hashable, Equatable  
+ public struct PollOption: Hashable, Equatable, Sendable  

- public struct LogSubsystem: OptionSet  
+ public struct LogSubsystem: OptionSet, Sendable  

- public class ChatUserController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatUserController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

 public enum LogConfig  
-   public static var identifier
+   public nonisolated static var identifier
-   public static var level: LogLevel
+   public nonisolated static var level: LogLevel
-   public static var dateFormatter: DateFormatter
+   public nonisolated static var dateFormatter: DateFormatter
-   public static var formatters
+   public nonisolated static var formatters
-   public static var showDate
+   public nonisolated static var showDate
-   public static var showLevel
+   public nonisolated static var showLevel
-   public static var showIdentifier
+   public nonisolated static var showIdentifier
-   public static var showThreadName
+   public nonisolated static var showThreadName
-   public static var showFileName
+   public nonisolated static var showFileName
-   public static var showLineNumber
+   public nonisolated static var showLineNumber
-   public static var showFunctionName
+   public nonisolated static var showFunctionName
-   public static var subsystems: LogSubsystem
+   public nonisolated static var subsystems: LogSubsystem
-   public static var destinationTypes: [LogDestination.Type]
+   public nonisolated static var destinationTypes: [LogDestination.Type]

 open class NukeImageLoader: ImageLoading  
-   @discardableResult open func loadImage(into imageView: UIImageView,from url: URL?,with options: ImageLoaderOptions,completion: ((Result<UIImage, Error>) -> Void)?)-> Cancellable?
+   @discardableResult @MainActor open func loadImage(into imageView: UIImageView,from url: URL?,with options: ImageLoaderOptions,completion: (@MainActor(Result<UIImage, Error>) -> Void)?)-> Cancellable?
-   @discardableResult open func downloadImage(with request: ImageDownloadRequest,completion: @escaping ((Result<UIImage, Error>) -> Void))-> Cancellable?
+   @discardableResult open func downloadImage(with request: ImageDownloadRequest,completion: @escaping @MainActor(Result<UIImage, Error>) -> Void)-> Cancellable?
-   open func downloadMultipleImages(with requests: [ImageDownloadRequest],completion: @escaping (([Result<UIImage, Error>]) -> Void))
+   open func downloadMultipleImages(with requests: [ImageDownloadRequest],completion: @escaping @MainActor([Result<UIImage, Error>]) -> Void)

- public class ChatChannelMemberListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatChannelMemberListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public protocol AudioPlaying: AnyObject
+ public protocol AudioPlaying: AnyObject, Sendable

- public struct ImageLoaderOptions  
+ public struct ImageLoaderOptions: Sendable  

- public struct MemberRole: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral  
+ public struct MemberRole: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable  

- public struct MessagePinning: Equatable  
+ public struct MessagePinning: Equatable, Sendable  

- public protocol SendMessageInterceptorFactory
+ public protocol SendMessageInterceptorFactory: Sendable

- public final class ClientHasBeenDeallocated: ClientError  
+ public final class ClientHasBeenDeallocated: ClientError, @unchecked Sendable  

- public struct AnyAttachmentPayload  
+ public struct AnyAttachmentPayload: Sendable  
-   public let payload: Encodable
+   public let payload: (Encodable & Sendable)

- public class ChatMessageSearchController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatMessageSearchController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   public func search(text: String,completion: ((_ error: Error?) -> Void)? = nil)
+   public func search(text: String,completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func search(query: MessageSearchQuery,completion: ((_ error: Error?) -> Void)? = nil)
+   public func search(query: MessageSearchQuery,completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadNextMessages(limit: Int = 25,completion: ((Error?) -> Void)? = nil)
+   public func loadNextMessages(limit: Int = 25,completion: (@MainActor(Error?) -> Void)? = nil)

- public class PollController: DataController, DelegateCallable, DataStoreProvider  
+ public class PollController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func castPollVote(answerText: String?,optionId: String?,completion: ((Error?) -> Void)? = nil)
+   public func castPollVote(answerText: String?,optionId: String?,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func removePollVote(voteId: String,completion: ((Error?) -> Void)? = nil)
+   public func removePollVote(voteId: String,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func closePoll(completion: ((Error?) -> Void)? = nil)
+   public func closePoll(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func suggestPollOption(text: String,position: Int? = nil,extraData: [String: RawJSON]? = nil,completion: ((Error?) -> Void)? = nil)
+   public func suggestPollOption(text: String,position: Int? = nil,extraData: [String: RawJSON]? = nil,completion: (@MainActor(Error?) -> Void)? = nil)

- public struct AttachmentAction: Codable, Hashable  
+ public struct AttachmentAction: Codable, Hashable, Sendable  
-   public enum ActionType: String, Codable  
+   public enum ActionType: String, Codable, Sendable  
-   public enum ActionStyle: String, Codable  
+   public enum ActionStyle: String, Codable, Sendable  

- public struct UnreadThread  
+ public struct UnreadThread: Sendable  

- public protocol ChatConnectionControllerDelegate: AnyObject
+ @MainActor public protocol ChatConnectionControllerDelegate: AnyObject

- public struct Pagination: Encodable, Equatable  
+ public struct Pagination: Encodable, Equatable, Sendable  

 open class PollAllOptionsListVC: _ViewController, ThemeProvider, PollControllerDelegate, UITableViewDataSource, UITableViewDelegate  
-   public struct Section: RawRepresentable, Equatable  
+   public struct Section: RawRepresentable, Equatable, Sendable  
-     public static var name
+     public static let name
-     public static var options
+     public static let options

- public struct ChannelWatcherListQuery: Encodable  
+ public struct ChannelWatcherListQuery: Encodable, Sendable  

- public struct PollVoteListQuery: Encodable  
+ public struct PollVoteListQuery: Encodable, Sendable  

- public class ChatConnectionController: Controller, DelegateCallable, DataStoreProvider  
+ public class ChatConnectionController: Controller, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   public var callbackQueue: DispatchQueue
+   public var connectionStatus: ConnectionStatus
-   public var connectionStatus: ConnectionStatus
+   public let client: ChatClient
-   public let client: ChatClient

 public enum StreamRuntimeCheck  
-   public static var assertionsEnabled
+   public nonisolated static var assertionsEnabled
-   public static var _isDatabasePrefetchingEnabled
+   public nonisolated static var _isDatabasePrefetchingEnabled

- public struct Token: Decodable, Equatable, ExpressibleByStringLiteral  
+ public struct Token: Decodable, Equatable, ExpressibleByStringLiteral, Sendable  

 public struct TypingSuggester  
-   public func typingSuggestion(in textView: UITextView)-> TypingSuggestion?
+   @MainActor public func typingSuggestion(in textView: UITextView)-> TypingSuggestion?

- public struct AudioPlaybackContext: Equatable  
+ public struct AudioPlaybackContext: Equatable, Sendable  

- public struct PushProvider: RawRepresentable, Hashable, ExpressibleByStringLiteral  
+ public struct PushProvider: RawRepresentable, Hashable, ExpressibleByStringLiteral, Sendable  

- public final class PollVoteAlreadyExists: ClientError  
+ public final class PollVoteAlreadyExists: ClientError, @unchecked Sendable  

- open class StreamAudioRecorder: NSObject, AudioRecording, AVAudioRecorderDelegate, AppStateObserverDelegate  
+ open class StreamAudioRecorder: NSObject, AudioRecording, AVAudioRecorderDelegate, AppStateObserverDelegate, @unchecked Sendable  
-   open func beginRecording(_ completionHandler: @escaping (() -> Void))
+   open func beginRecording(_ completionHandler: @escaping @Sendable() -> Void)
-     public static let `default`
+     nonisolated public static let `default`

- public struct CurrentUserUnreads  
+ public struct CurrentUserUnreads: Sendable  

- public class ChatUser  
+ public class ChatUser: @unchecked Sendable  

- public final class ConnectionWasNotInitiated: ClientError  
+ public final class ConnectionWasNotInitiated: ClientError, @unchecked Sendable  

 open class AudioQueuePlayerNextItemProvider  
-   public struct LookUpScope: RawRepresentable, Equatable  
+   public struct LookUpScope: RawRepresentable, Equatable, Sendable  

- public protocol QuotedChatMessageViewSwiftUIView: View
+ @MainActor public protocol QuotedChatMessageViewSwiftUIView: View

- public struct AudioPlaybackRate: Comparable, Equatable  
+ public struct AudioPlaybackRate: Comparable, Equatable, Sendable  

- public protocol CurrentChatUserControllerDelegate: AnyObject
+ @MainActor public protocol CurrentChatUserControllerDelegate: AnyObject

- public struct UploadedAttachment  
+ public struct UploadedAttachment: Sendable  

- public protocol CustomEventPayload: Codable, Hashable
+ public protocol CustomEventPayload: Codable, Hashable, Sendable

- public class ConsoleLogDestination: BaseLogDestination  
+ public class ConsoleLogDestination: BaseLogDestination, @unchecked Sendable  

- public class ChannelConfig: Codable  
+ public final class ChannelConfig: Codable, Sendable  

- public class ChatChannelController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatChannelController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func updateChannel(name: String?,imageURL: URL?,team: String?,members: Set<UserId> = [],invites: Set<UserId> = [],extraData: [String: RawJSON] = [:],completion: ((Error?) -> Void)? = nil)
+   public func updateChannel(name: String?,imageURL: URL?,team: String?,members: Set<UserId> = [],invites: Set<UserId> = [],extraData: [String: RawJSON] = [:],completion: (@MainActor(Error?) -> Void)? = nil)
-   public func partialChannelUpdate(name: String? = nil,imageURL: URL? = nil,team: String? = nil,members: Set<UserId> = [],invites: Set<UserId> = [],extraData: [String: RawJSON] = [:],unsetProperties: [String] = [],completion: ((Error?) -> Void)? = nil)
+   public func partialChannelUpdate(name: String? = nil,imageURL: URL? = nil,team: String? = nil,members: Set<UserId> = [],invites: Set<UserId> = [],extraData: [String: RawJSON] = [:],unsetProperties: [String] = [],completion: (@MainActor(Error?) -> Void)? = nil)
-   public func muteChannel(expiration: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func muteChannel(expiration: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unmuteChannel(completion: ((Error?) -> Void)? = nil)
+   public func unmuteChannel(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func archive(scope: ChannelArchivingScope = .me,completion: ((Error?) -> Void)? = nil)
+   public func archive(scope: ChannelArchivingScope = .me,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unarchive(scope: ChannelArchivingScope = .me,completion: ((Error?) -> Void)? = nil)
+   public func unarchive(scope: ChannelArchivingScope = .me,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func deleteChannel(completion: ((Error?) -> Void)? = nil)
+   public func deleteChannel(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func truncateChannel(skipPush: Bool = false,hardDelete: Bool = true,systemMessage: String? = nil,completion: ((Error?) -> Void)? = nil)
+   public func truncateChannel(skipPush: Bool = false,hardDelete: Bool = true,systemMessage: String? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func hideChannel(clearHistory: Bool = false,completion: ((Error?) -> Void)? = nil)
+   public func hideChannel(clearHistory: Bool = false,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func showChannel(completion: ((Error?) -> Void)? = nil)
+   public func showChannel(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadPreviousMessages(before messageId: MessageId? = nil,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadPreviousMessages(before messageId: MessageId? = nil,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadNextMessages(after messageId: MessageId? = nil,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadNextMessages(after messageId: MessageId? = nil,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadPageAroundMessageId(_ messageId: MessageId,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadPageAroundMessageId(_ messageId: MessageId,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadFirstPage(_ completion: ((_ error: Error?) -> Void)? = nil)
+   public func loadFirstPage(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func sendKeystrokeEvent(parentMessageId: MessageId? = nil,completion: ((Error?) -> Void)? = nil)
+   public func sendKeystrokeEvent(parentMessageId: MessageId? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func sendStartTypingEvent(parentMessageId: MessageId? = nil,completion: ((Error?) -> Void)? = nil)
+   public func sendStartTypingEvent(parentMessageId: MessageId? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func sendStopTypingEvent(parentMessageId: MessageId? = nil,completion: ((Error?) -> Void)? = nil)
+   public func sendStopTypingEvent(parentMessageId: MessageId? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func createNewMessage(messageId: MessageId? = nil,text: String,pinning: MessagePinning? = nil,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,skipPush: Bool = false,skipEnrichUrl: Bool = false,restrictedVisibility: [UserId] = [],location: NewLocationInfo? = nil,extraData: [String: RawJSON] = [:],completion: ((Result<MessageId, Error>) -> Void)? = nil)
+   public func createNewMessage(messageId: MessageId? = nil,text: String,pinning: MessagePinning? = nil,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,skipPush: Bool = false,skipEnrichUrl: Bool = false,restrictedVisibility: [UserId] = [],location: NewLocationInfo? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<MessageId, Error>) -> Void)? = nil)
-   public func createSystemMessage(text: String,messageId: MessageId? = nil,restrictedVisibility: [UserId] = [],extraData: [String: RawJSON] = [:],completion: ((Result<MessageId, Error>) -> Void)? = nil)
+   public func createSystemMessage(text: String,messageId: MessageId? = nil,restrictedVisibility: [UserId] = [],extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<MessageId, Error>) -> Void)? = nil)
-   public func sendStaticLocation(_ location: LocationInfo,text: String? = nil,messageId: MessageId? = nil,quotedMessageId: MessageId? = nil,extraData: [String: RawJSON] = [:],completion: ((Result<MessageId, Error>) -> Void)? = nil)
+   public func sendStaticLocation(_ location: LocationInfo,text: String? = nil,messageId: MessageId? = nil,quotedMessageId: MessageId? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<MessageId, Error>) -> Void)? = nil)
-   public func startLiveLocationSharing(_ location: LocationInfo,endDate: Date,text: String? = nil,extraData: [String: RawJSON] = [:],completion: ((Result<MessageId, Error>) -> Void)? = nil)
+   public func startLiveLocationSharing(_ location: LocationInfo,endDate: Date,text: String? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<MessageId, Error>) -> Void)? = nil)
-   public func updateDraftMessage(text: String,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,command: Command? = nil,extraData: [String: RawJSON] = [:],completion: ((Result<DraftMessage, Error>) -> Void)? = nil)
+   public func updateDraftMessage(text: String,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,command: Command? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<DraftMessage, Error>) -> Void)? = nil)
-   public func loadDraftMessage(completion: ((Result<DraftMessage?, Error>) -> Void)? = nil)
+   public func loadDraftMessage(completion: (@MainActor(Result<DraftMessage?, Error>) -> Void)? = nil)
-   public func deleteDraftMessage(completion: ((Error?) -> Void)? = nil)
+   public func deleteDraftMessage(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func createPoll(name: String,allowAnswers: Bool? = nil,allowUserSuggestedOptions: Bool? = nil,description: String? = nil,enforceUniqueVote: Bool? = nil,maxVotesAllowed: Int? = nil,votingVisibility: VotingVisibility? = nil,options: [PollOption]? = nil,extraData: [String: RawJSON]? = nil,completion: ((Result<MessageId, Error>) -> Void)?)
+   public func createPoll(name: String,allowAnswers: Bool? = nil,allowUserSuggestedOptions: Bool? = nil,description: String? = nil,enforceUniqueVote: Bool? = nil,maxVotesAllowed: Int? = nil,votingVisibility: VotingVisibility? = nil,options: [PollOption]? = nil,extraData: [String: RawJSON]? = nil,completion: (@MainActor(Result<MessageId, Error>) -> Void)?)
-   public func deletePoll(pollId: String,completion: ((Error?) -> Void)? = nil)
+   public func deletePoll(pollId: String,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func addMembers(_ members: [MemberInfo],hideHistory: Bool = false,message: String? = nil,completion: ((Error?) -> Void)? = nil)
+   public func addMembers(_ members: [MemberInfo],hideHistory: Bool = false,message: String? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func addMembers(userIds: Set<UserId>,hideHistory: Bool = false,message: String? = nil,completion: ((Error?) -> Void)? = nil)
+   public func addMembers(userIds: Set<UserId>,hideHistory: Bool = false,message: String? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func removeMembers(userIds: Set<UserId>,message: String? = nil,completion: ((Error?) -> Void)? = nil)
+   public func removeMembers(userIds: Set<UserId>,message: String? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func inviteMembers(userIds: Set<UserId>,completion: ((Error?) -> Void)? = nil)
+   public func inviteMembers(userIds: Set<UserId>,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func acceptInvite(message: String? = nil,completion: ((Error?) -> Void)? = nil)
+   public func acceptInvite(message: String? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func rejectInvite(completion: ((Error?) -> Void)? = nil)
+   public func rejectInvite(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func markRead(completion: ((Error?) -> Void)? = nil)
+   public func markRead(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func markUnread(from messageId: MessageId,completion: ((Result<ChatChannel, Error>) -> Void)? = nil)
+   public func markUnread(from messageId: MessageId,completion: (@MainActor(Result<ChatChannel, Error>) -> Void)? = nil)
-   public func loadChannelReads(pagination: Pagination? = nil,completion: @escaping (Error?) -> Void)
+   public func loadChannelReads(pagination: Pagination? = nil,completion: @escaping @MainActor(Error?) -> Void)
-   public func loadMoreChannelReads(limit: Int? = nil,completion: @escaping (Error?) -> Void)
+   public func loadMoreChannelReads(limit: Int? = nil,completion: @escaping @MainActor(Error?) -> Void)
-   public func enableSlowMode(cooldownDuration: Int,completion: ((Error?) -> Void)? = nil)
+   public func enableSlowMode(cooldownDuration: Int,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func disableSlowMode(completion: ((Error?) -> Void)? = nil)
+   public func disableSlowMode(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func startWatching(isInRecoveryMode: Bool,completion: ((Error?) -> Void)? = nil)
+   public func startWatching(isInRecoveryMode: Bool,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func stopWatching(completion: ((Error?) -> Void)? = nil)
+   public func stopWatching(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func freezeChannel(completion: ((Error?) -> Void)? = nil)
+   public func freezeChannel(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unfreezeChannel(completion: ((Error?) -> Void)? = nil)
+   public func unfreezeChannel(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func pin(scope: ChannelPinningScope = .me,completion: ((Error?) -> Void)? = nil)
+   public func pin(scope: ChannelPinningScope = .me,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unpin(scope: ChannelPinningScope = .me,completion: ((Error?) -> Void)? = nil)
+   public func unpin(scope: ChannelPinningScope = .me,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func uploadAttachment(localFileURL: URL,type: AttachmentType,progress: ((Double) -> Void)? = nil,completion: @escaping ((Result<UploadedAttachment, Error>) -> Void))
+   public func uploadAttachment(localFileURL: URL,type: AttachmentType,progress: (@Sendable(Double) -> Void)? = nil,completion: @escaping @MainActor(Result<UploadedAttachment, Error>) -> Void)
-   public func enrichUrl(_ url: URL,completion: @escaping (Result<LinkAttachmentPayload, Error>) -> Void)
+   public func enrichUrl(_ url: URL,completion: @escaping @MainActor(Result<LinkAttachmentPayload, Error>) -> Void)
-   public func loadPinnedMessages(pageSize: Int = .messagesPageSize,sorting: [Sorting<PinnedMessagesSortingKey>] = [],pagination: PinnedMessagesPagination? = nil,completion: @escaping (Result<[ChatMessage], Error>) -> Void)
+   public func loadPinnedMessages(pageSize: Int = .messagesPageSize,sorting: [Sorting<PinnedMessagesSortingKey>] = [],pagination: PinnedMessagesPagination? = nil,completion: @escaping @MainActor(Result<[ChatMessage], Error>) -> Void)
-   public func deleteFile(url: String,completion: ((Error?) -> Void)? = nil)
+   public func deleteFile(url: String,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func deleteImage(url: String,completion: ((Error?) -> Void)? = nil)
+   public func deleteImage(url: String,completion: (@MainActor(Error?) -> Void)? = nil)

- public struct SharedLocation: Equatable  
+ public struct SharedLocation: Equatable, Sendable  

- public final class ReconnectionTimeout: ClientError  
+ public final class ReconnectionTimeout: ClientError, @unchecked Sendable  

- public protocol ChatMessageListVCDataSource: AnyObject
+ @MainActor public protocol ChatMessageListVCDataSource: AnyObject

- public struct MessageReminder  
+ public struct MessageReminder: Sendable  

- public class ChatChannelMember: ChatUser  
+ public class ChatChannelMember: ChatUser, @unchecked Sendable  

- public class ChatThreadListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatThreadListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadMoreThreads(limit: Int? = nil,completion: ((Result<[ChatThread], Error>) -> Void)? = nil)
+   public func loadMoreThreads(limit: Int? = nil,completion: (@MainActor(Result<[ChatThread], Error>) -> Void)? = nil)

- public protocol AssetPropertyLoading
+ public protocol AssetPropertyLoading: Sendable

- public struct MaxMessageLimitOptions  
+ public struct MaxMessageLimitOptions: Sendable  

- public final class InvalidToken: ClientError
+ public final class InvalidToken: ClientError, @unchecked Sendable

- public struct PollFeatureType: Equatable  
+ public struct PollFeatureType: Equatable, Sendable  
-   public static var multipleVotes
+   public static let multipleVotes
-   public static var anonymous
+   public static let anonymous
-   public static var suggestions
+   public static let suggestions
-   public static var comments
+   public static let comments

- public struct UserListQuery: Encodable  
+ public struct UserListQuery: Encodable, Sendable  

- public struct PollsEntryConfig  
+ public struct PollsEntryConfig: Sendable  

- public struct TranslationLanguage: Hashable  
+ public struct TranslationLanguage: Hashable, Sendable  

- public struct ImageResize  
+ public struct ImageResize: Sendable  

- public protocol ChatChannelUnreadCountViewSwiftUIView: View
+ @MainActor public protocol ChatChannelUnreadCountViewSwiftUIView: View

- public struct AssetProperty: CustomStringConvertible  
+ public struct AssetProperty: CustomStringConvertible, Sendable  

- public struct MessageDeliveryStatus: RawRepresentable, Hashable  
+ public struct MessageDeliveryStatus: RawRepresentable, Hashable, Sendable  

- open class SwipeToReplyGestureHandler  
+ @MainActor open class SwipeToReplyGestureHandler  
-   public init(listView: ChatMessageListView,impactFeedbackGenerator: UIImpactFeedbackGenerator = .init(style: .medium))
+   public init(listView: ChatMessageListView,impactFeedbackGenerator: UIImpactFeedbackGenerator? = nil)

- public final class InvalidChannelId: ClientError
+ public final class InvalidChannelId: ClientError, @unchecked Sendable

- public class MessageReminderUpdatedEvent: Event  
+ public final class MessageReminderUpdatedEvent: Event  

- public protocol GiphyActionContentViewDelegate: ChatMessageContentViewDelegate
+ @MainActor public protocol GiphyActionContentViewDelegate: ChatMessageContentViewDelegate

- public struct LocationInfo  
+ public struct LocationInfo: Sendable  

- public enum LocalAttachmentDownloadState: Hashable  
+ public enum LocalAttachmentDownloadState: Hashable, Sendable  

- public struct DraftListQuery: Encodable  
+ public struct DraftListQuery: Encodable, Sendable  

- public struct ChatThread  
+ public struct ChatThread: Sendable  

- public class ChatUserSearchController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatUserSearchController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   public func search(term: String?,completion: ((_ error: Error?) -> Void)? = nil)
+   public func search(term: String?,completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func search(query: UserListQuery,completion: ((_ error: Error?) -> Void)? = nil)
+   public func search(query: UserListQuery,completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadNextUsers(limit: Int = 25,completion: ((Error?) -> Void)? = nil)
+   public func loadNextUsers(limit: Int = 25,completion: (@MainActor(Error?) -> Void)? = nil)

- public class MessageReminderDueEvent: Event  
+ public final class MessageReminderDueEvent: Event  

- public struct Filter  
+ public struct Filter: Sendable  

- public enum ConnectionStatus: Equatable  
+ public enum ConnectionStatus: Equatable, Sendable  

- @available(iOSApplicationExtension, unavailable) public protocol LinkPreviewViewDelegate: ChatMessageContentViewDelegate
+ @available(iOSApplicationExtension, unavailable) @MainActor public protocol LinkPreviewViewDelegate: ChatMessageContentViewDelegate

- public final class TooManyFailedTokenRefreshAttempts: ClientError  
+ public final class TooManyFailedTokenRefreshAttempts: ClientError, @unchecked Sendable  

 extension ImageAttachmentPayload: AttachmentPreviewProvider  
-   public func previewView(components: Components)-> UIView
+   @MainActor public func previewView(components: Components)-> UIView

- public struct UnreadCount: Decodable, Equatable  
+ public struct UnreadCount: Decodable, Equatable, Sendable  

- public class ChannelEventsController: EventsController  
+ public class ChannelEventsController: EventsController, @unchecked Sendable  
-   public func sendEvent(_ payload: T,completion: ((Error?) -> Void)? = nil)
+   public func sendEvent(_ payload: T,completion: (@Sendable(Error?) -> Void)? = nil)

- public protocol AppearanceProvider: AnyObject
+ @MainActor public protocol AppearanceProvider: AnyObject

- public protocol EventsControllerDelegate: AnyObject
+ @MainActor public protocol EventsControllerDelegate: AnyObject

- public struct AttachmentUploadingState: Hashable  
+ public struct AttachmentUploadingState: Hashable, Sendable  

- public struct Command: Codable, Hashable  
+ public struct Command: Codable, Hashable, Sendable  

- public enum AttachmentFileType: String, Codable, Equatable, CaseIterable  
+ public enum AttachmentFileType: String, Codable, Equatable, CaseIterable, Sendable  

- public protocol SortingKey: Encodable
+ public protocol SortingKey: Encodable, Sendable

 open class VoiceRecordingVC: _ViewController, ComponentsProvider, AppearanceProvider, AudioRecordingDelegate, AudioPlayingDelegate, UIGestureRecognizerDelegate  
-   public struct State: RawRepresentable, Equatable  
+   public struct State: RawRepresentable, Equatable, Sendable  
-     public static var idle
+     public static let idle
-     public static var showingTip
+     public static let showingTip
-     public static var recording
+     public static let recording
-     public static var locked
+     public static let locked
-     public static var preview
+     public static let preview
-   public struct Action: RawRepresentable, Equatable  
+   public struct Action: RawRepresentable, Equatable, Sendable  
-     public static var tapRecord
+     public static let tapRecord
-     public static var showTip
+     public static let showTip
-     public static var beginRecording
+     public static let beginRecording
-     public static var touchUp
+     public static let touchUp
-     public static var cancel
+     public static let cancel
-     public static var lock
+     public static let lock
-     public static var stop
+     public static let stop
-     public static var discard
+     public static let discard
-     public static var send
+     public static let send
-     public static var confirm
+     public static let confirm
-     public static var publishMessage
+     public static let publishMessage
-     public static var play
+     public static let play
-     public static var pause
+     public static let pause
-   public struct Content: Equatable  
+   public struct Content: Equatable, Sendable  

- public struct ChatChannel  
+ public struct ChatChannel: Sendable  

- public final class MissingToken: ClientError
+ public final class MissingToken: ClientError, @unchecked Sendable

- public struct VotingVisibility: RawRepresentable, Equatable  
+ public struct VotingVisibility: RawRepresentable, Equatable, Sendable  

 open class ChatChannelAvatarView: _View, ThemeProvider, SwiftUIRepresentable  
-   open func loadAvatarsFrom(urls: [URL?],channelId: ChannelId,completion: @escaping ([UIImage], ChannelId)
+   open func loadAvatarsFrom(urls: [URL?],channelId: ChannelId,completion: @escaping @Sendable([UIImage], ChannelId)

- public class CooldownTracker  
+ public class CooldownTracker: @unchecked Sendable  

- public class ChatMessageController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatMessageController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(Error?) -> Void)? = nil)
-   public func editMessage(text: String,skipEnrichUrl: Bool = false,skipPush: Bool = false,attachments: [AnyAttachmentPayload] = [],restrictedVisibility: [UserId] = [],extraData: [String: RawJSON]? = nil,completion: ((Error?) -> Void)? = nil)
+   public func editMessage(text: String,skipEnrichUrl: Bool = false,skipPush: Bool = false,attachments: [AnyAttachmentPayload] = [],restrictedVisibility: [UserId] = [],extraData: [String: RawJSON]? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func partialUpdateMessage(text: String? = nil,attachments: [AnyAttachmentPayload]? = nil,extraData: [String: RawJSON]? = nil,unsetProperties: [String]? = nil,completion: ((Result<ChatMessage, Error>) -> Void)? = nil)
+   public func partialUpdateMessage(text: String? = nil,attachments: [AnyAttachmentPayload]? = nil,extraData: [String: RawJSON]? = nil,unsetProperties: [String]? = nil,completion: (@MainActor(Result<ChatMessage, Error>) -> Void)? = nil)
-   public func deleteMessage(hard: Bool = false,completion: ((Error?) -> Void)? = nil)
+   public func deleteMessage(hard: Bool = false,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func createNewReply(messageId: MessageId? = nil,text: String,pinning: MessagePinning? = nil,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],showReplyInChannel: Bool = false,isSilent: Bool = false,quotedMessageId: MessageId? = nil,skipPush: Bool = false,skipEnrichUrl: Bool = false,extraData: [String: RawJSON] = [:],completion: ((Result<MessageId, Error>) -> Void)? = nil)
+   public func createNewReply(messageId: MessageId? = nil,text: String,pinning: MessagePinning? = nil,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],showReplyInChannel: Bool = false,isSilent: Bool = false,quotedMessageId: MessageId? = nil,skipPush: Bool = false,skipEnrichUrl: Bool = false,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<MessageId, Error>) -> Void)? = nil)
-   public func loadPreviousReplies(before replyId: MessageId? = nil,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadPreviousReplies(before replyId: MessageId? = nil,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadPageAroundReplyId(_ replyId: MessageId,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadPageAroundReplyId(_ replyId: MessageId,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadNextReplies(after replyId: MessageId? = nil,limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadNextReplies(after replyId: MessageId? = nil,limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadFirstPage(limit: Int? = nil,_ completion: ((_ error: Error?) -> Void)? = nil)
+   public func loadFirstPage(limit: Int? = nil,_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadNextReactions(limit: Int = 25,completion: ((Error?) -> Void)? = nil)
+   public func loadNextReactions(limit: Int = 25,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadReactions(limit: Int,offset: Int = 0,completion: @escaping (Result<[ChatMessageReaction], Error>) -> Void)
+   public func loadReactions(limit: Int,offset: Int = 0,completion: @escaping @MainActor(Result<[ChatMessageReaction], Error>) -> Void)
-   public func flag(reason: String? = nil,extraData: [String: RawJSON]? = nil,completion: ((Error?) -> Void)? = nil)
+   public func flag(reason: String? = nil,extraData: [String: RawJSON]? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unflag(completion: ((Error?) -> Void)? = nil)
+   public func unflag(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func addReaction(_ type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,skipPush: Bool = false,pushEmojiCode: String? = nil,extraData: [String: RawJSON] = [:],completion: ((Error?) -> Void)? = nil)
+   public func addReaction(_ type: MessageReactionType,score: Int = 1,enforceUnique: Bool = false,skipPush: Bool = false,pushEmojiCode: String? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Error?) -> Void)? = nil)
-   public func deleteReaction(_ type: MessageReactionType,completion: ((Error?) -> Void)? = nil)
+   public func deleteReaction(_ type: MessageReactionType,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func pin(_ pinning: MessagePinning,completion: ((Error?) -> Void)? = nil)
+   public func pin(_ pinning: MessagePinning,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func unpin(completion: ((Error?) -> Void)? = nil)
+   public func unpin(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func downloadAttachment(_ attachment: ChatMessageAttachment<Payload>,completion: @escaping (Result<ChatMessageAttachment<Payload>, Error>) -> Void)
+   public func downloadAttachment(_ attachment: ChatMessageAttachment<Payload>,completion: @escaping @MainActor(Result<ChatMessageAttachment<Payload>, Error>) -> Void)
-   public func deleteLocalAttachmentDownload(for attachmentId: AttachmentId,completion: ((Error?) -> Void)? = nil)
+   public func deleteLocalAttachmentDownload(for attachmentId: AttachmentId,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func restartFailedAttachmentUploading(with id: AttachmentId,completion: ((Error?) -> Void)? = nil)
+   public func restartFailedAttachmentUploading(with id: AttachmentId,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func resendMessage(completion: ((Error?) -> Void)? = nil)
+   public func resendMessage(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func dispatchEphemeralMessageAction(_ action: AttachmentAction,completion: ((Error?) -> Void)? = nil)
+   public func dispatchEphemeralMessageAction(_ action: AttachmentAction,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func translate(to language: TranslationLanguage,completion: ((Error?) -> Void)? = nil)
+   public func translate(to language: TranslationLanguage,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func markThreadRead(completion: ((Error?) -> Void)? = nil)
+   public func markThreadRead(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func markThreadUnread(completion: ((Error?) -> Void)? = nil)
+   public func markThreadUnread(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func loadThread(replyLimit: Int? = nil,participantLimit: Int? = nil,completion: @escaping ((Result<ChatThread, Error>) -> Void))
+   public func loadThread(replyLimit: Int? = nil,participantLimit: Int? = nil,completion: @escaping @MainActor(Result<ChatThread, Error>) -> Void)
-   public func updateThread(title: String?,extraData: [String: RawJSON]? = nil,unsetProperties: [String]? = nil,completion: @escaping ((Result<ChatThread, Error>) -> Void))
+   public func updateThread(title: String?,extraData: [String: RawJSON]? = nil,unsetProperties: [String]? = nil,completion: @escaping @MainActor(Result<ChatThread, Error>) -> Void)
-   public func stopLiveLocationSharing(completion: ((Result<SharedLocation, Error>) -> Void)? = nil)
+   public func stopLiveLocationSharing(completion: (@MainActor(Result<SharedLocation, Error>) -> Void)? = nil)
-   public func updateDraftReply(text: String,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,showReplyInChannel: Bool = false,command: Command? = nil,extraData: [String: RawJSON] = [:],completion: ((Result<DraftMessage, Error>) -> Void)? = nil)
+   public func updateDraftReply(text: String,isSilent: Bool = false,attachments: [AnyAttachmentPayload] = [],mentionedUserIds: [UserId] = [],quotedMessageId: MessageId? = nil,showReplyInChannel: Bool = false,command: Command? = nil,extraData: [String: RawJSON] = [:],completion: (@MainActor(Result<DraftMessage, Error>) -> Void)? = nil)
-   public func loadDraftReply(completion: ((Result<DraftMessage?, Error>) -> Void)? = nil)
+   public func loadDraftReply(completion: (@MainActor(Result<DraftMessage?, Error>) -> Void)? = nil)
-   public func deleteDraftReply(completion: ((Error?) -> Void)? = nil)
+   public func deleteDraftReply(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func createReminder(remindAt: Date? = nil,completion: ((Result<MessageReminder, Error>) -> Void)? = nil)
+   public func createReminder(remindAt: Date? = nil,completion: (@MainActor(Result<MessageReminder, Error>) -> Void)? = nil)
-   public func updateReminder(remindAt: Date?,completion: ((Result<MessageReminder, Error>) -> Void)? = nil)
+   public func updateReminder(remindAt: Date?,completion: (@MainActor(Result<MessageReminder, Error>) -> Void)? = nil)
-   public func deleteReminder(completion: ((Error?) -> Void)? = nil)
+   public func deleteReminder(completion: (@MainActor(Error?) -> Void)? = nil)

- public struct PushNotificationType: Equatable  
+ public struct PushNotificationType: Equatable, Sendable  
-   public static var messageNew: PushNotificationType
+   public static let messageNew: PushNotificationType
-   public static var messageReminderDue: PushNotificationType
+   public static let messageReminderDue: PushNotificationType
-   public static var messageUpdated: PushNotificationType
+   public static let messageUpdated: PushNotificationType
-   public static var reactionNew: PushNotificationType
+   public static let reactionNew: PushNotificationType

- extension PollController: EventsControllerDelegate  
+ extension PollController  
-   public func eventsController(_ controller: EventsController,didReceiveEvent event: Event)
+   public var observableObject: ObservableObject
+   
+ 
+   public class ObservableObject: SwiftUI.ObservableObject  
+   
+     public let controller: PollController
+     @Published public private var poll: Poll?
+     @Published public private var ownVotes: LazyCachedMapCollection<PollVote>
+     @Published public private var state: DataController.State

- public struct Components  
+ public struct Components: @unchecked Sendable  
-   public static var `default`
+   public nonisolated static var `default`

- public class DraftDeletedEvent: Event  
+ public final class DraftDeletedEvent: Event  

- public enum LocalReactionState: String  
+ public enum LocalReactionState: String, Sendable  

- public protocol ComponentsProvider: AnyObject
+ @MainActor public protocol ComponentsProvider: AnyObject

- public struct LocalCaching: Equatable  
+ public struct LocalCaching: Equatable, Sendable  

- public final class Unknown: ClientError
+ public final class Unknown: ClientError, @unchecked Sendable

- public final class ClientIsNotInActiveMode: ClientError  
+ public final class ClientIsNotInActiveMode: ClientError, @unchecked Sendable  

- public protocol AudioSessionFeedbackGenerator
+ @MainActor public protocol AudioSessionFeedbackGenerator

- public class DataController: Controller  
+ public class DataController: Controller, @unchecked Sendable  
-   public var callbackQueue: DispatchQueue
+   
-   
+ 
- 
+   public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   
-   
+ 
- 
+   public enum State: Equatable, Sendable  
-   public enum State: Equatable  
+   
-   
+     case initialized
-     case initialized
+     case localDataFetched
-     case localDataFetched
+     case localDataFetchFailed(ClientError)
-     case localDataFetchFailed(ClientError)
+     case remoteDataFetched
-     case remoteDataFetched
+     case remoteDataFetchFailed(ClientError)
-     case remoteDataFetchFailed(ClientError)

- public class MessageSearch  
+ public class MessageSearch: @unchecked Sendable  
-   @MainActor public lazy var state: MessageSearchState
+   @MainActor public var state: MessageSearchState

- public struct Appearance  
+ public struct Appearance: @unchecked Sendable  
-   public var localizationProvider: (_ key: String, _ table: String) -> String
+   public var localizationProvider: @Sendable(_ key: String, _ table: String) -> String

- public class StreamAttachmentUploader: AttachmentUploader  
+ public class StreamAttachmentUploader: AttachmentUploader, @unchecked Sendable  
-   public func upload(_ attachment: AnyChatMessageAttachment,progress: ((Double) -> Void)?,completion: @escaping (Result<UploadedAttachment, Error>) -> Void)
+   public func upload(_ attachment: AnyChatMessageAttachment,progress: (@Sendable(Double) -> Void)?,completion: @escaping @Sendable(Result<UploadedAttachment, Error>) -> Void)
-   public func uploadStandaloneAttachment(_ attachment: StreamAttachment<Payload>,progress: ((Double) -> Void)?,completion: @escaping (Result<UploadedFile, Error>) -> Void)
+   public func uploadStandaloneAttachment(_ attachment: StreamAttachment<Payload>,progress: (@Sendable(Double) -> Void)?,completion: @escaping @Sendable(Result<UploadedFile, Error>) -> Void)

- public protocol ChatMessageListScrollOverlayDataSource: AnyObject
+ @MainActor public protocol ChatMessageListScrollOverlayDataSource: AnyObject

- public enum MessageType: String, Codable  
+ public enum MessageType: String, Codable, Sendable  

- public struct EventType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral  
+ public struct EventType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable  

 extension VoiceRecordingAttachmentPayload: AttachmentPreviewProvider  
-   public func previewView(components: Components)-> UIView
+   @MainActor public func previewView(components: Components)-> UIView

 @available(iOSApplicationExtension, unavailable) open class ChatChannelVC: _ViewController, ThemeProvider, ChatMessageListVCDataSource, ChatMessageListVCDelegate, ChatChannelControllerDelegate, EventsControllerDelegate, AudioQueuePlayerDatasource  
-   open func loadPreviousMessages(completion: @escaping (Error?) -> Void)
+   open func loadPreviousMessages(completion: @escaping @MainActor(Error?) -> Void)
-   open func loadNextMessages(completion: @escaping (Error?) -> Void)
+   open func loadNextMessages(completion: @escaping @MainActor(Error?) -> Void)
-   public func chatMessageListVC(_ vc: ChatMessageListVC,shouldLoadPageAroundMessageId messageId: MessageId,_ completion: @escaping ((Error?) -> Void))
+   public func chatMessageListVC(_ vc: ChatMessageListVC,shouldLoadPageAroundMessageId messageId: MessageId,_ completion: @escaping @MainActor(Error?) -> Void)

- public enum LocalMessageState: String  
+ public enum LocalMessageState: String, Sendable  

- public class ChannelList  
+ public class ChannelList: @unchecked Sendable  
-   @MainActor public lazy var state: ChannelListState
+   @MainActor public var state: ChannelListState

- open class StreamVideoLoader: VideoLoading  
+ open class StreamVideoLoader: VideoLoading, @unchecked Sendable  
-   open func loadPreviewForVideo(at url: URL,completion: @escaping (Result<UIImage, Error>) -> Void)
+   open func loadPreviewForVideo(at url: URL,completion: @escaping @MainActor(Result<UIImage, Error>) -> Void)

 public struct AIIndicatorStopEvent: CustomEventPayload, Event  
-   public static var eventType: EventType
+   public static let eventType: EventType

- public struct ChatMessageLayoutOption: RawRepresentable, Hashable, ExpressibleByStringLiteral  
+ public struct ChatMessageLayoutOption: RawRepresentable, Hashable, ExpressibleByStringLiteral, Sendable  

- public struct MessageReminderInfo: Equatable  
+ public struct MessageReminderInfo: Equatable, Sendable  

- public final class MissingTokenProvider: ClientError  
+ public final class MissingTokenProvider: ClientError, @unchecked Sendable  

- public class DraftUpdatedEvent: Event  
+ public final class DraftUpdatedEvent: Event  

- public struct Distribution: Equatable  
+ public struct Distribution: Equatable, Sendable  

 open class ComposerVC: _ViewController, ThemeProvider, UITextViewDelegate, UIImagePickerControllerDelegate, UIDocumentPickerDelegate, UINavigationControllerDelegate, InputTextViewClipboardAttachmentDelegate, VoiceRecordingDelegate  
-   open func addAttachmentToContent(from url: URL,type: AttachmentType,info: [LocalAttachmentInfoKey: Any],extraData: Encodable?)throws 
+   open func addAttachmentToContent(from url: URL,type: AttachmentType,info: [LocalAttachmentInfoKey: Any],extraData: (Encodable & Sendable)?)throws 

- public class EventsController: Controller, DelegateCallable  
+ public class EventsController: Controller, DelegateCallable, @unchecked Sendable  
-   public var callbackQueue: DispatchQueue
+   public var delegate: EventsControllerDelegate?
-   public var delegate: EventsControllerDelegate?

- public indirect enum RawJSON: Codable, Hashable  
+ public indirect enum RawJSON: Codable, Hashable, Sendable  

 extension FileAttachmentPayload: AttachmentPreviewProvider  
-   public func previewView(components: Components)-> UIView
+   @MainActor public func previewView(components: Components)-> UIView

- public struct UnreadChannel  
+ public struct UnreadChannel: Sendable  

- public final class ConnectedUser  
+ public final class ConnectedUser: Sendable  
-   @MainActor public lazy var state: ConnectedUserState
+   @MainActor public var state: ConnectedUserState

- public struct AudioPlaybackState: Equatable, CustomStringConvertible  
+ public struct AudioPlaybackState: Equatable, CustomStringConvertible, Sendable  

- public struct TextLink: Equatable  
+ public struct TextLink: Equatable, Sendable  

- public final class ConnectionNotSuccessful: ClientError  
+ public final class ConnectionNotSuccessful: ClientError, @unchecked Sendable  

- public protocol AudioQueuePlayerDatasource: AnyObject
+ @MainActor public protocol AudioQueuePlayerDatasource: AnyObject

- public struct ChatChannelRead: Equatable  
+ public struct ChatChannelRead: Equatable, Sendable  

 @available(iOSApplicationExtension, unavailable) open class ChatChannelSearchVC: ChatChannelListSearchVC  
-   public var didSelectChannel: ((ChatChannel) -> Void)?
+   public var didSelectChannel: (@MainActor(ChatChannel) -> Void)?

- public struct UserPrivacySettings  
+ public struct UserPrivacySettings: Sendable  

- public struct AudioRecordingState: Hashable  
+ public struct AudioRecordingState: Hashable, Sendable  

- public struct ChannelMemberListQuery: Encodable  
+ public struct ChannelMemberListQuery: Encodable, Sendable  

- public struct ReadReceiptsPrivacySettings  
+ public struct ReadReceiptsPrivacySettings: Sendable  

- public struct UserInfo  
+ public struct UserInfo: Sendable  

- public class ChatChannelMemberController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatChannelMemberController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public final class Unexpected: ClientError
+ public final class Unexpected: ClientError, @unchecked Sendable

- public struct LocalAttachmentInfoKey: Hashable, Equatable, RawRepresentable  
+ public struct LocalAttachmentInfoKey: Hashable, Equatable, RawRepresentable, Sendable  

- public protocol Event
+ public protocol Event: Sendable

- public struct UnreadChannelByType  
+ public struct UnreadChannelByType: Sendable  

- public struct BlockedUserDetails  
+ public struct BlockedUserDetails: Sendable  

- public protocol AttachmentPayload: Codable
+ public protocol AttachmentPayload: Codable, Sendable

- public enum MessageOrdering  
+ public enum MessageOrdering: Sendable  

- public protocol ImageProcessor
+ public protocol ImageProcessor: Sendable

- public final class MemberList  
+ public final class MemberList: Sendable  
-   @MainActor public lazy var state: MemberListState
+   @MainActor public var state: MemberListState

 public struct DefaultAttachmentPreviewProvider: AttachmentPreviewProvider  
-   public func previewView(components: Components)-> UIView
+   @MainActor public func previewView(components: Components)-> UIView

- public struct Mode  
+ public struct Mode: Sendable  
-   public static var clip
+   public static let clip
-   public static var fill
+   public static let fill
-   public static var scale
+   public static let scale

- public protocol AttachmentUploader
+ public protocol AttachmentUploader: Sendable

- public struct MessagePinDetails  
+ public struct MessagePinDetails: Sendable  

- public struct ThreadParticipant: Equatable  
+ public struct ThreadParticipant: Equatable, Sendable  

- public class ScheduledStreamTimer: StreamTimer  
+ public class ScheduledStreamTimer: StreamTimer, @unchecked Sendable  
-   public var onChange: (() -> Void)?
+   public var onChange: (@Sendable() -> Void)?

- public protocol DataControllerStateDelegate: AnyObject
+ @MainActor public protocol DataControllerStateDelegate: AnyObject

- public class Chat  
+ public class Chat: @unchecked Sendable  
-   @MainActor public lazy var state: ChatState
+   @MainActor public var state: ChatState
-   public func subscribe(toEvent event: E.Type,handler: @escaping (E) -> Void)-> AnyCancellable
+   public func subscribe(toEvent event: E.Type,handler: @escaping @Sendable(E) -> Void)-> AnyCancellable
-   public func subscribe(_ handler: @escaping (Event) -> Void)-> AnyCancellable
+   public func subscribe(_ handler: @escaping @Sendable(Event) -> Void)-> AnyCancellable
-   public func uploadAttachment(with localFileURL: URL,type: AttachmentType,progress: ((Double) -> Void)? = nil)async throws -> UploadedAttachment
+   public func uploadAttachment(with localFileURL: URL,type: AttachmentType,progress: (@Sendable(Double) -> Void)? = nil)async throws -> UploadedAttachment

- public struct AppSettings  
+ public struct AppSettings: Sendable  
-   public struct UploadConfig  
+   public struct UploadConfig: Sendable  

- public struct EmptyResponse: Decodable
+ public struct EmptyResponse: Decodable, Sendable

- public protocol AudioPlayingDelegate: AnyObject
+ @MainActor public protocol AudioPlayingDelegate: AnyObject

- public class CurrentChatUser: ChatUser  
+ public class CurrentChatUser: ChatUser, @unchecked Sendable  

- public final class UnsupportedUploadableAttachmentType: ClientError
+ public final class UnsupportedUploadableAttachmentType: ClientError, @unchecked Sendable

- public protocol CDNClient
+ public protocol CDNClient: Sendable

- public struct AttachmentDownloadingState: Hashable  
+ public struct AttachmentDownloadingState: Hashable, Sendable  

- public protocol UploadedAttachmentPostProcessor
+ public protocol UploadedAttachmentPostProcessor: Sendable

- public struct ThreadListQuery: Encodable, LocalConvertibleSortingQuery  
+ public struct ThreadListQuery: Encodable, Sendable, LocalConvertibleSortingQuery  

- public struct ChannelUnreadCount: Decodable, Equatable  
+ public struct ChannelUnreadCount: Decodable, Equatable, Sendable  

 public class ChatRemoteNotificationHandler  
-   public func handleNotification(completion: @escaping (ChatPushNotificationContent) -> Void)-> Bool
+   public func handleNotification(completion: @escaping @Sendable(ChatPushNotificationContent) -> Void)-> Bool

- public protocol InputTextViewClipboardAttachmentDelegate: AnyObject
+ @MainActor public protocol InputTextViewClipboardAttachmentDelegate: AnyObject

- public protocol StreamModelsTransformer
+ public protocol StreamModelsTransformer: Sendable

- public protocol FilterValue: Encodable
+ public protocol FilterValue: Encodable, Sendable

- public protocol GalleryContentViewDelegate: ChatMessageContentViewDelegate
+ @MainActor public protocol GalleryContentViewDelegate: ChatMessageContentViewDelegate

- public protocol FileActionContentViewDelegate: ChatMessageContentViewDelegate
+ @MainActor public protocol FileActionContentViewDelegate: ChatMessageContentViewDelegate

- public class PollVoteListController: DataController, DelegateCallable, DataStoreProvider  
+ public class PollVoteListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadMoreVotes(limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadMoreVotes(limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)

- public protocol AudioRecordingDelegate: AnyObject
+ @MainActor public protocol AudioRecordingDelegate: AnyObject

- public protocol SwiftUIRepresentable: AnyObject
+ @MainActor public protocol SwiftUIRepresentable: AnyObject

 open class WaveformView: _View, ThemeProvider  
-   public struct Content: Equatable  
+   public struct Content: Equatable, Sendable  

 @available(iOSApplicationExtension, unavailable) open class ChatThreadVC: _ViewController, ThemeProvider, ChatMessageListVCDataSource, ChatMessageListVCDelegate, ChatMessageControllerDelegate, EventsControllerDelegate, AudioQueuePlayerDatasource  
-   open func loadPreviousReplies(completion: @escaping (Error?) -> Void)
+   open func loadPreviousReplies(completion: @escaping @MainActor(Error?) -> Void)
-   open func loadNextReplies(completion: @escaping (Error?) -> Void)
+   open func loadNextReplies(completion: @escaping @MainActor(Error?) -> Void)
-   public func chatMessageListVC(_ vc: ChatMessageListVC,shouldLoadPageAroundMessageId messageId: MessageId,_ completion: @escaping ((Error?) -> Void))
+   public func chatMessageListVC(_ vc: ChatMessageListVC,shouldLoadPageAroundMessageId messageId: MessageId,_ completion: @escaping @MainActor(Error?) -> Void)

- public enum LocalAttachmentState: Hashable  
+ public enum LocalAttachmentState: Hashable, Sendable  

 open class ChatMessageAttachmentPreviewVC: _ViewController, WKNavigationDelegate, AppearanceProvider  
-   public func webView(_ webView: WKWebView,didStartProvisionalNavigation navigation: WKNavigation!)
+   nonisolated public func webView(_ webView: WKWebView,didStartProvisionalNavigation navigation: WKNavigation!)
-   public func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!)
+   nonisolated public func webView(_ webView: WKWebView,didFinish navigation: WKNavigation!)

- public struct MuteDetails: Equatable  
+ public struct MuteDetails: Equatable, Sendable  

- public struct AudioAnalysisEngine  
+ public struct AudioAnalysisEngine: Sendable  
-   public func waveformVisualisation(fromAudioURL audioURL: URL,for targetSamples: Int,completionHandler: @escaping (Result<[Float], Error>) -> Void)
+   public func waveformVisualisation(fromAudioURL audioURL: URL,for targetSamples: Int,completionHandler: @escaping @Sendable(Result<[Float], Error>) -> Void)

- public class ClientError: Error, CustomStringConvertible  
+ public class ClientError: Error, CustomStringConvertible, @unchecked Sendable  

- public struct PollCreationSection: RawRepresentable, Equatable  
+ public struct PollCreationSection: RawRepresentable, Equatable, Sendable  
-   public static var name
+   public static let name
-   public static var options
+   public static let options
-   public static var features
+   public static let features

- public final class EventDecoding: ClientError
+ public final class EventDecoding: ClientError, @unchecked Sendable

- public class ChatChannelListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatChannelListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadNextChannels(limit: Int? = nil,completion: ((Error?) -> Void)? = nil)
+   public func loadNextChannels(limit: Int? = nil,completion: (@MainActor(Error?) -> Void)? = nil)
-   @available(*, deprecated, message: "Please use `markAllRead` available in `CurrentChatUserController`") public func markAllRead(completion: ((Error?) -> Void)? = nil)
+   @available(*, deprecated, message: "Please use `markAllRead` available in `CurrentChatUserController`") public func markAllRead(completion: (@MainActor(Error?) -> Void)? = nil)

- public struct PollsConfig  
+ public struct PollsConfig: Sendable  

- public class ChatClient  
+ public class ChatClient: @unchecked Sendable  
-   public func connectUser(userInfo: UserInfo,tokenProvider: @escaping TokenProvider,completion: ((Error?) -> Void)? = nil)
+   public func connectUser(userInfo: UserInfo,tokenProvider: @escaping TokenProvider,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func connectUser(userInfo: UserInfo,token: Token,completion: ((Error?) -> Void)? = nil)
+   public func connectUser(userInfo: UserInfo,token: Token,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func connectGuestUser(userInfo: UserInfo,completion: ((Error?) -> Void)? = nil)
+   public func connectGuestUser(userInfo: UserInfo,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func connectAnonymousUser(completion: ((Error?) -> Void)? = nil)
+   public func connectAnonymousUser(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func disconnect(completion: @escaping () -> Void)
+   public func disconnect(completion: @escaping @MainActor() -> Void)
-   public func logout(removeDevice: Bool = true,completion: @escaping () -> Void)
+   public func logout(removeDevice: Bool = true,completion: @escaping @MainActor() -> Void)
-   public func loadAppSettings(completion: ((Result<AppSettings, Error>) -> Void)? = nil)
+   public func loadAppSettings(completion: (@Sendable(Result<AppSettings, Error>) -> Void)? = nil)
-   public func upload(_ attachment: StreamAttachment<Payload>,progress: ((Double) -> Void)?,completion: @escaping (Result<UploadedFile, Error>) -> Void)
+   public func upload(_ attachment: StreamAttachment<Payload>,progress: (@Sendable(Double) -> Void)?,completion: @escaping @Sendable(Result<UploadedFile, Error>) -> Void)

- public struct MessageSearchQuery: Encodable  
+ public struct MessageSearchQuery: Encodable, Sendable  

- public class MessageReminderCreatedEvent: Event  
+ public final class MessageReminderCreatedEvent: Event  

- public class HealthCheckEvent: ConnectionEvent, EventDTO  
+ public final class HealthCheckEvent: ConnectionEvent, EventDTO, Sendable  

- public final class WebSocket: ClientError
+ public final class WebSocket: ClientError, @unchecked Sendable

- public struct ChannelListSearchStrategy  
+ public struct ChannelListSearchStrategy: Sendable  
-   public func makeSearchController(with channelListVC: ChatChannelListVC)-> UISearchController?
+   @MainActor public func makeSearchController(with channelListVC: ChatChannelListVC)-> UISearchController?

- public protocol ChatChannelListItemViewSwiftUIView: View
+ @MainActor public protocol ChatChannelListItemViewSwiftUIView: View

- public class ChatUserListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatUserListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public class ChatChannelWatcherListController: DataController, DelegateCallable, DataStoreProvider  
+ public class ChatChannelWatcherListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)

- public struct AttachmentId: Hashable  
+ public struct AttachmentId: Hashable, Sendable  

- public final class AudioAnalysisEngineError: ClientError  
+ public final class AudioAnalysisEngineError: ClientError, @unchecked Sendable  

- public struct APIKey: Equatable  
+ public struct APIKey: Equatable, Sendable  

- open class AttachmentViewInjector  
+ @MainActor open class AttachmentViewInjector  

- public protocol PollAttachmentViewInjectorDelegate: ChatMessageContentViewDelegate
+ @MainActor public protocol PollAttachmentViewInjectorDelegate: ChatMessageContentViewDelegate

- public struct BaseURL: CustomStringConvertible  
+ public struct BaseURL: CustomStringConvertible, Sendable  

- public struct Spacing: Equatable, ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral  
+ public struct Spacing: Equatable, ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral, Sendable  

- public struct MessageModerationAction: RawRepresentable, Equatable  
+ public struct MessageModerationAction: RawRepresentable, Equatable, Sendable  

- public enum ChannelType: Codable, Hashable  
+ public enum ChannelType: Codable, Hashable, Sendable  

- public struct QueryOptions: OptionSet, Encodable  
+ public struct QueryOptions: OptionSet, Encodable, Sendable  

 @available(iOSApplicationExtension, unavailable) open class ChatMessageSearchVC: ChatChannelListSearchVC, ChatMessageSearchControllerDelegate  
-   public var didSelectMessage: ((ChatChannel, ChatMessage) -> Void)?
+   public var didSelectMessage: (@MainActor(ChatChannel, ChatMessage) -> Void)?

- public struct Poll: Equatable  
+ public struct Poll: Equatable, Sendable  

- public struct Device: Codable, Equatable  
+ public struct Device: Codable, Equatable, Sendable  

- public protocol ChatMessageListVCDelegate: AnyObject
+ @MainActor public protocol ChatMessageListVCDelegate: AnyObject

- public protocol ImageCDN
+ public protocol ImageCDN: Sendable

- public class UserSearch  
+ public class UserSearch: @unchecked Sendable  
-   @MainActor public lazy var state: UserSearchState
+   @MainActor public var state: UserSearchState

- public protocol SwipeableViewDelegate: AnyObject
+ @MainActor public protocol SwipeableViewDelegate: AnyObject

- open class StreamImageCDN: ImageCDN  
+ open class StreamImageCDN: ImageCDN, @unchecked Sendable  
-   public static var streamCDNURL
+   nonisolated public static var streamCDNURL

- public struct AITypingState: ExpressibleByStringLiteral, Hashable  
+ public struct AITypingState: ExpressibleByStringLiteral, Hashable, Sendable  

- public enum PaginationParameter: Encodable, Hashable  
+ public enum PaginationParameter: Encodable, Hashable, Sendable  

- public enum PinnedMessagesPagination: Hashable  
+ public enum PinnedMessagesPagination: Hashable, Sendable  

- public protocol ChatMessageActionsVCDelegate: AnyObject
+ @MainActor public protocol ChatMessageActionsVCDelegate: AnyObject

- public struct AnyAttachmentUpdater  
+ public struct AnyAttachmentUpdater: Sendable  

- @resultBuilder public struct ViewContainerBuilder  
+ @MainActor @resultBuilder public struct ViewContainerBuilder  

- public struct AttachmentType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral  
+ public struct AttachmentType: RawRepresentable, Codable, Hashable, ExpressibleByStringLiteral, Sendable  

- open class BaseLogDestination: LogDestination  
+ open class BaseLogDestination: LogDestination, @unchecked Sendable  

- public struct FilterKey: ExpressibleByStringLiteral, RawRepresentable  
+ public struct FilterKey: ExpressibleByStringLiteral, RawRepresentable, Sendable  

- public protocol ChatMessageContentViewDelegate: AnyObject
+ @MainActor public protocol ChatMessageContentViewDelegate: AnyObject

- public enum BanEnabling  
+ public enum BanEnabling: Sendable  

- public struct Alignment: Equatable  
+ public struct Alignment: Equatable, Sendable  

- public struct ChatMessageReactionGroup: Equatable  
+ public struct ChatMessageReactionGroup: Equatable, Sendable  

- public struct Sorting: Encodable, CustomStringConvertible  
+ public struct Sorting: Encodable, CustomStringConvertible, Sendable  

- public enum LogLevel: Int  
+ public enum LogLevel: Int, Sendable  

- public final class IgnoredEventType: ClientError  
+ public final class IgnoredEventType: ClientError, @unchecked Sendable  

- public class MessageReminderListController: DataController, DelegateCallable, DataStoreProvider  
+ public class MessageReminderListController: DataController, DelegateCallable, DataStoreProvider, @unchecked Sendable  
-   override public func synchronize(_ completion: ((_ error: Error?) -> Void)? = nil)
+   override public func synchronize(_ completion: (@MainActor(_ error: Error?) -> Void)? = nil)
-   public func loadMoreReminders(limit: Int? = nil,completion: ((Result<[MessageReminder], Error>) -> Void)? = nil)
+   public func loadMoreReminders(limit: Int? = nil,completion: (@MainActor(Result<[MessageReminder], Error>) -> Void)? = nil)

- public struct AudioRecordingContext: Hashable  
+ public struct AudioRecordingContext: Hashable, Sendable  

- public final class MissingLocalStorageURL: ClientError  
+ public final class MissingLocalStorageURL: ClientError, @unchecked Sendable  

- public struct ChatClientConfig  
+ public struct ChatClientConfig: Sendable  
-   public enum DeletedMessageVisibility: String, CustomStringConvertible, CustomDebugStringConvertible  
+   public enum DeletedMessageVisibility: String, CustomStringConvertible, CustomDebugStringConvertible, Sendable  

- public class LivestreamChannelController: DataStoreProvider, EventsControllerDelegate, AppStateObserverDelegate  
+ public class LivestreamChannelController: DataStoreProvider, AppStateObserverDelegate, @unchecked Sendable  
-   public func startWatching(isInRecoveryMode: Bool,completion: ((Error?) -> Void)? = nil)
+   public func startWatching(isInRecoveryMode: Bool,completion: (@MainActor(Error?) -> Void)? = nil)
-   public func stopWatching(completion: ((Error?) -> Void)? = nil)
+   public func stopWatching(completion: (@MainActor(Error?) -> Void)? = nil)
-   public func eventsController(_ controller: EventsController,didReceiveEvent event: Event)
+   public func applicationDidReceiveMemoryWarning()
-   public func applicationDidReceiveMemoryWarning()
+   public func applicationDidMoveToForeground()
-   public func applicationDidMoveToForeground()

- public protocol Customizable
+ @MainActor public protocol Customizable

 public struct LateResize: ImageProcessing  
-   @available(*, deprecated, message: "Use init(id:sizeProvider:) instead") public init(sizeProvider: @escaping () -> CGSize)
+   @available(*, deprecated, message: "Use init(id:sizeProvider:) instead") public init(sizeProvider: @escaping @Sendable() -> CGSize)
-   public init(id: String,sizeProvider: @escaping () -> CGSize)
+   public init(id: String,sizeProvider: @escaping @Sendable() -> CGSize)

- public protocol VoiceRecordingDelegate: AnyObject
+ @MainActor public protocol VoiceRecordingDelegate: AnyObject

- public struct MessageModerationDetails  
+ public struct MessageModerationDetails: Sendable  

- public final class AudioRecorderError: ClientError  
+ public final class AudioRecorderError: ClientError, @unchecked Sendable  

@testableapple testableapple merged commit 470f6a4 into v5 Sep 29, 2025
25 checks passed
@testableapple testableapple deleted the ci/remove-cocoapods branch September 29, 2025 15:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🤖 CI/CD Any work related to CI/CD
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants