Skip to content
This repository was archived by the owner on Feb 10, 2026. It is now read-only.
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
8 changes: 6 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ jobs:
- name: Deploy to Cocoapods
run: |
set -eo pipefail
pod lib lint --allow-warnings --verbose
pod trunk push --allow-warnings --verbose

pod lib lint FishjamCloudClient.podspec --allow-warnings --verbose
pod lib lint FishjamCloudBroadcastClient.podspec --allow-warnings --verbose

pod trunk push FishjamCloudClient.podspec --allow-warnings --verbose
pod trunk push FishjamCloudBroadcastClient.podspec --allow-warnings --verbose
env:
COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
publish-android-client:
Expand Down
41 changes: 41 additions & 0 deletions FishjamCloudBroadcastClient.podspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require 'json'

package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
base_content = File.read(File.join(__dir__, 'FishjamCloudClient.podspec'))

base_config = {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw, is there no other option to just get those values from a different podspec?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I haven't found any other way. Do you know of any? The other idea that I had was to store the common values in JSON and then fetch it in both files, but I decided this is simpler.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there is no simple import then this seems enough. I have no knowledge of other options unfortunately :/

homepage: base_content[/s\.homepage\s*=\s*['"]([^'"]+)['"]/, 1],

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the big part of the regex is repeating, maybe move it to variable?

license_type: base_content[/s\.license\s*=\s*\{[^}]*:type\s*=>\s*['"]([^'"]+)['"]/, 1],
license_file: base_content[/s\.license\s*=\s*\{[^}]*:file\s*=>\s*['"]([^'"]+)['"]/, 1],
author_name: base_content[/s\.author\s*=\s*\{\s*['"]([^'"]+)['"]/, 1],
author_url: base_content[/s\.author\s*=\s*\{[^}]*['"][^'"]*['"]\s*=>\s*['"]([^'"]+)['"]/, 1],
deployment_target: base_content[/s\.ios\.deployment_target\s*=\s*['"]([^'"]+)['"]/, 1],
swift_version: base_content[/s\.swift_version\s*=\s*['"]([^'"]+)['"]/, 1],
resources: base_content[/s\.resources\s*=\s*['"]([^'"]+)['"]/, 1],
xcconfig_key: base_content[/s\.pod_target_xcconfig\s*=\s*\{\s*['"]([^'"]+)['"]/, 1],
xcconfig_value: base_content[/s\.pod_target_xcconfig\s*=\s*\{[^}]*['"][^'"]*['"]\s*=>\s*['"]([^'"]+)['"]/, 1],
webrtc_version: base_content[/s\.dependency\s+['"]WebRTC-SDK['"]\s*,\s*['"]([^'"]+)['"]/, 1],
swift_protobuf_version: base_content[/s\.dependency\s+['"]SwiftProtobuf['"]\s*,\s*['"]([^'"]+)['"]/, 1]
}

Pod::Spec.new do |s|
s.name = 'FishjamCloudBroadcastClient'
s.version = package['version']
s.summary = 'Fishjam Broadcast Extension SDK for iOS screen sharing and broadcast functionality.'

s.homepage = base_config[:homepage]
s.license = { :type => base_config[:license_type], :file => base_config[:license_file] }
s.author = { base_config[:author_name] => base_config[:author_url] }
s.source = { :git => base_config[:homepage] + '.git', :tag => s.version.to_s }

s.ios.deployment_target = base_config[:deployment_target]
s.swift_version = base_config[:swift_version]

s.source_files = "packages/ios-client/Sources/FishjamClient/media/BroadcastSampleSource.swift", "packages/ios-client/Sources/FishjamClient/ipc/**/*.{h,m,mm,swift}"
s.resources = base_config[:resources]

s.pod_target_xcconfig = { base_config[:xcconfig_key] => base_config[:xcconfig_value] }

s.dependency 'WebRTC-SDK', base_config[:webrtc_version]
s.dependency 'SwiftProtobuf', base_config[:swift_protobuf_version]
end

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

newline

8 changes: 0 additions & 8 deletions FishjamCloudClient.podspec
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
#
# Be sure to run `pod lib lint FishjamClient.podspec' to ensure this is a
# valid spec before submitting.

require 'json'

package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
Expand Down Expand Up @@ -29,8 +25,4 @@ Pod::Spec.new do |s|
s.dependency 'Starscream', '~> 4.0.0'
s.dependency 'PromisesSwift'
s.dependency 'SwiftLogJellyfish', '1.5.2'

s.subspec "Broadcast" do |spec|
spec.source_files = "packages/ios-client/Sources/FishjamClient/media/BroadcastSampleSource.swift", "packages/ios-client/Sources/FishjamClient/ipc/**/*.{h,m,mm,swift}"
end
end
4 changes: 0 additions & 4 deletions RELEASE.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
## Release process:

1. Create new branch:

- update `version` to x.y.z in [package.json](./package.json)
- update `version` to x.y.z in [package.json](./packages/react-native-client/package.json)
- update `s.version` to x.y.z in [FishjamCloudClient.podspec](./FishjamCloudClient.podspec)
- update `s.dependency 'FishjamCloudClient'` to x.y.z in [RNFishjamClient.podspec](./packages/react-native-client/ios/RNFishjamClient.podspec)
- update `packageVersion` to x.y.z in [build.gradle](./packages/react-native-client/android/build.gradle)

1. Commit, create pull request and merge it

Expand Down
20 changes: 12 additions & 8 deletions common/plugins/src/with-custom-config-ios.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,12 @@ const replaceCloudClientForExtension = (
podfileContent: string,
extensionTargetName?: string,
) => {
const extTargetName = extensionTargetName || 'FishjamScreenBroadcastExtension';
const podToReplace = "pod 'FishjamCloudClient/Broadcast'";
const extTargetName =
extensionTargetName || 'FishjamScreenBroadcastExtension';
const podToReplace = "pod 'FishjamCloudBroadcastClient'";
const replacementPod = `
${INFO_GENERATED_COMMENT_IOS}
pod 'FishjamCloudClient/Broadcast', :path => '../../../'`;
pod 'FishjamCloudBroadcastClient', :path => '../../../'`;

const targetRegex = new RegExp(
`target '${extTargetName}' do[\\s\\S]*?${podToReplace}[\\s\\S]*?end`,
Expand All @@ -39,14 +40,17 @@ const replaceCloudClientForMainApp = (
return podfileContent;
};

export const withCustomConfigIos: ConfigPlugin<{ targetName: string; extensionTargetName?: string }> = (
config,
{ targetName, extensionTargetName },
) => {
export const withCustomConfigIos: ConfigPlugin<{
targetName: string;
extensionTargetName?: string;
}> = (config, { targetName, extensionTargetName }) => {
config = withPodfile(config, (configuration) => {
let podfile = configuration.modResults.contents;

podfile = removeGeneratedBlockIos(podfile, INFO_GENERATED_COMMENT_IOS.trim());
podfile = removeGeneratedBlockIos(
podfile,
INFO_GENERATED_COMMENT_IOS.trim(),
);

podfile = replaceCloudClientForExtension(podfile, extensionTargetName);
podfile = replaceCloudClientForMainApp(targetName, podfile);
Expand Down
2 changes: 1 addition & 1 deletion internal/fishjam-chat/eas.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"build": {
"base": {
"ios": {
"image": "macos-sequoia-15.3-xcode-16.2"
"image": "latest"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe better to have it set manually, no strong opinion on that though.

Copy link
Collaborator Author

@MiloszFilimowski MiloszFilimowski Dec 4, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is intentional; we use this app to test our SDK, so if something breaks (like in this case), we want to know as soon as possible. It used to be like this until the above bug occurred, which forced us to lock the image version.

}
},
"development": {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import FishjamCloudClient
import FishjamCloudBroadcastClient
import Foundation
import ReplayKit
import WebRTC
Expand Down
4 changes: 2 additions & 2 deletions packages/react-native-client/plugin/src/withFishjamIos.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function getSbeTargetName(props: FishjamPluginOptions) {

export function getSbePodfileSnippet(props: FishjamPluginOptions) {
const targetName = getSbeTargetName(props);
return `\ntarget '${targetName}' do\n pod 'FishjamCloudClient/Broadcast'\nend`;
return `\ntarget '${targetName}' do\n pod 'FishjamCloudBroadcastClient'\nend`;
}

const TARGETED_DEVICE_FAMILY = `"1,2"`;
Expand All @@ -46,7 +46,7 @@ async function updateFileWithRegex(

/**
* Inserts a required target to Podfile.
* This is needed to provide the dependency of FishjamCloudClient/Broadcast to the extension.
* This is needed to provide the dependency of FishjamCloudBroadcastClient to the extension.
*/
async function updatePodfile(iosPath: string, props: FishjamPluginOptions) {
const podfileSnippet = getSbePodfileSnippet(props);
Expand Down
Loading