Skip to content

Commit 5ea2ed5

Browse files
FCE-3301: Introduce iOS audio permission fix release (#45)
* use fishjam custom binary * Sync package-lock.json with v0.27.0 bump CI's `npm install` regenerates the lockfile, and the format check fails on the diff. Commit the lockfile update so CI is clean. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * remove FishjamRTCAudioDevice --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 9cda333 commit 5ea2ed5

8 files changed

Lines changed: 47 additions & 800 deletions

File tree

FishjamReactNativeWebrtc.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ Pod::Spec.new do |s|
2121
s.libraries = 'c', 'sqlite3', 'stdc++'
2222
s.framework = 'AudioToolbox','AVFoundation', 'CoreAudio', 'CoreGraphics', 'CoreVideo', 'GLKit', 'VideoToolbox'
2323
s.dependency 'React-Core'
24-
s.dependency 'JitsiWebRTC', '~> 124.0.0'
24+
s.dependency 'FishjamWebRTC', '~> 124.0.2.0'
2525
end

README.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,55 @@ Software encode/decode factories have been enabled by default.
3939

4040
## WebRTC Revision
4141

42-
* Currently used revision: [M124](https://github.com/jitsi/webrtc/tree/M124)
42+
* Currently used revision: [M124 (Fishjam fork)](https://github.com/fishjam-cloud/webrtc/tree/fishjam-m124)
43+
* iOS dependency: [`FishjamWebRTC`](https://cocoapods.org/pods/FishjamWebRTC) — Fishjam's custom WebRTC build with the `defer mic permission` patch (replaces `JitsiWebRTC`).
4344
* Supported architectures
4445
* Android: armeabi-v7a, arm64-v8a, x86, x86_64
4546
* iOS: arm64, x86_64
4647
* tvOS: arm64
4748
* macOS: arm64, x86_64
4849

50+
## Maintaining the iOS WebRTC build (FishjamWebRTC)
51+
52+
The iOS side ships against `FishjamWebRTC` — a CocoaPods pod published from [`fishjam-cloud/webrtc`](https://github.com/fishjam-cloud/webrtc) that wraps a prebuilt `WebRTC.xcframework`. Source patches live on the `fishjam-m124` branch; the podspec and release tooling live on `master`.
53+
54+
### When to cut a new release
55+
56+
Cut a new `FishjamWebRTC` version when **any of the following** happens:
57+
58+
- A new patch lands on `fishjam-m124` that we need on the client (e.g. another `audio_device_ios.mm` change, a fix to the network interfaces path, a privacy-manifest update).
59+
- We rebase `fishjam-m124` onto a newer jitsi/webrtc tag (e.g. moving from `v124.0.2` to `v124.0.3`).
60+
- A security advisory in upstream WebRTC requires picking up a fix.
61+
62+
You do **not** need to cut a new `FishjamWebRTC` for changes that only touch this RN wrapper (`ios/**.{h,m,swift}`, JS sources). Those ship as a normal `@fishjam-cloud/react-native-webrtc` npm bump.
63+
64+
### Versioning
65+
66+
`<upstream-version>.<fishjam-patch-N>`, e.g. `124.0.2.1`.
67+
68+
- First three parts = the jitsi upstream version the build is patched on top of.
69+
- Fourth part = Fishjam patch counter against that base, starts at `1`, increments per release.
70+
- On upstream rebase (e.g. jitsi ships `124.0.3`), reset counter: next release is `124.0.3.1`.
71+
- Pin with `~> 124.0.2.0` to accept any Fishjam patch on top of jitsi `124.0.2`, or pin exact.
72+
73+
### How to cut a release
74+
75+
Full runbook (build, tag, GH release, trunk publish, smoke test) lives in [`fishjam-cloud/webrtc`'s `RELEASING.md`](https://github.com/fishjam-cloud/webrtc/blob/master/RELEASING.md) on the `master` branch. TL;DR:
76+
77+
1. On a macOS build host with [`depot_tools`](https://chromium.googlesource.com/chromium/tools/depot_tools.git) + a `fetch webrtc_ios` checkout, switch the gclient `src/` to `fishjam-m124`, run `gclient sync`, then `tools_webrtc/ios/build_ios_libs.py --build_config release --arch device:arm64 simulator:arm64 simulator:x64`.
78+
2. Validate the patch is in the built binary: `strings WebRTC.xcframework/*/WebRTC.framework/WebRTC | grep -c "<unique-string-from-patch>"` — every slice must have a non-zero count. (Release builds strip C++ symbols, so use `strings`, not `nm`.)
79+
3. Zip the xcframework as `FishjamWebRTC.xcframework.zip`, tag `vX.Y.Z.N` on `fishjam-m124`, push, and `gh release create` with the zip attached.
80+
4. On `master`: bump `s.version` in `ios/FishjamWebRTC.podspec` to match, commit, push.
81+
5. `pod trunk push ios/FishjamWebRTC.podspec --allow-warnings` (one-time `pod trunk register` per identity).
82+
83+
### After a new FishjamWebRTC release
84+
85+
Inside this repo:
86+
87+
1. Bump the dependency in `FishjamReactNativeWebrtc.podspec`: `s.dependency 'FishjamWebRTC', '~> X.Y.Z.0'` (or pin exact if needed).
88+
2. Bump `version` in `package.json` — minor bump if the underlying WebRTC change is user-observable, patch otherwise.
89+
3. Test with `cd ios && pod install` in a consuming app and exercise the affected behavior end-to-end.
90+
4991
## Getting Started
5092

5193
Use one of the following preferred package install methods to immediately get going.

ios/RCTWebRTC.xcodeproj/project.pbxproj

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
F1A2B3C42D0F1A2B00000001 /* FishjamRTCAudioDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = F1A2B3C42D0F1A2B00000003 /* FishjamRTCAudioDevice.m */; };
1110
0BDDA6E020C18B6B00B38B45 /* VideoCaptureController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0BDDA6DF20C18B6B00B38B45 /* VideoCaptureController.m */; };
1211
4EC498BC25B8777F00E76218 /* ScreenCapturePickerViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EC498BA25B8777F00E76218 /* ScreenCapturePickerViewManager.m */; };
1312
4EE3A8A325B840DA00FAA24A /* RCTConvert+WebRTC.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EE3A8A125B840DA00FAA24A /* RCTConvert+WebRTC.m */; };
@@ -81,8 +80,6 @@
8180
D7F99C122938F4E0000A2450 /* WebRTCModule+RTCMediaStream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "WebRTCModule+RTCMediaStream.h"; path = "RCTWebRTC/WebRTCModule+RTCMediaStream.h"; sourceTree = SOURCE_ROOT; };
8281
DEC96576264176C10052DB35 /* DataChannelWrapper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = DataChannelWrapper.m; path = RCTWebRTC/DataChannelWrapper.m; sourceTree = "<group>"; };
8382
DEC96579264176DF0052DB35 /* DataChannelWrapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DataChannelWrapper.h; path = RCTWebRTC/DataChannelWrapper.h; sourceTree = "<group>"; };
84-
F1A2B3C42D0F1A2B00000002 /* FishjamRTCAudioDevice.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = FishjamRTCAudioDevice.h; path = RCTWebRTC/FishjamRTCAudioDevice.h; sourceTree = SOURCE_ROOT; };
85-
F1A2B3C42D0F1A2B00000003 /* FishjamRTCAudioDevice.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = FishjamRTCAudioDevice.m; path = RCTWebRTC/FishjamRTCAudioDevice.m; sourceTree = SOURCE_ROOT; };
8683
/* End PBXFileReference section */
8784

8885
/* Begin PBXFrameworksBuildPhase section */
@@ -162,8 +159,6 @@
162159
4EE3A8C825B841DD00FAA24A /* SocketConnection.m */,
163160
DEC96579264176DF0052DB35 /* DataChannelWrapper.h */,
164161
DEC96576264176C10052DB35 /* DataChannelWrapper.m */,
165-
F1A2B3C42D0F1A2B00000002 /* FishjamRTCAudioDevice.h */,
166-
F1A2B3C42D0F1A2B00000003 /* FishjamRTCAudioDevice.m */,
167162
);
168163
name = RCTWebRTC;
169164
path = ../apple/RCTWebRTC;
@@ -278,7 +273,6 @@
278273
4EE3A8AC25B8412700FAA24A /* RTCVideoViewManager.m in Sources */,
279274
4EE3A8C125B8416F00FAA24A /* WebRTCModule+RTCPeerConnection.m in Sources */,
280275
4EE3A8A325B840DA00FAA24A /* RCTConvert+WebRTC.m in Sources */,
281-
F1A2B3C42D0F1A2B00000001 /* FishjamRTCAudioDevice.m in Sources */,
282276
);
283277
runOnlyForDeploymentPostprocessing = 0;
284278
};

ios/RCTWebRTC/FishjamRTCAudioDevice.h

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)