From 29fd51f609aa676a5a70e4c715ccb4d59c04b367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82az=CC=87ej=20Pankowski?= <86720177+pblazej@users.noreply.github.com> Date: Mon, 26 Oct 2026 12:08:01 +0100 Subject: [PATCH] v2.19.0 --- .changes/data-streams-v2 | 1 - .changes/e2ee-frame-cryptor-key-index | 1 - .changes/livekit-ffi-rename | 1 - .changes/nanopb-encode-temporary-lifetime | 1 - .changes/nanopb-getter-temporary-lifetime | 1 - .changes/rpc-cancellation | 1 - .changes/rust-net-transport | 1 - .changes/video-start-bitrate-by-setup-time | 1 - .../webrtc-drop-aaa-certificate-services-root | 1 - .version | 2 +- CHANGELOG.md | 17 +++++++++++++++++ LiveKitClient.podspec | 2 +- README.md | 2 +- Sources/LiveKit/LiveKit.swift | 2 +- 14 files changed, 21 insertions(+), 13 deletions(-) delete mode 100644 .changes/data-streams-v2 delete mode 100644 .changes/e2ee-frame-cryptor-key-index delete mode 100644 .changes/livekit-ffi-rename delete mode 100644 .changes/nanopb-encode-temporary-lifetime delete mode 100644 .changes/nanopb-getter-temporary-lifetime delete mode 100644 .changes/rpc-cancellation delete mode 100644 .changes/rust-net-transport delete mode 100644 .changes/video-start-bitrate-by-setup-time delete mode 100644 .changes/webrtc-drop-aaa-certificate-services-root diff --git a/.changes/data-streams-v2 b/.changes/data-streams-v2 deleted file mode 100644 index a23e9a4d1..000000000 --- a/.changes/data-streams-v2 +++ /dev/null @@ -1 +0,0 @@ -minor type="changed" "Data streams: reimplemented on the Rust livekit-data-stream core over UniFFI, adding DEFLATE compression and single-packet inlining for one-shot sends when every recipient supports them, a configurable incoming payload cap via RoomOptions.dataStreamOptions, StreamTextOptions.operationType and generated, senderIdentity on both stream options, file attachments for a one-shot sendText, TextStreamInfo.mimeType, Participant.capabilities, and a StreamError case for each failure the core reports" diff --git a/.changes/e2ee-frame-cryptor-key-index b/.changes/e2ee-frame-cryptor-key-index deleted file mode 100644 index d956e6134..000000000 --- a/.changes/e2ee-frame-cryptor-key-index +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Fix media frame cryptors ignoring the key provider's current key index; senders now follow `setKey(index:)` / `setCurrentKeyIndex` live. In non-shared key mode `setKey(key:participantId:index:)` no longer moves the current key index (it may be a remote participant's key); use `setCurrentKeyIndex` to switch the local one" diff --git a/.changes/livekit-ffi-rename b/.changes/livekit-ffi-rename deleted file mode 100644 index 961a90263..000000000 --- a/.changes/livekit-ffi-rename +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "The Rust core dependency changed from LiveKitUniFFI to LiveKitFFI 0.13.1 for SwiftPM and CocoaPods. The SwiftPM dependency moved to livekit-ffi-xcframework, with the product LiveKitFFI and the binary target RustLiveKitFFI. SwiftPM re-resolves the package once. CocoaPods resolves the LiveKitFFI pod instead of LiveKitUniFFI" diff --git a/.changes/nanopb-encode-temporary-lifetime b/.changes/nanopb-encode-temporary-lifetime deleted file mode 100644 index bb6c8b216..000000000 --- a/.changes/nanopb-encode-temporary-lifetime +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Fix a crash (SIGSEGV in `pb_enc_varint`) on the first reliable data send in optimized CocoaPods builds: the encoder could read a message that was already freed" diff --git a/.changes/nanopb-getter-temporary-lifetime b/.changes/nanopb-getter-temporary-lifetime deleted file mode 100644 index 38d506cb5..000000000 --- a/.changes/nanopb-getter-temporary-lifetime +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Fix a crash (SIGSEGV in `strlen` from `RegionManager`) when connecting to LiveKit Cloud in optimized builds: generated protobuf getters could read a message that was already freed" diff --git a/.changes/rpc-cancellation b/.changes/rpc-cancellation deleted file mode 100644 index 70f9d352e..000000000 --- a/.changes/rpc-cancellation +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "performRpc throws CancellationError at once when the calling task is cancelled" diff --git a/.changes/rust-net-transport b/.changes/rust-net-transport deleted file mode 100644 index 9ba225592..000000000 --- a/.changes/rust-net-transport +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "Register the SDK's own WebSocket/URLSession stack as livekit-net's transport, so Rust-side signalling and HTTP reuse the tuned session (call-signaling QoS, multipath handover, TLS workarounds) instead of a second parallel client; a rejected WebSocket upgrade now keeps its HTTP status" diff --git a/.changes/video-start-bitrate-by-setup-time b/.changes/video-start-bitrate-by-setup-time deleted file mode 100644 index d5ef10198..000000000 --- a/.changes/video-start-bitrate-by-setup-time +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "The video start bitrate cap for camera tracks now scales with how long the connection took to set up: 1 Mbps up to 1.5 s, falling linearly to 300 kbps at 3.5 s and beyond. Screen share stays uncapped. Same behaviour as client-sdk-js, rust-sdks and client-sdk-android" diff --git a/.changes/webrtc-drop-aaa-certificate-services-root b/.changes/webrtc-drop-aaa-certificate-services-root deleted file mode 100644 index 0337d175f..000000000 --- a/.changes/webrtc-drop-aaa-certificate-services-root +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Update LiveKitWebRTC to 150.7871.04, which removes the AAA Certificate Services root from the TURN/TLS trust anchors so certificates from the compromised eMudhra intermediates are rejected" diff --git a/.version b/.version index 5b8407389..92aa628bc 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.18.0 \ No newline at end of file +2.19.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cf4806a7..626667417 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Changelog +## [2.19.0] - 2026-10-26 + +### Changed + +- Register the SDK's own WebSocket/URLSession stack as livekit-net's transport, so Rust-side signalling and HTTP reuse the tuned session (call-signaling QoS, multipath handover, TLS workarounds) instead of a second parallel client; a rejected WebSocket upgrade now keeps its HTTP status +- The video start bitrate cap for camera tracks now scales with how long the connection took to set up: 1 Mbps up to 1.5 s, falling linearly to 300 kbps at 3.5 s and beyond. Screen share stays uncapped. Same behaviour as client-sdk-js, rust-sdks and client-sdk-android +- The Rust core dependency changed from LiveKitUniFFI to LiveKitFFI 0.13.1 for SwiftPM and CocoaPods. The SwiftPM dependency moved to livekit-ffi-xcframework, with the product LiveKitFFI and the binary target RustLiveKitFFI. SwiftPM re-resolves the package once. CocoaPods resolves the LiveKitFFI pod instead of LiveKitUniFFI +- Data streams: reimplemented on the Rust livekit-data-stream core over UniFFI, adding DEFLATE compression and single-packet inlining for one-shot sends when every recipient supports them, a configurable incoming payload cap via RoomOptions.dataStreamOptions, StreamTextOptions.operationType and generated, senderIdentity on both stream options, file attachments for a one-shot sendText, TextStreamInfo.mimeType, Participant.capabilities, and a StreamError case for each failure the core reports + +### Fixed + +- Update LiveKitWebRTC to 150.7871.04, which removes the AAA Certificate Services root from the TURN/TLS trust anchors so certificates from the compromised eMudhra intermediates are rejected +- Fix a crash (SIGSEGV in `pb_enc_varint`) on the first reliable data send in optimized CocoaPods builds: the encoder could read a message that was already freed +- performRpc throws CancellationError at once when the calling task is cancelled +- Fix a crash (SIGSEGV in `strlen` from `RegionManager`) when connecting to LiveKit Cloud in optimized builds: generated protobuf getters could read a message that was already freed +- Fix media frame cryptors ignoring the key provider's current key index; senders now follow `setKey(index:)` / `setCurrentKeyIndex` live. In non-shared key mode `setKey(key:participantId:index:)` no longer moves the current key index (it may be a remote participant's key); use `setCurrentKeyIndex` to switch the local one + ## [2.18.0] - 2026-10-13 ### Added diff --git a/LiveKitClient.podspec b/LiveKitClient.podspec index 73e1af44b..c69f9ae5e 100644 --- a/LiveKitClient.podspec +++ b/LiveKitClient.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "LiveKitClient" - spec.version = "2.18.0" + spec.version = "2.19.0" spec.summary = "LiveKit Swift Client SDK. Easily build live audio or video experiences into your mobile app, game or website." spec.homepage = "https://github.com/livekit/client-sdk-swift" spec.license = {:type => "Apache 2.0", :file => "LICENSE"} diff --git a/README.md b/README.md index b04d9b033..fb57f597b 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Add the dependency and also to your target let package = Package( ... dependencies: [ - .package(name: "LiveKit", url: "https://github.com/livekit/client-sdk-swift.git", .upToNextMajor("2.18.0")), + .package(name: "LiveKit", url: "https://github.com/livekit/client-sdk-swift.git", .upToNextMajor("2.19.0")), ], targets: [ .target( diff --git a/Sources/LiveKit/LiveKit.swift b/Sources/LiveKit/LiveKit.swift index 7cffa843a..a522a0b13 100644 --- a/Sources/LiveKit/LiveKit.swift +++ b/Sources/LiveKit/LiveKit.swift @@ -33,7 +33,7 @@ public class LiveKitSDK: NSObject, Loggable { override private init() {} @objc(sdkVersion) - public static let version = "2.18.0" + public static let version = "2.19.0" static let ffiVersion = buildVersion() fileprivate struct State {