From d70378c2c1e19ab6c4ac7d6f6254355d6f29cc07 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Tue, 22 Sep 2026 12:16:23 +0800 Subject: [PATCH 1/4] chore: bump webrtc to m150 and enable WARP. --- android/build.gradle | 2 +- .../livekit/reactnative/LiveKitReactNative.kt | 7 +++++++ ci/ios/Podfile | 5 +++++ ci/ios/Podfile.lock | 17 ++++++++------- ci/package.json | 2 +- ci/yarn.lock | 8 +++---- example/ios/Podfile | 5 +++++ example/ios/Podfile.lock | 19 +++++++++-------- example/package.json | 2 +- ios/LivekitReactNative.m | 9 ++++++++ package.json | 2 +- src/index.tsx | 21 +++++++++++++++++++ yarn.lock | 10 ++++----- 13 files changed, 79 insertions(+), 30 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 83ea8830..907544b8 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -128,7 +128,7 @@ dependencies { api 'com.facebook.react:react-native:+' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" api 'com.github.davidliu:audioswitch:89582c47c9a04c62f90aa5e57251af4800a62c9a' - api 'io.github.webrtc-sdk:android-prefixed:144.7559.15' + api 'io.github.webrtc-sdk:android-prefixed:150.7871.01' implementation "io.livekit:noise:2.0.0" implementation project(':livekit_react-native-webrtc') implementation "androidx.annotation:annotation:1.9.1" diff --git a/android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt b/android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt index a54aa27e..ab5bf55d 100644 --- a/android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt +++ b/android/src/main/java/com/livekit/reactnative/LiveKitReactNative.kt @@ -16,6 +16,12 @@ import java.util.concurrent.Callable object LiveKitReactNative { + // WARP: fold the DTLS handshake into the ICE handshake. Field trials are read + // when the PeerConnectionFactory is created, so this can only be set here, not + // from JS. The format is "Key/Value/" repeated, so this concatenates onto + // whatever the app already set. + private const val WARP_FIELD_TRIALS = "WebRTC-IceHandshakeDtls/Enabled/" + private var audioType: AudioType = AudioType.CommunicationAudioType() @@ -62,6 +68,7 @@ object LiveKitReactNative { this.audioType = audioType val options = WebRTCModuleOptions.getInstance() + options.fieldTrials = (options.fieldTrials ?: "") + WARP_FIELD_TRIALS options.videoEncoderFactory = CustomVideoEncoderFactory(null, true, true) options.videoDecoderFactory = CustomVideoDecoderFactory() options.enableMediaProjectionService = true diff --git a/ci/ios/Podfile b/ci/ios/Podfile index 3e2df095..8ba375f8 100644 --- a/ci/ios/Podfile +++ b/ci/ios/Podfile @@ -5,6 +5,11 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip +# LiveKitWebRTC 150.x is not on CocoaPods trunk yet; it only lives in livekit/podspecs. +# Remove both sources once the pod is published to trunk. +source 'https://github.com/livekit/podspecs.git' +source 'https://cdn.cocoapods.org/' + platform :ios, min_ios_version_supported prepare_react_native_project! diff --git a/ci/ios/Podfile.lock b/ci/ios/Podfile.lock index 50ee9a2b..649c9d49 100644 --- a/ci/ios/Podfile.lock +++ b/ci/ios/Podfile.lock @@ -8,7 +8,7 @@ PODS: - hermes-engine (0.82.1): - hermes-engine/Pre-built (= 0.82.1) - hermes-engine/Pre-built (0.82.1) - - livekit-react-native (2.12.0): + - livekit-react-native (3.0.0): - boost - DoubleConversion - fast_float @@ -38,9 +38,9 @@ PODS: - SocketRocket - Yoga - livekit-react-native-webrtc (144.2.0): - - LiveKitWebRTC (= 144.7559.15) + - LiveKitWebRTC (= 150.7871.02) - React-Core - - LiveKitWebRTC (144.7559.15) + - LiveKitWebRTC (150.7871.02) - RCT-Folly (2024.11.18.00): - boost - DoubleConversion @@ -2525,8 +2525,9 @@ DEPENDENCIES: - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: - trunk: + https://github.com/livekit/podspecs.git: - LiveKitWebRTC + trunk: - SocketRocket EXTERNAL SOURCES: @@ -2692,9 +2693,9 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 - livekit-react-native: 27001a5d9454cc8d27894317425aa511801154e2 - livekit-react-native-webrtc: 3cd501a18d7ee8b95c21764dd8502201a0bc4cb3 - LiveKitWebRTC: 6abc86e190722e223fc870284547b6f229288c46 + livekit-react-native: 7a050816c891b58f073d4f7bda57ed7fe536a168 + livekit-react-native-webrtc: 5a5d397653822fcec6199c31dd48faa863b0b614 + LiveKitWebRTC: 31c0be28600e09057cb8414e12dec36c530773cb RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63 @@ -2764,6 +2765,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 689c8e04277f3ad631e60fe2a08e41d411daf8eb -PODFILE CHECKSUM: a7f2ec66657cfb895ebb19b63b9033e6419495f9 +PODFILE CHECKSUM: 1d02e1cbe60371e8cf7a5a04974ec742772db18d COCOAPODS: 1.16.2 diff --git a/ci/package.json b/ci/package.json index 74694831..dc8be2e7 100644 --- a/ci/package.json +++ b/ci/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@livekit/react-native": "*", - "@livekit/react-native-webrtc": "^144.2.0", + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", "@react-native/new-app-screen": "0.82.1", "livekit-client": "^2.19.0", "react": "19.1.1", diff --git a/ci/yarn.lock b/ci/yarn.lock index 6815603a..194eadb7 100644 --- a/ci/yarn.lock +++ b/ci/yarn.lock @@ -1952,15 +1952,15 @@ __metadata: languageName: node linkType: hard -"@livekit/react-native-webrtc@npm:^144.2.0": +"@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150": version: 144.2.0 - resolution: "@livekit/react-native-webrtc@npm:144.2.0" + resolution: "@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#commit=fc3525a8c5f775dbaf6367922d0a857f4896efa3" dependencies: base64-js: "npm:1.5.1" debug: "npm:4.3.4" peerDependencies: react-native: ">=0.60.0" - checksum: 10/fb2db76db47d976cd1ebfff16eef7ba49123a6b0c7af76c6cde671889276c7a5c8c6ed43d4402cf7412ff9905dbf4d986eaf029dd0190cd1bb6fb1897075dd72 + checksum: 10/8d5e0316e24e7c6af4d086806fb30db56dd54eb064728b07fa78defd2dd2004c43873206488f8b8cc8cfa2d70cabeace2e6efc498b7c18b15d5fcb084d6da8c1 languageName: node linkType: hard @@ -3550,7 +3550,7 @@ __metadata: "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" "@livekit/react-native": "npm:*" - "@livekit/react-native-webrtc": "npm:^144.2.0" + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" diff --git a/example/ios/Podfile b/example/ios/Podfile index 4d8a7930..9ff28fdf 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -5,6 +5,11 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip +# LiveKitWebRTC 150.x is not on CocoaPods trunk yet; it only lives in livekit/podspecs. +# Remove both sources once the pod is published to trunk. +source 'https://github.com/livekit/podspecs.git' +source 'https://cdn.cocoapods.org/' + platform :ios, min_ios_version_supported prepare_react_native_project! diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 0249e254..a42c0b61 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -8,7 +8,7 @@ PODS: - hermes-engine (0.82.1): - hermes-engine/Pre-built (= 0.82.1) - hermes-engine/Pre-built (0.82.1) - - livekit-react-native (2.12.0): + - livekit-react-native (3.0.0): - boost - DoubleConversion - fast_float @@ -38,9 +38,9 @@ PODS: - SocketRocket - Yoga - livekit-react-native-webrtc (144.2.0): - - LiveKitWebRTC (= 144.7559.15) + - LiveKitWebRTC (= 150.7871.02) - React-Core - - LiveKitWebRTC (144.7559.15) + - LiveKitWebRTC (150.7871.02) - RCT-Folly (2024.11.18.00): - boost - DoubleConversion @@ -2617,8 +2617,9 @@ DEPENDENCIES: - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: - trunk: + https://github.com/livekit/podspecs.git: - LiveKitWebRTC + trunk: - SocketRocket EXTERNAL SOURCES: @@ -2790,10 +2791,10 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 - livekit-react-native: 27001a5d9454cc8d27894317425aa511801154e2 - livekit-react-native-webrtc: 3cd501a18d7ee8b95c21764dd8502201a0bc4cb3 - LiveKitWebRTC: 6abc86e190722e223fc870284547b6f229288c46 - RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + livekit-react-native: 7a050816c891b58f073d4f7bda57ed7fe536a168 + livekit-react-native-webrtc: 5a5d397653822fcec6199c31dd48faa863b0b614 + LiveKitWebRTC: 31c0be28600e09057cb8414e12dec36c530773cb + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63 RCTTypeSafety: c693294e3993056955c3010eb1ebc574f1fcded6 @@ -2865,6 +2866,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 689c8e04277f3ad631e60fe2a08e41d411daf8eb -PODFILE CHECKSUM: a921a659e37cd7dfb12da519493e10c9f38400a1 +PODFILE CHECKSUM: 062e4aeb9a5d9962b035d1651584402d75e253b0 COCOAPODS: 1.16.2 diff --git a/example/package.json b/example/package.json index 5f35ed79..4de779b8 100644 --- a/example/package.json +++ b/example/package.json @@ -10,7 +10,7 @@ "postinstall": "patch-package" }, "dependencies": { - "@livekit/react-native-webrtc": "^144.2.0", + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", "@react-native-async-storage/async-storage": "^1.17.10", "@react-navigation/native": "^7.1.18", "@react-navigation/native-stack": "^7.3.27", diff --git a/ios/LivekitReactNative.m b/ios/LivekitReactNative.m index ea7b21eb..fc855a7b 100644 --- a/ios/LivekitReactNative.m +++ b/ios/LivekitReactNative.m @@ -11,6 +11,15 @@ +(void)setup { WebRTCModuleOptions *options = [WebRTCModuleOptions sharedInstance]; options.videoEncoderFactory = simulcastVideoEncoderFactory; options.audioProcessingModule = LKAudioProcessingManager.sharedInstance.audioProcessingModule; + + // WebRTCModule only applies its own default field trials when fieldTrials is + // nil, so carry the dual-sim fix over ourselves. + // https://bugs.chromium.org/p/webrtc/issues/detail?id=10966 + options.fieldTrials = @{ + kLKRTCFieldTrialUseNWPathMonitor : kLKRTCFieldTrialEnabledValue, + // WARP: fold the DTLS handshake into the ICE handshake. + kLKRTCFieldTrialIceHandshakeDtlsKey : kLKRTCFieldTrialEnabledValue, + }; } @end diff --git a/package.json b/package.json index 05769395..86c25597 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", "@livekit/changesets-changelog-github": "^0.0.4", - "@livekit/react-native-webrtc": "^144.2.0", + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", "@react-native/babel-preset": "0.83.0", "@react-native/eslint-config": "0.83.0", "@types/fastestsmallesttextencoderdecoder": "^1.0.0", diff --git a/src/index.tsx b/src/index.tsx index 3d5ed530..00f627e3 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -7,6 +7,7 @@ import './polyfills/MediaRecorderShim'; import { registerGlobals as webrtcRegisterGlobals, + RTCPeerConnection, AudioDeviceModule, AudioEngineMuteMode, AudioEngineAvailability, @@ -63,6 +64,7 @@ export function registerGlobals(options?: RegisterGlobalsOptions) { }; webrtcRegisterGlobals(); + shimSctpSnap(); if (opts.autoConfigureAudioSession) { setupIOSAudioManagement(); } @@ -76,6 +78,25 @@ export function registerGlobals(options?: RegisterGlobalsOptions) { setupNativeEvents(); } +function shimSctpSnap() { + // The SCTP half of WARP. livekit-client owns the RTCConfiguration it hands to + // `new RTCPeerConnection`, so there's no way to reach it from here. Default the + // flag on in the global constructor instead; an explicit `enableSctpSnap` in + // the app's rtcConfig still wins. + class SctpSnapPeerConnection extends RTCPeerConnection { + constructor( + configuration?: ConstructorParameters[0] + ) { + super({ enableSctpSnap: true, ...configuration }); + } + } + + // Cast rather than `declare global`, which would ship in the .d.ts and clash + // with whatever DOM types the consuming app has. + (globalThis as unknown as { RTCPeerConnection: unknown }).RTCPeerConnection = + SctpSnapPeerConnection; +} + function livekitRegisterGlobals() { let lkGlobal: LiveKitReactNativeInfo = { platform: Platform.OS, diff --git a/yarn.lock b/yarn.lock index 1663f733..0e640a76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3612,15 +3612,15 @@ __metadata: languageName: node linkType: hard -"@livekit/react-native-webrtc@npm:^144.2.0": +"@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150": version: 144.2.0 - resolution: "@livekit/react-native-webrtc@npm:144.2.0" + resolution: "@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#commit=fc3525a8c5f775dbaf6367922d0a857f4896efa3" dependencies: base64-js: "npm:1.5.1" debug: "npm:4.3.4" peerDependencies: react-native: ">=0.60.0" - checksum: 10/fb2db76db47d976cd1ebfff16eef7ba49123a6b0c7af76c6cde671889276c7a5c8c6ed43d4402cf7412ff9905dbf4d986eaf029dd0190cd1bb6fb1897075dd72 + checksum: 10/8d5e0316e24e7c6af4d086806fb30db56dd54eb064728b07fa78defd2dd2004c43873206488f8b8cc8cfa2d70cabeace2e6efc498b7c18b15d5fcb084d6da8c1 languageName: node linkType: hard @@ -3635,7 +3635,7 @@ __metadata: "@livekit/changesets-changelog-github": "npm:^0.0.4" "@livekit/components-react": "npm:^2.9.17" "@livekit/mutex": "npm:^1.1.1" - "@livekit/react-native-webrtc": "npm:^144.2.0" + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" "@react-native/babel-preset": "npm:0.83.0" "@react-native/eslint-config": "npm:0.83.0" "@types/fastestsmallesttextencoderdecoder": "npm:^1.0.0" @@ -9538,7 +9538,7 @@ __metadata: "@babel/core": "npm:^7.25.2" "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" - "@livekit/react-native-webrtc": "npm:^144.2.0" + "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" "@react-native-async-storage/async-storage": "npm:^1.17.10" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" From 006efb789aadd27619d47e381e456b9c75413570 Mon Sep 17 00:00:00 2001 From: davidliu Date: Fri, 16 Oct 2026 01:10:55 +0900 Subject: [PATCH 2/4] update podfile and explanation --- README.md | 27 +++++++++++++++++++++++++++ ci/ios/Podfile | 5 +++-- example/ios/Podfile | 5 +++-- example/ios/Podfile.lock | 12 ++++++------ 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 38653824..99f80e6b 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,19 @@ This library depends on `@livekit/react-native-webrtc`, which has additional ins - [iOS Installation Guide](https://github.com/livekit/react-native-webrtc/blob/master/Documentation/iOSInstallation.md) - [Android Installation Guide](https://github.com/livekit/react-native-webrtc/blob/master/Documentation/AndroidInstallation.md) +### iOS Podfile + +This package depends on the `LiveKitWebRTC` pod, which is published to the +[livekit/podspecs](https://github.com/livekit/podspecs) spec repo and the CocoaPods trunk. The CocoaPods trunk stops accepting new pods on December 2, 2026, so later `LiveKitWebRTC` versions will only be available from livekit/podspecs. Add both sources to the top of your `ios/Podfile`: + +```ruby +source 'https://github.com/livekit/podspecs.git' +source 'https://cdn.cocoapods.org/' +``` + +Keep the `cdn.cocoapods.org` line: once a `Podfile` lists any `source`, CocoaPods stops using +trunk by default, and your other pods still come from there. + --- Once the `@livekit/react-native-webrtc` dependency is installed, one last step is needed to finish the installation: @@ -496,6 +509,20 @@ To fix this, you can either: - use another package manager, like npm - use [yarn-deduplicate](https://www.npmjs.com/package/yarn-deduplicate) to deduplicate dependencies +#### CocoaPods could not find compatible versions for pod "LiveKitWebRTC" + +This usually happens after upgrading `@livekit/react-native-webrtc`. The error may also say the +matching specs "required a higher minimum deployment target", which is misleading. + +Make sure both [Podfile sources](#ios-podfile-sources) are in your `ios/Podfile`, then run: + +```sh +cd ios && pod update LiveKitWebRTC +``` + +You may also see a `Found multiple specifications for LiveKitWebRTC` warning. It is harmless: +some versions are published to both livekit/podspecs and CocoaPods trunk, and the two are identical. + ## Contributing See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow. diff --git a/ci/ios/Podfile b/ci/ios/Podfile index 8ba375f8..c3b0917d 100644 --- a/ci/ios/Podfile +++ b/ci/ios/Podfile @@ -5,8 +5,9 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip -# LiveKitWebRTC 150.x is not on CocoaPods trunk yet; it only lives in livekit/podspecs. -# Remove both sources once the pod is published to trunk. +# CocoaPods trunk stops accepting new pods on 2026-12-02, so later LiveKitWebRTC +# releases will only be published to livekit/podspecs. It is listed first so that +# versions published to both sources resolve from livekit/podspecs. source 'https://github.com/livekit/podspecs.git' source 'https://cdn.cocoapods.org/' diff --git a/example/ios/Podfile b/example/ios/Podfile index 9ff28fdf..935b8dda 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -5,8 +5,9 @@ require Pod::Executable.execute_command('node', ['-p', {paths: [process.argv[1]]}, )', __dir__]).strip -# LiveKitWebRTC 150.x is not on CocoaPods trunk yet; it only lives in livekit/podspecs. -# Remove both sources once the pod is published to trunk. +# CocoaPods trunk stops accepting new pods on 2026-12-02, so later LiveKitWebRTC +# releases will only be published to livekit/podspecs. It is listed first so that +# versions published to both sources resolve from livekit/podspecs. source 'https://github.com/livekit/podspecs.git' source 'https://cdn.cocoapods.org/' diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index a42c0b61..2091d996 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -38,9 +38,9 @@ PODS: - SocketRocket - Yoga - livekit-react-native-webrtc (144.2.0): - - LiveKitWebRTC (= 150.7871.02) + - LiveKitWebRTC (= 150.7871.03) - React-Core - - LiveKitWebRTC (150.7871.02) + - LiveKitWebRTC (150.7871.03) - RCT-Folly (2024.11.18.00): - boost - DoubleConversion @@ -2792,9 +2792,9 @@ SPEC CHECKSUMS: glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 livekit-react-native: 7a050816c891b58f073d4f7bda57ed7fe536a168 - livekit-react-native-webrtc: 5a5d397653822fcec6199c31dd48faa863b0b614 - LiveKitWebRTC: 31c0be28600e09057cb8414e12dec36c530773cb - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 + livekit-react-native-webrtc: 4674d750f2e52fb357ea5bbc12a2b8d07964cb38 + LiveKitWebRTC: 3dc23b085876a52d67b8dad78a9f7cfaba2bc0f7 + RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63 RCTTypeSafety: c693294e3993056955c3010eb1ebc574f1fcded6 @@ -2866,6 +2866,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 689c8e04277f3ad631e60fe2a08e41d411daf8eb -PODFILE CHECKSUM: 062e4aeb9a5d9962b035d1651584402d75e253b0 +PODFILE CHECKSUM: 893f25f2ed3e362f3ce16f22689b673a1e41ffab COCOAPODS: 1.16.2 From 6e98800f91671bb4bc313776abc9d3eaaa3d2976 Mon Sep 17 00:00:00 2001 From: davidliu Date: Sat, 17 Oct 2026 13:35:23 +0900 Subject: [PATCH 3/4] update to @livekit/react-native-webrtc actual release --- .changeset/bump-webrtc-150.md | 18 ++++++++++++++++++ README.md | 5 ++++- ci/ios/Podfile.lock | 12 ++++++------ ci/package.json | 2 +- ci/yarn.lock | 10 +++++----- example/ios/Podfile.lock | 4 ++-- example/package.json | 2 +- package.json | 4 ++-- yarn.lock | 14 +++++++------- 9 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 .changeset/bump-webrtc-150.md diff --git a/.changeset/bump-webrtc-150.md b/.changeset/bump-webrtc-150.md new file mode 100644 index 00000000..2c33055b --- /dev/null +++ b/.changeset/bump-webrtc-150.md @@ -0,0 +1,18 @@ +--- +'@livekit/react-native': minor +--- + +Update @livekit/react-native-webrtc to 150.1.0. + +iOS: the `LiveKitWebRTC` pod is published to the [livekit/podspecs](https://github.com/livekit/podspecs) spec repo and the CocoaPods trunk. The CocoaPods trunk stops accepting new pods on December 2, 2026, so later `LiveKitWebRTC` versions will only be available from livekit/podspecs. Add both sources to the top of your `ios/Podfile`: + +```ruby +source 'https://github.com/livekit/podspecs.git' +source 'https://cdn.cocoapods.org/' +``` + +Keep the `cdn.cocoapods.org` line: once a `Podfile` lists any `source`, CocoaPods stops using trunk by default, and your other pods still come from there. + +Expo users don't need to edit the `Podfile` by hand: version 1.1.0 and later of the [Expo plugin](https://github.com/livekit/client-sdk-react-native-expo-plugin) adds these sources during prebuild. + +If `pod install` then reports that it could not find compatible versions for `LiveKitWebRTC`, run `cd ios && pod update LiveKitWebRTC`. diff --git a/README.md b/README.md index 99f80e6b..8d3d3433 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,9 @@ source 'https://cdn.cocoapods.org/' Keep the `cdn.cocoapods.org` line: once a `Podfile` lists any `source`, CocoaPods stops using trunk by default, and your other pods still come from there. +Expo users don't need to edit the `Podfile` by hand: version 1.1.0 and later of the +[Expo plugin](https://github.com/livekit/client-sdk-react-native-expo-plugin) adds these sources during prebuild. + --- Once the `@livekit/react-native-webrtc` dependency is installed, one last step is needed to finish the installation: @@ -514,7 +517,7 @@ To fix this, you can either: This usually happens after upgrading `@livekit/react-native-webrtc`. The error may also say the matching specs "required a higher minimum deployment target", which is misleading. -Make sure both [Podfile sources](#ios-podfile-sources) are in your `ios/Podfile`, then run: +Make sure both [Podfile sources](#ios-podfile) are in your `ios/Podfile`, then run: ```sh cd ios && pod update LiveKitWebRTC diff --git a/ci/ios/Podfile.lock b/ci/ios/Podfile.lock index 649c9d49..2758c998 100644 --- a/ci/ios/Podfile.lock +++ b/ci/ios/Podfile.lock @@ -37,10 +37,10 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - livekit-react-native-webrtc (144.2.0): - - LiveKitWebRTC (= 150.7871.02) + - livekit-react-native-webrtc (150.1.0): + - LiveKitWebRTC (= 150.7871.03) - React-Core - - LiveKitWebRTC (150.7871.02) + - LiveKitWebRTC (150.7871.03) - RCT-Folly (2024.11.18.00): - boost - DoubleConversion @@ -2694,8 +2694,8 @@ SPEC CHECKSUMS: glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 livekit-react-native: 7a050816c891b58f073d4f7bda57ed7fe536a168 - livekit-react-native-webrtc: 5a5d397653822fcec6199c31dd48faa863b0b614 - LiveKitWebRTC: 31c0be28600e09057cb8414e12dec36c530773cb + livekit-react-native-webrtc: c239a23e695baefc7d32fe10ee44bcf08ff21755 + LiveKitWebRTC: 3dc23b085876a52d67b8dad78a9f7cfaba2bc0f7 RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63 @@ -2765,6 +2765,6 @@ SPEC CHECKSUMS: SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 Yoga: 689c8e04277f3ad631e60fe2a08e41d411daf8eb -PODFILE CHECKSUM: 1d02e1cbe60371e8cf7a5a04974ec742772db18d +PODFILE CHECKSUM: fae84db1685e71fd0607bd8465ec5be5b1bb18e6 COCOAPODS: 1.16.2 diff --git a/ci/package.json b/ci/package.json index dc8be2e7..f5aeca0f 100644 --- a/ci/package.json +++ b/ci/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@livekit/react-native": "*", - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", + "@livekit/react-native-webrtc": "^150.1.0", "@react-native/new-app-screen": "0.82.1", "livekit-client": "^2.19.0", "react": "19.1.1", diff --git a/ci/yarn.lock b/ci/yarn.lock index 194eadb7..a9ee2669 100644 --- a/ci/yarn.lock +++ b/ci/yarn.lock @@ -1952,15 +1952,15 @@ __metadata: languageName: node linkType: hard -"@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150": - version: 144.2.0 - resolution: "@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#commit=fc3525a8c5f775dbaf6367922d0a857f4896efa3" +"@livekit/react-native-webrtc@npm:^150.1.0": + version: 150.1.0 + resolution: "@livekit/react-native-webrtc@npm:150.1.0" dependencies: base64-js: "npm:1.5.1" debug: "npm:4.3.4" peerDependencies: react-native: ">=0.60.0" - checksum: 10/8d5e0316e24e7c6af4d086806fb30db56dd54eb064728b07fa78defd2dd2004c43873206488f8b8cc8cfa2d70cabeace2e6efc498b7c18b15d5fcb084d6da8c1 + checksum: 10/e4c557edfac166492b7c01afbc2a839144280dfa8d49852d8c627400629a6d5b4bc0c77bf74aebebcf49ddc9df604dc7c606eded8292efaf7c73016dda0f80fa languageName: node linkType: hard @@ -3550,7 +3550,7 @@ __metadata: "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" "@livekit/react-native": "npm:*" - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" + "@livekit/react-native-webrtc": "npm:^150.1.0" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" "@react-native-community/cli-platform-ios": "npm:20.0.0" diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 2091d996..845cd763 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -37,7 +37,7 @@ PODS: - ReactCommon/turbomodule/core - SocketRocket - Yoga - - livekit-react-native-webrtc (144.2.0): + - livekit-react-native-webrtc (150.1.0): - LiveKitWebRTC (= 150.7871.03) - React-Core - LiveKitWebRTC (150.7871.03) @@ -2792,7 +2792,7 @@ SPEC CHECKSUMS: glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 livekit-react-native: 7a050816c891b58f073d4f7bda57ed7fe536a168 - livekit-react-native-webrtc: 4674d750f2e52fb357ea5bbc12a2b8d07964cb38 + livekit-react-native-webrtc: c239a23e695baefc7d32fe10ee44bcf08ff21755 LiveKitWebRTC: 3dc23b085876a52d67b8dad78a9f7cfaba2bc0f7 RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a diff --git a/example/package.json b/example/package.json index 4de779b8..3d16bbb5 100644 --- a/example/package.json +++ b/example/package.json @@ -10,7 +10,7 @@ "postinstall": "patch-package" }, "dependencies": { - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", + "@livekit/react-native-webrtc": "^150.1.0", "@react-native-async-storage/async-storage": "^1.17.10", "@react-navigation/native": "^7.1.18", "@react-navigation/native-stack": "^7.3.27", diff --git a/package.json b/package.json index 86c25597..f696b772 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.35.0", "@livekit/changesets-changelog-github": "^0.0.4", - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150", + "@livekit/react-native-webrtc": "^150.1.0", "@react-native/babel-preset": "0.83.0", "@react-native/eslint-config": "0.83.0", "@types/fastestsmallesttextencoderdecoder": "^1.0.0", @@ -93,7 +93,7 @@ "typescript": "^5.9.2" }, "peerDependencies": { - "@livekit/react-native-webrtc": "^144.2.0", + "@livekit/react-native-webrtc": "^150.1.0", "livekit-client": "^2.19.0", "react": "*", "react-native": "*" diff --git a/yarn.lock b/yarn.lock index 0e640a76..788f4853 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3612,15 +3612,15 @@ __metadata: languageName: node linkType: hard -"@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150": - version: 144.2.0 - resolution: "@livekit/react-native-webrtc@https://github.com/livekit/react-native-webrtc.git#commit=fc3525a8c5f775dbaf6367922d0a857f4896efa3" +"@livekit/react-native-webrtc@npm:^150.1.0": + version: 150.1.0 + resolution: "@livekit/react-native-webrtc@npm:150.1.0" dependencies: base64-js: "npm:1.5.1" debug: "npm:4.3.4" peerDependencies: react-native: ">=0.60.0" - checksum: 10/8d5e0316e24e7c6af4d086806fb30db56dd54eb064728b07fa78defd2dd2004c43873206488f8b8cc8cfa2d70cabeace2e6efc498b7c18b15d5fcb084d6da8c1 + checksum: 10/e4c557edfac166492b7c01afbc2a839144280dfa8d49852d8c627400629a6d5b4bc0c77bf74aebebcf49ddc9df604dc7c606eded8292efaf7c73016dda0f80fa languageName: node linkType: hard @@ -3635,7 +3635,7 @@ __metadata: "@livekit/changesets-changelog-github": "npm:^0.0.4" "@livekit/components-react": "npm:^2.9.17" "@livekit/mutex": "npm:^1.1.1" - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" + "@livekit/react-native-webrtc": "npm:^150.1.0" "@react-native/babel-preset": "npm:0.83.0" "@react-native/eslint-config": "npm:0.83.0" "@types/fastestsmallesttextencoderdecoder": "npm:^1.0.0" @@ -3662,7 +3662,7 @@ __metadata: web-streams-polyfill: "npm:^4.3.0" well-known-symbols: "npm:^4.1.0" peerDependencies: - "@livekit/react-native-webrtc": ^144.2.0 + "@livekit/react-native-webrtc": ^150.1.0 livekit-client: ^2.19.0 react: "*" react-native: "*" @@ -9538,7 +9538,7 @@ __metadata: "@babel/core": "npm:^7.25.2" "@babel/preset-env": "npm:^7.25.3" "@babel/runtime": "npm:^7.25.0" - "@livekit/react-native-webrtc": "https://github.com/livekit/react-native-webrtc.git#bump-libwebrtc-to-m150" + "@livekit/react-native-webrtc": "npm:^150.1.0" "@react-native-async-storage/async-storage": "npm:^1.17.10" "@react-native-community/cli": "npm:20.0.0" "@react-native-community/cli-platform-android": "npm:20.0.0" From 012fc555de49db414c7ed7f78d73be9e40cee9ea Mon Sep 17 00:00:00 2001 From: davidliu Date: Sat, 17 Oct 2026 14:43:24 +0900 Subject: [PATCH 4/4] add ruby to typedoc languages --- typedoc.json | 1 + 1 file changed, 1 insertion(+) diff --git a/typedoc.json b/typedoc.json index 7a0ae623..d3412a31 100644 --- a/typedoc.json +++ b/typedoc.json @@ -16,6 +16,7 @@ "java", "kotlin", "objc", + "ruby", "swift", "xml" ]