Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 13 additions & 20 deletions .github/workflows/cron-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,19 @@ jobs:
matrix:
include:
- ios: 18.5
xcode: 16.4
os: macos-15
device: "iPhone 16 Pro"
setup_runtime: false
- ios: 17.5
xcode: 15.4
os: macos-14
os: macos-15
device: "iPhone 15 Pro"
setup_runtime: false
setup_runtime: true
- ios: 16.4
xcode: 15.3 # fails on 15.4
os: macos-14
os: macos-15
device: "iPhone 14 Pro"
setup_runtime: true
- ios: 15.5
xcode: 15.3 # fails on 15.4
os: macos-14
os: macos-15
device: "iPhone 13 Pro"
setup_runtime: true
fail-fast: false
Expand All @@ -47,7 +43,7 @@ jobs:
GITHUB_EVENT: ${{ toJson(github.event) }}
ALLURE_TOKEN: ${{ secrets.ALLURE_TOKEN }}
STREAM_DEMO_APP_SECRET: ${{ secrets.STREAM_DEMO_APP_SECRET }}
XCODE_VERSION: ${{ matrix.xcode }}
XCODE_VERSION: "26.0.1"
IOS_SIMULATOR_DEVICE: "${{ matrix.device }} (${{ matrix.ios }})" # For the Allure report
steps:
- uses: actions/[email protected]
Expand All @@ -66,7 +62,7 @@ jobs:
- name: Launch Allure TestOps
run: bundle exec fastlane allure_launch cron:true
- name: Run UI Tests (Debug)
run: bundle exec fastlane test_e2e_mock device:"${{ matrix.device }} (${{ matrix.ios }})"
run: bundle exec fastlane test_e2e_mock device:"${{ env.IOS_SIMULATOR_DEVICE }}"
timeout-minutes: 120
- name: Allure TestOps Upload
if: success() || failure()
Expand Down Expand Up @@ -95,29 +91,26 @@ jobs:
matrix:
include:
- ios: 18.5
xcode: 16.4
os: macos-15
device: "iPhone 16 Pro"
setup_runtime: false
- ios: 17.5
xcode: 15.4
os: macos-14
os: macos-15
device: "iPhone 15 Pro"
setup_runtime: false
setup_runtime: true
- ios: 16.4
xcode: 15.3 # fails on 15.4
os: macos-14
os: macos-15
device: "iPhone 14 Pro"
setup_runtime: true
- ios: 15.5
xcode: 15.3 # fails on 15.4
os: macos-14
os: macos-15
device: "iPhone 13 Pro"
setup_runtime: true
fail-fast: false
runs-on: ${{ matrix.os }}
env:
XCODE_VERSION: ${{ matrix.xcode }}
XCODE_VERSION: "26.0.1"
steps:
- uses: actions/[email protected]
- uses: ./.github/actions/bootstrap
Expand Down Expand Up @@ -147,10 +140,10 @@ jobs:
fastlane/test_output/logs/*/Diagnostics/simctl_diagnostics/DiagnosticReports/*

build-old-xcode:
name: Build LLC + UI (Xcode 15)
name: Build SDKs (Old Xcode)
runs-on: macos-14
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- name: Connect Bot
uses: webfactory/[email protected]
Expand Down
13 changes: 6 additions & 7 deletions .github/workflows/smoke-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,22 +61,21 @@ jobs:
- run: bundle exec fastlane validate_public_interface

build-old-xcode:
name: Build LLC + UI (Xcode 15)
runs-on: macos-15
# if: ${{ github.event.inputs.record_snapshots != 'true' }}
if: false # disable Xcode 15 builds
name: Build SDKs (Old Xcode)
runs-on: macos-14
if: ${{ github.event.inputs.record_snapshots != 'true' }}
env:
XCODE_VERSION: "15.4"
XCODE_VERSION: "16.1"
steps:
- uses: actions/[email protected]
- uses: ./.github/actions/ruby-cache
- name: List Xcode versions
run: mdfind "kMDItemCFBundleIdentifier = 'com.apple.dt.Xcode'"
- name: Build LLC
run: bundle exec fastlane test device:"iPhone 13" build_for_testing:true
run: bundle exec fastlane test device:"iPhone 16 (18.1)" build_for_testing:true
timeout-minutes: 25
- name: Build UI
run: bundle exec fastlane test_ui device:"iPhone 13" build_for_testing:true
run: bundle exec fastlane test_ui device:"iPhone 16 (18.1)" build_for_testing:true
timeout-minutes: 25

test-llc-debug:
Expand Down
12 changes: 7 additions & 5 deletions DemoApp/Screens/UserProfile/UserProfileViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -298,11 +298,13 @@ class UserProfileViewController: UITableViewController, CurrentChatUserControlle
loadingSpinner.startAnimating()

uploadImageAndUpdateProfile(selectedImage) { [weak self] error in
self?.loadingSpinner.stopAnimating()
if let error = error {
self?.showError(error)
} else {
self?.showSuccess()
Task { @MainActor [weak self] in
self?.loadingSpinner.stopAnimating()
if let error = error {
self?.showError(error)
} else {
self?.showSuccess()
}
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions Sources/StreamChat/Repositories/ConnectionRepository.swift
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,9 @@ class ConnectionRepository: @unchecked Sendable {
.authenticating:
shouldNotifyConnectionIdWaiters = false
connectionId = nil
@unknown default:
shouldNotifyConnectionIdWaiters = false
connectionId = nil
}

updateConnectionId(
Expand Down
12 changes: 6 additions & 6 deletions Sources/StreamChat/WebSocketClient/Events/MessageEvents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import Foundation

/// Triggered when a new message is sent to channel.
final public class MessageNewEvent: ChannelSpecificEvent, HasUnreadCount {
public final class MessageNewEvent: ChannelSpecificEvent, HasUnreadCount {
/// The user who sent a message.
public let user: ChatUser

Expand Down Expand Up @@ -332,19 +332,19 @@ public final class NewMessageErrorEvent: ChannelSpecificEvent {
public final class MessageDeliveredEvent: ChannelSpecificEvent {
/// The user who received the delivered message.
public let user: ChatUser

/// The channel identifier the message was delivered to.
public var cid: ChannelId { channel.cid }

/// The channel the message was delivered to.
public let channel: ChatChannel

/// The event timestamp.
public let createdAt: Date

/// The ID of the last delivered message.
public let lastDeliveredMessageId: MessageId

/// The timestamp when the message was delivered.
public let lastDeliveredAt: Date

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,8 @@ open class ChatChannelListVC: _ViewController,
shouldHideEmptyView = emptyView.isHidden
isLoading = false
channelListErrorView.show()
@unknown default:
break
}

emptyView.isHidden = shouldHideEmptyView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ extension ChatMessageFileAttachmentListView {
fileSizeLabel.text = content?.downloadingState?.fileProgress
case .downloaded, .downloadingFailed:
fileSizeLabel.text = content?.payload.file.sizeString
@unknown default:
break
}
} else if let uploadState {
switch uploadState {
Expand All @@ -132,6 +134,8 @@ extension ChatMessageFileAttachmentListView {
fileSizeLabel.text = L10n.Message.Sending.attachmentUploadingFailed
case .pendingUpload, .uploaded, .unknown:
fileSizeLabel.text = content?.payload.file.sizeString
@unknown default:
break
}
} else {
fileSizeLabel.text = content?.payload.file.sizeString
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ open class UploadingOverlayView: _View, ThemeProvider {
return .restart
case .uploaded:
return .uploaded
@unknown default:
return nil
}
}
actionButton.isHidden = actionButton.content == nil
Expand All @@ -127,6 +129,8 @@ open class UploadingOverlayView: _View, ThemeProvider {
return nil
case .uploadingFailed:
return L10n.Message.Sending.attachmentUploadingFailed
@unknown default:
return nil
}
}
uploadingProgressLabel.isHidden = uploadingProgressLabel.text == nil
Expand Down Expand Up @@ -171,6 +175,8 @@ extension LocalAttachmentState {
return "0/\(file.sizeString)"
case .uploaded, .uploadingFailed, .unknown:
return file.sizeString
@unknown default:
return ""
}
}
}
Expand All @@ -190,6 +196,8 @@ extension AttachmentDownloadingState {
return file?.progressDescription(for: progress) ?? ""
case .downloaded, .downloadingFailed:
return file?.sizeString ?? ""
@unknown default:
return ""
}
}
}
Expand All @@ -203,6 +211,8 @@ extension AttachmentUploadingState {
return "0 / \(file.sizeString)"
case .uploaded, .uploadingFailed, .unknown:
return file.sizeString
@unknown default:
return ""
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ open class ChatMessageReactionsPickerVC: _ViewController, ThemeProvider, ChatMes
switch change {
case .create, .remove: break
case .update: updateContentIfNeeded()
@unknown default: break
}
}
}
2 changes: 2 additions & 0 deletions Sources/StreamChatUI/ChatThread/ChatThreadVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -451,6 +451,8 @@ open class ChatThreadVC: _ViewController,
listChange = .update(item, index: indexPath)
case let .remove(item):
listChange = .remove(item, index: indexPath)
@unknown default:
return
}

updateMessages(with: [listChange])
Expand Down
2 changes: 2 additions & 0 deletions Sources/StreamChatUI/ChatThreadList/ChatThreadListVC.swift
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,8 @@ open class ChatThreadListVC:
showErrorView()
case .localDataFetchFailed:
break
@unknown default:
break
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ open class ChatMessageActionsVC: _ViewController, ThemeProvider {
editActionItem(),
deleteActionItem()
]
@unknown default:
return []
}
}

Expand Down
6 changes: 6 additions & 0 deletions Sources/StreamChatUI/StreamDifferenceKit/Algorithm.swift
Original file line number Diff line number Diff line change
Expand Up @@ -486,6 +486,9 @@ internal func diff<E: Differentiable, I>(

case .duplicate(let reference)?:
reference.push(sourceIndex)

@unknown default:
break
}
}

Expand All @@ -509,6 +512,9 @@ internal func diff<E: Differentiable, I>(
targetReferences[targetIndex] = sourceIndex
sourceTraces[sourceIndex].reference = targetIndex
}

@unknown default:
break
}
}
}
Expand Down
Loading