diff --git a/.gitignore b/.gitignore index 743ca6449..b4cd08331 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ android/build Podfile.lock WebRTC.xcframework WebRTC.dSYMs +third_party/.webrtc-version examples/GumTestApp/package-lock.json examples/GumTestApp_macOS/package-lock.json **/.xcode.env.local diff --git a/android/build.gradle b/android/build.gradle index 8aa2bd996..438705f65 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -25,7 +25,7 @@ rootProject.allprojects { url = 'https://central.sonatype.com/repository/maven-snapshots/' content { // This efficiently tells Gradle to only look for this specific dependency here - includeModule('io.getstream', 'stream-webrtc-android') + includeModule('io.getstream', 'stream-video-webrtc-android') } } } @@ -84,7 +84,7 @@ def kotlin_version = getExtOrDefault('kotlinVersion', '1.8.10') println "Building Stream WebRTC React Native module with Kotlin version: $kotlin_version" dependencies { - api 'io.getstream:stream-video-webrtc-android:145.9.0' + api 'io.getstream:stream-video-webrtc-android:148.0.1-SNAPSHOT' implementation "com.facebook.react:react-android:+" implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation "androidx.core:core:1.7.0" diff --git a/examples/GumTestApp/ios/GumTestApp.xcodeproj/project.pbxproj b/examples/GumTestApp/ios/GumTestApp.xcodeproj/project.pbxproj index 1e9bc8bcc..80a601f29 100644 --- a/examples/GumTestApp/ios/GumTestApp.xcodeproj/project.pbxproj +++ b/examples/GumTestApp/ios/GumTestApp.xcodeproj/project.pbxproj @@ -352,13 +352,13 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-GumTestApp/Pods-GumTestApp-frameworks.sh", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/StreamWebRTC/WebRTC.framework/WebRTC", "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/stream-react-native-webrtc/WebRTC.framework/WebRTC", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; diff --git a/package-lock.json b/package-lock.json index 41ec28ccf..804d1a8c2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "145.3.0", + "version": "148.0.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "145.3.0", + "version": "148.0.0-alpha.1", "license": "MIT", "dependencies": { "base64-js": "^1.5.1", diff --git a/package.json b/package.json index 677cafd04..401db4f5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "145.3.0", + "version": "148.0.0-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" diff --git a/stream-react-native-webrtc.podspec b/stream-react-native-webrtc.podspec index 5e152299a..4f0e9b363 100644 --- a/stream-react-native-webrtc.podspec +++ b/stream-react-native-webrtc.podspec @@ -1,7 +1,36 @@ require 'json' +require 'fileutils' package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +# WebRTC version from https://github.com/GetStream/stream-video-swift-webrtc releases. +# 148.0.0 is not on CocoaPods trunk, so the xcframework is vendored directly instead of +# depending on the `StreamWebRTC` pod. The release asset below is the same one the +# `StreamWebRTC` podspec in that repo points at. CocoaPods skips `prepare_command` for +# `:path` pods (which is how React Native autolinks this module), so the fetch happens +# here — the podspec is plain Ruby, evaluated on every `pod install`. +webrtc_version = '148.0.0' +webrtc_url = "https://github.com/GetStream/stream-video-swift-webrtc/releases/download/#{webrtc_version}/WebRTC.xcframework.zip" +webrtc_dir = File.join(__dir__, 'third_party') +webrtc_framework = File.join(webrtc_dir, 'WebRTC.xcframework') +webrtc_stamp = File.join(webrtc_dir, '.webrtc-version') + +unless File.directory?(webrtc_framework) && File.exist?(webrtc_stamp) && File.read(webrtc_stamp).strip == webrtc_url + webrtc_zip = File.join(webrtc_dir, 'WebRTC.xcframework.zip') + + Pod::UI.puts "[stream-react-native-webrtc] Downloading WebRTC.xcframework #{webrtc_version}" + + FileUtils.mkdir_p(webrtc_dir) + FileUtils.rm_rf([webrtc_framework, webrtc_stamp, webrtc_zip]) + + raise "Failed to download #{webrtc_url}" unless system('curl', '-fSL', '--retry', '3', '-o', webrtc_zip, webrtc_url) + raise "Failed to unzip #{webrtc_zip}" unless system('unzip', '-q', '-o', webrtc_zip, '-x', '__MACOSX/*', '-d', webrtc_dir) + raise "#{webrtc_zip} did not contain WebRTC.xcframework" unless File.directory?(webrtc_framework) + + FileUtils.rm_f(webrtc_zip) + File.write(webrtc_stamp, webrtc_url) +end + Pod::Spec.new do |s| s.name = 'stream-react-native-webrtc' s.version = package['version'] @@ -20,8 +49,9 @@ Pod::Spec.new do |s| s.framework = 'AudioToolbox','AVFoundation', 'CoreAudio', 'CoreGraphics', 'CoreVideo', 'GLKit', 'VideoToolbox' s.swift_version = '5.0' s.dependency 'React-Core' - # WebRTC version from https://github.com/GetStream/stream-video-swift-webrtc releases - s.dependency 'StreamWebRTC', '= 145.14.0' + # WebRTC version from https://github.com/GetStream/stream-video-swift-webrtc releases. + # 148.0.0 is not yet published to CocoaPods trunk. so a temporary way to point at the pre-release xcframework published on GitHub releases. + s.vendored_frameworks = 'third_party/WebRTC.xcframework' # Swift/Objective-C compatibility #https://blog.cocoapods.org/CocoaPods-1.5.0/ s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES'