diff --git a/.changes/au-buffer-size b/.changes/au-buffer-size deleted file mode 100644 index 6b5d2fc65..000000000 --- a/.changes/au-buffer-size +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Set maximumFramesToRender on mixer audio nodes to prevent kAudioUnitErr_TooManyFramesToProcess (-10874) when iOS negotiates larger IO buffer sizes" diff --git a/.changes/audio-session-activate-check b/.changes/audio-session-activate-check deleted file mode 100644 index 201c7d3db..000000000 --- a/.changes/audio-session-activate-check +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Stop audio publishing when audio session activation fails by propagating configuration errors to the audio engine" diff --git a/.changes/broadcast-crash b/.changes/broadcast-crash deleted file mode 100644 index d3b9355d5..000000000 --- a/.changes/broadcast-crash +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Use software rendering in BroadcastImageCodec to avoid GPU crash when app is backgrounded during PiP" diff --git a/.changes/broadcast-improvements b/.changes/broadcast-improvements deleted file mode 100644 index 5b885a3d1..000000000 --- a/.changes/broadcast-improvements +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Screen share via broadcast extension showing 3fps on receiver due to hardcoded simulcast layer FPS" diff --git a/.changes/objc-tests b/.changes/objc-tests deleted file mode 100644 index a24ce4003..000000000 --- a/.changes/objc-tests +++ /dev/null @@ -1 +0,0 @@ -patch type="added" "Missing data stream and RPC ObjC exposure with ObjC tests" \ No newline at end of file diff --git a/.changes/received-message-is-final b/.changes/received-message-is-final deleted file mode 100644 index 868181a4e..000000000 --- a/.changes/received-message-is-final +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Add isFinal property to ReceivedMessage for transcription segment finalization" diff --git a/.changes/remove-swift-collections b/.changes/remove-swift-collections deleted file mode 100644 index 083b0382e..000000000 --- a/.changes/remove-swift-collections +++ /dev/null @@ -1 +0,0 @@ -patch type="changed" "Remove swift-collections dependency by replacing with minimal internal implementations" diff --git a/.changes/rotation-dimension-freeze b/.changes/rotation-dimension-freeze deleted file mode 100644 index 759012398..000000000 --- a/.changes/rotation-dimension-freeze +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Local video track freezing during landscape rotation or losing aspect ratio" diff --git a/.changes/sample-buffer-cropping b/.changes/sample-buffer-cropping deleted file mode 100644 index cf2b009f7..000000000 --- a/.changes/sample-buffer-cropping +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Correct sample-buffer rendering for cropped and scaled screen-share frames" diff --git a/.changes/single-pc b/.changes/single-pc deleted file mode 100644 index 0d44c151e..000000000 --- a/.changes/single-pc +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "Single peer connection mode via `RoomOptions.singlePeerConnection`. Requires LiveKit Cloud or LiveKit OSS >= 1.9.2." \ No newline at end of file diff --git a/.changes/socket-fix b/.changes/socket-fix deleted file mode 100644 index 6fe64c820..000000000 --- a/.changes/socket-fix +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "WebSocket failing to connect in some concurrent scenarios" \ No newline at end of file diff --git a/.changes/socket-stale b/.changes/socket-stale deleted file mode 100644 index 6aa7bfd94..000000000 --- a/.changes/socket-stale +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "WebSocket errors killing new connections" \ No newline at end of file diff --git a/.changes/sound-api-2 b/.changes/sound-api-2 deleted file mode 100644 index 2e5b0cb30..000000000 --- a/.changes/sound-api-2 +++ /dev/null @@ -1 +0,0 @@ -minor type="added" "SoundPlayer API for prepared audio clips with local playback and best-effort remote playback" diff --git a/.changes/stats-crash b/.changes/stats-crash deleted file mode 100644 index 224a1b5ee..000000000 --- a/.changes/stats-crash +++ /dev/null @@ -1 +0,0 @@ -patch type="fixed" "Crash during PeerConnection teardown caused by stats timer race" diff --git a/.changes/vision-26 b/.changes/vision-26 deleted file mode 100644 index 50e270457..000000000 --- a/.changes/vision-26 +++ /dev/null @@ -1 +0,0 @@ -minor type="changed" "Changed minimal supported visionOS version to 26 due to WebRTC dependencies" diff --git a/.changes/webrtc-m144 b/.changes/webrtc-m144 deleted file mode 100644 index cdaa12646..000000000 --- a/.changes/webrtc-m144 +++ /dev/null @@ -1 +0,0 @@ -minor type="changed" "Update WebRTC to m144" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8dcfd8fe6..e5a5a8803 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -57,38 +57,38 @@ jobs: # https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md - os: macos-26 - xcode: 26.3 - platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.2" + xcode: 26.4 + platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.4" symbol-graph: true - os: macos-26 - xcode: 26.3 - platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.2" + xcode: 26.4 + platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.4" extension-api-only: true - os: macos-26 - xcode: 26.3 + xcode: 26.4 platform: "macOS" symbol-graph: true - os: macos-26 - xcode: 26.3 + xcode: 26.4 platform: "macOS" asan: true - os: macos-26 - xcode: 26.3 + xcode: 26.4 platform: "macOS" tsan: true - os: macos-26 - xcode: 26.3 + xcode: 26.4 platform: "macOS" strict-concurrency-env: true - os: macos-26 - xcode: 26.3 + xcode: 26.4 platform: "macOS,variant=Mac Catalyst" - os: macos-26 - xcode: 26.3 - platform: "visionOS Simulator,name=Apple Vision Pro,OS=26.2" + xcode: 26.4 + platform: "visionOS Simulator,name=Apple Vision Pro,OS=26.4" - os: macos-26 - xcode: 26.3 - platform: "tvOS Simulator,name=Apple TV,OS=26.2" + xcode: 26.4 + platform: "tvOS Simulator,name=Apple TV,OS=26.4" runs-on: ${{ matrix.os }} timeout-minutes: 60 diff --git a/.github/workflows/cocoapods-lint.yaml b/.github/workflows/cocoapods-lint.yaml index 7798ba7a9..2adaf939d 100644 --- a/.github/workflows/cocoapods-lint.yaml +++ b/.github/workflows/cocoapods-lint.yaml @@ -19,7 +19,7 @@ jobs: - os: macos-15 xcode: 16.4 - os: macos-26 - xcode: 26.3 + xcode: 26.4 runs-on: ${{ matrix.os }} timeout-minutes: 30 steps: diff --git a/.github/workflows/publish-docs.yaml b/.github/workflows/publish-docs.yaml index 74f07b8c3..fd3d024e3 100644 --- a/.github/workflows/publish-docs.yaml +++ b/.github/workflows/publish-docs.yaml @@ -23,7 +23,7 @@ jobs: strategy: matrix: include: - - platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.2" + - platform: "iOS Simulator,name=iPhone 17 Pro,OS=26.4" artifact_name: symbol-graph-ios - platform: "macOS" artifact_name: symbol-graph-macos @@ -38,7 +38,7 @@ jobs: - name: Set up Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: "26.3" + xcode-version: "26.4" - name: Build for Release - Symbol Graph run: | @@ -72,7 +72,7 @@ jobs: - name: Set up Xcode uses: maxim-lobanov/setup-xcode@v1 with: - xcode-version: "26.3" + xcode-version: "26.4" - name: Download Symbol Graphs uses: actions/download-artifact@v4 diff --git a/.version b/.version index 44b38b243..a3ebb9f51 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -2.12.1 \ No newline at end of file +2.13.0 \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index d91255bc3..108607d57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [2.13.0] - 2026-04-09 + +### Added + +- Single peer connection mode via `RoomOptions.singlePeerConnection`. Requires LiveKit Cloud or LiveKit OSS >= 1.9.2. +- Missing data stream and RPC ObjC exposure with ObjC tests +- SoundPlayer API for prepared audio clips with local playback and best-effort remote playback +- Add isFinal property to ReceivedMessage for transcription segment finalization + +### Changed + +- Changed minimal supported visionOS version to 26 due to WebRTC dependencies +- Update WebRTC to m144 +- Remove swift-collections dependency by replacing with minimal internal implementations + +### Fixed + +- Local video track freezing during landscape rotation or losing aspect ratio +- Use software rendering in BroadcastImageCodec to avoid GPU crash when app is backgrounded during PiP +- Correct sample-buffer rendering for cropped and scaled screen-share frames +- WebSocket failing to connect in some concurrent scenarios +- Stop audio publishing when audio session activation fails by propagating configuration errors to the audio engine +- Set maximumFramesToRender on mixer audio nodes to prevent kAudioUnitErr_TooManyFramesToProcess (-10874) when iOS negotiates larger IO buffer sizes +- Crash during PeerConnection teardown caused by stats timer race +- Screen share via broadcast extension showing 3fps on receiver due to hardcoded simulcast layer FPS +- WebSocket errors killing new connections + ## [2.12.1] - 2026-02-17 ### Fixed diff --git a/LiveKitClient.podspec b/LiveKitClient.podspec index b42ccc746..f639a2d57 100644 --- a/LiveKitClient.podspec +++ b/LiveKitClient.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "LiveKitClient" - spec.version = "2.12.1" + spec.version = "2.13.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"} @@ -14,7 +14,7 @@ Pod::Spec.new do |spec| spec.source_files = "Sources/**/*" - spec.dependency("LiveKitWebRTC", "= 144.7559.01") + spec.dependency("LiveKitWebRTC", "= 144.7559.03") spec.dependency("LiveKitUniFFI", "= 0.0.5") spec.dependency("SwiftProtobuf") diff --git a/Package.swift b/Package.swift index 6d1deb55c..8728d532c 100644 --- a/Package.swift +++ b/Package.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // LK-Prefixed Dynamic WebRTC XCFramework - .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.01"), + .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.03"), .package(url: "https://github.com/livekit/livekit-uniffi-xcframework.git", exact: "0.0.5"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.31.0"), // Only used for DocC generation diff --git a/Package@swift-6.0.swift b/Package@swift-6.0.swift index 2e9d7dbfc..7dbb3e5b9 100644 --- a/Package@swift-6.0.swift +++ b/Package@swift-6.0.swift @@ -19,7 +19,7 @@ let package = Package( ], dependencies: [ // LK-Prefixed Dynamic WebRTC XCFramework - .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.01"), + .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.03"), .package(url: "https://github.com/livekit/livekit-uniffi-xcframework.git", exact: "0.0.5"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.31.0"), // Only used for DocC generation diff --git a/Package@swift-6.2.swift b/Package@swift-6.2.swift index 24b2d1a9c..087214aa3 100644 --- a/Package@swift-6.2.swift +++ b/Package@swift-6.2.swift @@ -20,7 +20,7 @@ let package = Package( ], dependencies: [ // LK-Prefixed Dynamic WebRTC XCFramework - .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.01"), + .package(url: "https://github.com/livekit/webrtc-xcframework.git", exact: "144.7559.03"), .package(url: "https://github.com/livekit/livekit-uniffi-xcframework.git", exact: "0.0.5"), .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.31.0"), // Only used for DocC generation diff --git a/README.md b/README.md index 3b9873f91..fb5a07432 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,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.12.1")), + .package(name: "LiveKit", url: "https://github.com/livekit/client-sdk-swift.git", .upToNextMajor("2.13.0")), ], targets: [ .target( diff --git a/Sources/LiveKit/LiveKit.swift b/Sources/LiveKit/LiveKit.swift index b5d1449ce..5c1f9639f 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.12.1" + public static let version = "2.13.0" static let ffiVersion = buildVersion() fileprivate struct State {