├── .bundle
└── config
├── .eslintrc.js
├── .gitignore
├── .prettierrc.js
├── .watchmanconfig
├── Gemfile
├── Gemfile.lock
├── README.md
├── __tests__
└── App.test.tsx
├── android
├── app
│ ├── build.gradle
│ ├── debug.keystore
│ ├── proguard-rules.pro
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ └── com
│ │ │ └── livekitreactnativemeet
│ │ │ ├── MainActivity.kt
│ │ │ └── MainApplication.kt
│ │ └── res
│ │ ├── drawable
│ │ └── rn_edit_text_material.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── strings.xml
│ │ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── app.json
├── babel.config.js
├── index.tsx
├── ios
├── .xcode.env
├── LiveKitReactNativeMeet.xcodeproj
│ ├── project.pbxproj
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── LiveKitReactNativeMeet.xcscheme
├── LiveKitReactNativeMeet.xcworkspace
│ └── contents.xcworkspacedata
├── LiveKitReactNativeMeet
│ ├── AppDelegate.h
│ ├── AppDelegate.mm
│ ├── Images.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Info.plist
│ ├── LaunchScreen.storyboard
│ ├── PrivacyInfo.xcprivacy
│ └── main.m
├── LiveKitReactNativeMeetTests
│ ├── Info.plist
│ └── LiveKitReactNativeMeetTests.m
├── Podfile
└── Podfile.lock
├── jest.config.js
├── metro.config.js
├── package.json
├── patches
└── @supersami+rn-foreground-service+2.1.0.patch
├── src
├── App.tsx
├── ParticipantView.tsx
├── PreJoinPage.tsx
├── RoomControls.tsx
├── RoomPage.tsx
├── callservice
│ ├── CallService.android.ts
│ ├── CallService.d.ts
│ └── CallService.ios.ts
├── icons
│ ├── baseline_cancel_white_24dp.png
│ ├── baseline_cast_connected_white_24dp.png
│ ├── baseline_cast_white_24dp.png
│ ├── baseline_mic_off_white_24dp.png
│ ├── baseline_mic_white_24dp.png
│ ├── baseline_videocam_off_white_24dp.png
│ ├── baseline_videocam_white_24dp.png
│ ├── camera_flip_outline.png
│ ├── message_outline.png
│ ├── outline_dots_white_24dp.png
│ └── speaker.png
├── types
│ ├── Foreground.d.ts
│ └── ReactNativeWebrtc.d.ts
└── ui
│ └── AudioOutputList.tsx
├── tsconfig.json
└── yarn.lock
/.bundle/config:
--------------------------------------------------------------------------------
1 | BUNDLE_PATH: "vendor/bundle"
2 | BUNDLE_FORCE_RUBY_PLATFORM: 1
3 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | extends: '@react-native',
4 | };
5 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OSX
2 | #
3 | .DS_Store
4 |
5 | # Xcode
6 | #
7 | build/
8 | *.pbxuser
9 | !default.pbxuser
10 | *.mode1v3
11 | !default.mode1v3
12 | *.mode2v3
13 | !default.mode2v3
14 | *.perspectivev3
15 | !default.perspectivev3
16 | xcuserdata
17 | *.xccheckout
18 | *.moved-aside
19 | DerivedData
20 | *.hmap
21 | *.ipa
22 | *.xcuserstate
23 | **/.xcode.env.local
24 |
25 | # Android/IntelliJ
26 | #
27 | build/
28 | .idea
29 | .gradle
30 | local.properties
31 | *.iml
32 | *.hprof
33 | .cxx/
34 | *.keystore
35 | !debug.keystore
36 |
37 | # node.js
38 | #
39 | node_modules/
40 | npm-debug.log
41 | yarn-error.log
42 |
43 | # fastlane
44 | #
45 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
46 | # screenshots whenever they are needed.
47 | # For more information about the recommended setup visit:
48 | # https://docs.fastlane.tools/best-practices/source-control/
49 |
50 | **/fastlane/report.xml
51 | **/fastlane/Preview.html
52 | **/fastlane/screenshots
53 | **/fastlane/test_output
54 |
55 | # Bundle artifact
56 | *.jsbundle
57 |
58 | # Ruby / CocoaPods
59 | **/Pods/
60 | /vendor/bundle/
61 |
62 | # Temporary files created by Metro to check the health of the file watcher
63 | .metro-health-check*
64 |
65 | # testing
66 | /coverage
67 |
68 | # Yarn
69 | .yarn/*
70 | !.yarn/patches
71 | !.yarn/plugins
72 | !.yarn/releases
73 | !.yarn/sdks
74 | !.yarn/versions
75 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: 'avoid',
3 | bracketSameLine: true,
4 | bracketSpacing: false,
5 | singleQuote: true,
6 | trailingComma: 'all',
7 | };
8 |
--------------------------------------------------------------------------------
/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | source 'https://rubygems.org'
2 |
3 | # You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
4 | ruby ">= 2.6.10"
5 |
6 | # Cocoapods 1.15 introduced a bug which break the build. We will remove the upper
7 | # bound in the template on Cocoapods with next React Native release.
8 | gem 'cocoapods', '>= 1.13', '< 1.15'
9 | gem 'activesupport', '>= 6.1.7.5', '< 7.1.0'
10 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | CFPropertyList (3.0.7)
5 | base64
6 | nkf
7 | rexml
8 | activesupport (7.0.8.1)
9 | concurrent-ruby (~> 1.0, >= 1.0.2)
10 | i18n (>= 1.6, < 2)
11 | minitest (>= 5.1)
12 | tzinfo (~> 2.0)
13 | addressable (2.8.6)
14 | public_suffix (>= 2.0.2, < 6.0)
15 | algoliasearch (1.27.5)
16 | httpclient (~> 2.8, >= 2.8.3)
17 | json (>= 1.5.1)
18 | atomos (0.1.3)
19 | base64 (0.2.0)
20 | claide (1.1.0)
21 | cocoapods (1.14.3)
22 | addressable (~> 2.8)
23 | claide (>= 1.0.2, < 2.0)
24 | cocoapods-core (= 1.14.3)
25 | cocoapods-deintegrate (>= 1.0.3, < 2.0)
26 | cocoapods-downloader (>= 2.1, < 3.0)
27 | cocoapods-plugins (>= 1.0.0, < 2.0)
28 | cocoapods-search (>= 1.0.0, < 2.0)
29 | cocoapods-trunk (>= 1.6.0, < 2.0)
30 | cocoapods-try (>= 1.1.0, < 2.0)
31 | colored2 (~> 3.1)
32 | escape (~> 0.0.4)
33 | fourflusher (>= 2.3.0, < 3.0)
34 | gh_inspector (~> 1.0)
35 | molinillo (~> 0.8.0)
36 | nap (~> 1.0)
37 | ruby-macho (>= 2.3.0, < 3.0)
38 | xcodeproj (>= 1.23.0, < 2.0)
39 | cocoapods-core (1.14.3)
40 | activesupport (>= 5.0, < 8)
41 | addressable (~> 2.8)
42 | algoliasearch (~> 1.0)
43 | concurrent-ruby (~> 1.1)
44 | fuzzy_match (~> 2.0.4)
45 | nap (~> 1.0)
46 | netrc (~> 0.11)
47 | public_suffix (~> 4.0)
48 | typhoeus (~> 1.0)
49 | cocoapods-deintegrate (1.0.5)
50 | cocoapods-downloader (2.1)
51 | cocoapods-plugins (1.0.0)
52 | nap
53 | cocoapods-search (1.0.1)
54 | cocoapods-trunk (1.6.0)
55 | nap (>= 0.8, < 2.0)
56 | netrc (~> 0.11)
57 | cocoapods-try (1.2.0)
58 | colored2 (3.1.2)
59 | concurrent-ruby (1.2.3)
60 | escape (0.0.4)
61 | ethon (0.16.0)
62 | ffi (>= 1.15.0)
63 | ffi (1.16.3)
64 | fourflusher (2.3.1)
65 | fuzzy_match (2.0.4)
66 | gh_inspector (1.1.3)
67 | httpclient (2.8.3)
68 | i18n (1.14.4)
69 | concurrent-ruby (~> 1.0)
70 | json (2.7.2)
71 | minitest (5.22.3)
72 | molinillo (0.8.0)
73 | nanaimo (0.3.0)
74 | nap (1.1.0)
75 | netrc (0.11.0)
76 | nkf (0.2.0)
77 | public_suffix (4.0.7)
78 | rexml (3.2.6)
79 | ruby-macho (2.5.1)
80 | typhoeus (1.4.1)
81 | ethon (>= 0.9.0)
82 | tzinfo (2.0.6)
83 | concurrent-ruby (~> 1.0)
84 | xcodeproj (1.24.0)
85 | CFPropertyList (>= 2.3.3, < 4.0)
86 | atomos (~> 0.1.3)
87 | claide (>= 1.0.2, < 2.0)
88 | colored2 (~> 3.1)
89 | nanaimo (~> 0.3.0)
90 | rexml (~> 3.2.4)
91 |
92 | PLATFORMS
93 | ruby
94 |
95 | DEPENDENCIES
96 | activesupport (>= 6.1.7.5, < 7.1.0)
97 | cocoapods (>= 1.13, < 1.15)
98 |
99 | RUBY VERSION
100 | ruby 3.0.3p157
101 |
102 | BUNDLED WITH
103 | 2.2.32
104 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LiveKit React Native Example App
2 |
3 | A basic video conference app built on top of the [LiveKit React Native SDK](https://github.com/livekit/client-sdk-react-native).
4 |
5 | ## Getting Started
6 |
7 | >**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding.
8 |
9 | ## Step 1: Start the Metro Server
10 |
11 | First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native.
12 |
13 | To start Metro, run the following command from the _root_ of your React Native project:
14 |
15 | ```bash
16 | # using npm
17 | npm start
18 |
19 | # OR using Yarn
20 | yarn start
21 | ```
22 |
23 | ## Step 2: Start your Application
24 |
25 | Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app:
26 |
27 | ### For Android
28 |
29 | ```bash
30 | # using npm
31 | npm run android
32 |
33 | # OR using Yarn
34 | yarn android
35 | ```
36 |
37 | ### For iOS
38 |
39 | ```bash
40 | # using npm
41 | npm run ios
42 |
43 | # OR using Yarn
44 | yarn ios
45 | ```
46 |
47 | If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly.
48 |
49 | This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively.
50 |
51 | ## Congratulations! :tada:
52 |
53 | You've successfully run our LiveKit example app! :partying_face:
54 |
55 | ### Now what?
56 |
57 | - View our guides at https://docs.livekit.io/
58 | - [Join our community!](https://livekit.io/join-slack)
59 |
60 |
--------------------------------------------------------------------------------
/__tests__/App.test.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * @format
3 | */
4 |
5 | import 'react-native';
6 | import React from 'react';
7 | import App from '../App';
8 |
9 | // Note: import explicitly to use the types shipped with jest.
10 | import {it} from '@jest/globals';
11 |
12 | // Note: test renderer must be required after react-native.
13 | import renderer from 'react-test-renderer';
14 |
15 | it('renders correctly', () => {
16 | renderer.create();
17 | });
18 |
--------------------------------------------------------------------------------
/android/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: "com.android.application"
2 | apply plugin: "org.jetbrains.kotlin.android"
3 | apply plugin: "com.facebook.react"
4 |
5 | /**
6 | * This is the configuration block to customize your React Native Android app.
7 | * By default you don't need to apply any configuration, just uncomment the lines you need.
8 | */
9 | react {
10 | /* Folders */
11 | // The root of your project, i.e. where "package.json" lives. Default is '..'
12 | // root = file("../")
13 | // The folder where the react-native NPM package is. Default is ../node_modules/react-native
14 | // reactNativeDir = file("../node_modules/react-native")
15 | // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen
16 | // codegenDir = file("../node_modules/@react-native/codegen")
17 | // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
18 | // cliFile = file("../node_modules/react-native/cli.js")
19 |
20 | /* Variants */
21 | // The list of variants to that are debuggable. For those we're going to
22 | // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
23 | // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
24 | // debuggableVariants = ["liteDebug", "prodDebug"]
25 |
26 | /* Bundling */
27 | // A list containing the node command and its flags. Default is just 'node'.
28 | // nodeExecutableAndArgs = ["node"]
29 | //
30 | // The command to run when bundling. By default is 'bundle'
31 | // bundleCommand = "ram-bundle"
32 | //
33 | // The path to the CLI configuration file. Default is empty.
34 | // bundleConfig = file(../rn-cli.config.js)
35 | //
36 | // The name of the generated asset file containing your JS bundle
37 | // bundleAssetName = "MyApplication.android.bundle"
38 | //
39 | // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
40 | // entryFile = file("../js/MyApplication.android.js")
41 | //
42 | // A list of extra flags to pass to the 'bundle' commands.
43 | // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
44 | // extraPackagerArgs = []
45 |
46 | /* Hermes Commands */
47 | // The hermes compiler command to run. By default it is 'hermesc'
48 | // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
49 | //
50 | // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
51 | // hermesFlags = ["-O", "-output-source-map"]
52 | }
53 |
54 | /**
55 | * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
56 | */
57 | def enableProguardInReleaseBuilds = false
58 |
59 | /**
60 | * The preferred build flavor of JavaScriptCore (JSC)
61 | *
62 | * For example, to use the international variant, you can use:
63 | * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
64 | *
65 | * The international variant includes ICU i18n library and necessary data
66 | * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
67 | * give correct results when using with locales other than en-US. Note that
68 | * this variant is about 6MiB larger per architecture than default.
69 | */
70 | def jscFlavor = 'org.webkit:android-jsc:+'
71 |
72 | android {
73 | ndkVersion rootProject.ext.ndkVersion
74 | buildToolsVersion rootProject.ext.buildToolsVersion
75 | compileSdk rootProject.ext.compileSdkVersion
76 |
77 | namespace "com.livekitreactnativemeet"
78 | defaultConfig {
79 | applicationId "com.livekitreactnativemeet"
80 | minSdkVersion rootProject.ext.minSdkVersion
81 | targetSdkVersion rootProject.ext.targetSdkVersion
82 | versionCode 1
83 | versionName "1.0"
84 | }
85 | signingConfigs {
86 | debug {
87 | storeFile file('debug.keystore')
88 | storePassword 'android'
89 | keyAlias 'androiddebugkey'
90 | keyPassword 'android'
91 | }
92 | }
93 | buildTypes {
94 | debug {
95 | signingConfig signingConfigs.debug
96 | }
97 | release {
98 | // Caution! In production, you need to generate your own keystore file.
99 | // see https://reactnative.dev/docs/signed-apk-android.
100 | signingConfig signingConfigs.debug
101 | minifyEnabled enableProguardInReleaseBuilds
102 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
103 | }
104 | }
105 | }
106 |
107 | dependencies {
108 | // The version of react-native is set by the React Native Gradle Plugin
109 | implementation("com.facebook.react:react-android")
110 | implementation("com.facebook.react:flipper-integration")
111 |
112 | if (hermesEnabled.toBoolean()) {
113 | implementation("com.facebook.react:hermes-android")
114 | } else {
115 | implementation jscFlavor
116 | }
117 | }
118 |
119 | apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
120 |
--------------------------------------------------------------------------------
/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/debug.keystore
--------------------------------------------------------------------------------
/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
12 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/livekitreactnativemeet/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.livekitreactnativemeet
2 |
3 | import com.facebook.react.ReactActivity
4 | import com.facebook.react.ReactActivityDelegate
5 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled
6 | import com.facebook.react.defaults.DefaultReactActivityDelegate
7 |
8 | class MainActivity : ReactActivity() {
9 |
10 | /**
11 | * Returns the name of the main component registered from JavaScript. This is used to schedule
12 | * rendering of the component.
13 | */
14 | override fun getMainComponentName(): String = "LiveKitReactNativeMeet"
15 |
16 | /**
17 | * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate]
18 | * which allows you to enable New Architecture with a single boolean flags [fabricEnabled]
19 | */
20 | override fun createReactActivityDelegate(): ReactActivityDelegate =
21 | DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled)
22 | }
23 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/livekitreactnativemeet/MainApplication.kt:
--------------------------------------------------------------------------------
1 | package com.livekitreactnativemeet
2 |
3 | import android.app.Application
4 | import com.facebook.react.PackageList
5 | import com.facebook.react.ReactApplication
6 | import com.facebook.react.ReactHost
7 | import com.facebook.react.ReactNativeHost
8 | import com.facebook.react.ReactPackage
9 | import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load
10 | import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost
11 | import com.facebook.react.defaults.DefaultReactNativeHost
12 | import com.facebook.react.flipper.ReactNativeFlipper
13 | import com.facebook.soloader.SoLoader
14 | import com.livekit.reactnative.LiveKitReactNative
15 | import com.livekit.reactnative.audio.AudioType
16 |
17 | class MainApplication : Application(), ReactApplication {
18 |
19 | override val reactNativeHost: ReactNativeHost =
20 | object : DefaultReactNativeHost(this) {
21 | override fun getPackages(): List =
22 | PackageList(this).packages.apply {
23 | // Packages that cannot be autolinked yet can be added manually here, for example:
24 | // add(MyReactNativePackage())
25 | }
26 |
27 | override fun getJSMainModuleName(): String = "index"
28 |
29 | override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG
30 |
31 | override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED
32 | override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED
33 | }
34 |
35 | override val reactHost: ReactHost
36 | get() = getDefaultReactHost(this.applicationContext, reactNativeHost)
37 |
38 | override fun onCreate() {
39 | LiveKitReactNative.setup(this);
40 | super.onCreate()
41 | SoLoader.init(this, false)
42 | if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
43 | // If you opted-in for the New Architecture, we load the native entry point for this app.
44 | load()
45 | }
46 | ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager)
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/rn_edit_text_material.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
21 |
22 |
23 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | LiveKitReactNativeMeet
3 |
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext {
3 | buildToolsVersion = "34.0.0"
4 | minSdkVersion = 21
5 | compileSdkVersion = 34
6 | targetSdkVersion = 34
7 | ndkVersion = "25.1.8937393"
8 | kotlinVersion = "1.8.0"
9 | }
10 | repositories {
11 | google()
12 | mavenCentral()
13 | }
14 | dependencies {
15 | classpath("com.android.tools.build:gradle")
16 | classpath("com.facebook.react:react-native-gradle-plugin")
17 | classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
18 | }
19 | }
20 |
21 | apply plugin: "com.facebook.react.rootproject"
22 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
13 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
19 |
20 | # AndroidX package structure to make it clearer which packages are bundled with the
21 | # Android operating system, and which are packaged with your app's APK
22 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
23 | android.useAndroidX=true
24 | # Automatically convert third-party libraries to use AndroidX
25 | android.enableJetifier=true
26 |
27 | # Use this property to specify which architecture you want to build.
28 | # You can also override it from the CLI using
29 | # ./gradlew -PreactNativeArchitectures=x86_64
30 | reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
31 |
32 | # Use this property to enable support to the new architecture.
33 | # This will allow you to use TurboModules and the Fabric render in
34 | # your application. You should enable this flag either if you want
35 | # to write custom TurboModules/Fabric components OR use libraries that
36 | # are providing them.
37 | newArchEnabled=false
38 |
39 | # Use this property to enable or disable the Hermes JS engine.
40 | # If set to false, you will be using JSC instead.
41 | hermesEnabled=true
42 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | #
21 | # Gradle start up script for POSIX generated by Gradle.
22 | #
23 | # Important for running:
24 | #
25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
26 | # noncompliant, but you have some other compliant shell such as ksh or
27 | # bash, then to run this script, type that shell name before the whole
28 | # command line, like:
29 | #
30 | # ksh Gradle
31 | #
32 | # Busybox and similar reduced shells will NOT work, because this script
33 | # requires all of these POSIX shell features:
34 | # * functions;
35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
37 | # * compound commands having a testable exit status, especially «case»;
38 | # * various built-in commands including «command», «set», and «ulimit».
39 | #
40 | # Important for patching:
41 | #
42 | # (2) This script targets any POSIX shell, so it avoids extensions provided
43 | # by Bash, Ksh, etc; in particular arrays are avoided.
44 | #
45 | # The "traditional" practice of packing multiple parameters into a
46 | # space-separated string is a well documented source of bugs and security
47 | # problems, so this is (mostly) avoided, by progressively accumulating
48 | # options in "$@", and eventually passing that to Java.
49 | #
50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
52 | # see the in-line comments for details.
53 | #
54 | # There are tweaks for specific operating systems such as AIX, CygWin,
55 | # Darwin, MinGW, and NonStop.
56 | #
57 | # (3) This script is generated from the Groovy template
58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
59 | # within the Gradle project.
60 | #
61 | # You can find Gradle at https://github.com/gradle/gradle/.
62 | #
63 | ##############################################################################
64 |
65 | # Attempt to set APP_HOME
66 |
67 | # Resolve links: $0 may be a link
68 | app_path=$0
69 |
70 | # Need this for daisy-chained symlinks.
71 | while
72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
73 | [ -h "$app_path" ]
74 | do
75 | ls=$( ls -ld "$app_path" )
76 | link=${ls#*' -> '}
77 | case $link in #(
78 | /*) app_path=$link ;; #(
79 | *) app_path=$APP_HOME$link ;;
80 | esac
81 | done
82 |
83 | # This is normally unused
84 | # shellcheck disable=SC2034
85 | APP_BASE_NAME=${0##*/}
86 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
87 | APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
88 |
89 | # Use the maximum available, or set MAX_FD != -1 to use that value.
90 | MAX_FD=maximum
91 |
92 | warn () {
93 | echo "$*"
94 | } >&2
95 |
96 | die () {
97 | echo
98 | echo "$*"
99 | echo
100 | exit 1
101 | } >&2
102 |
103 | # OS specific support (must be 'true' or 'false').
104 | cygwin=false
105 | msys=false
106 | darwin=false
107 | nonstop=false
108 | case "$( uname )" in #(
109 | CYGWIN* ) cygwin=true ;; #(
110 | Darwin* ) darwin=true ;; #(
111 | MSYS* | MINGW* ) msys=true ;; #(
112 | NONSTOP* ) nonstop=true ;;
113 | esac
114 |
115 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
116 |
117 |
118 | # Determine the Java command to use to start the JVM.
119 | if [ -n "$JAVA_HOME" ] ; then
120 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
121 | # IBM's JDK on AIX uses strange locations for the executables
122 | JAVACMD=$JAVA_HOME/jre/sh/java
123 | else
124 | JAVACMD=$JAVA_HOME/bin/java
125 | fi
126 | if [ ! -x "$JAVACMD" ] ; then
127 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
128 |
129 | Please set the JAVA_HOME variable in your environment to match the
130 | location of your Java installation."
131 | fi
132 | else
133 | JAVACMD=java
134 | if ! command -v java >/dev/null 2>&1
135 | then
136 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137 |
138 | Please set the JAVA_HOME variable in your environment to match the
139 | location of your Java installation."
140 | fi
141 | fi
142 |
143 | # Increase the maximum file descriptors if we can.
144 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
145 | case $MAX_FD in #(
146 | max*)
147 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
148 | # shellcheck disable=SC3045
149 | MAX_FD=$( ulimit -H -n ) ||
150 | warn "Could not query maximum file descriptor limit"
151 | esac
152 | case $MAX_FD in #(
153 | '' | soft) :;; #(
154 | *)
155 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
156 | # shellcheck disable=SC3045
157 | ulimit -n "$MAX_FD" ||
158 | warn "Could not set maximum file descriptor limit to $MAX_FD"
159 | esac
160 | fi
161 |
162 | # Collect all arguments for the java command, stacking in reverse order:
163 | # * args from the command line
164 | # * the main class name
165 | # * -classpath
166 | # * -D...appname settings
167 | # * --module-path (only if needed)
168 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
169 |
170 | # For Cygwin or MSYS, switch paths to Windows format before running java
171 | if "$cygwin" || "$msys" ; then
172 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
173 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
174 |
175 | JAVACMD=$( cygpath --unix "$JAVACMD" )
176 |
177 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
178 | for arg do
179 | if
180 | case $arg in #(
181 | -*) false ;; # don't mess with options #(
182 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
183 | [ -e "$t" ] ;; #(
184 | *) false ;;
185 | esac
186 | then
187 | arg=$( cygpath --path --ignore --mixed "$arg" )
188 | fi
189 | # Roll the args list around exactly as many times as the number of
190 | # args, so each arg winds up back in the position where it started, but
191 | # possibly modified.
192 | #
193 | # NB: a `for` loop captures its iteration list before it begins, so
194 | # changing the positional parameters here affects neither the number of
195 | # iterations, nor the values presented in `arg`.
196 | shift # remove old arg
197 | set -- "$@" "$arg" # push replacement arg
198 | done
199 | fi
200 |
201 |
202 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
203 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
204 |
205 | # Collect all arguments for the java command;
206 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
207 | # shell script including quotes and variable substitutions, so put them in
208 | # double quotes to make sure that they get re-expanded; and
209 | # * put everything else in single quotes, so that it's not re-expanded.
210 |
211 | set -- \
212 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
213 | -classpath "$CLASSPATH" \
214 | org.gradle.wrapper.GradleWrapperMain \
215 | "$@"
216 |
217 | # Stop when "xargs" is not available.
218 | if ! command -v xargs >/dev/null 2>&1
219 | then
220 | die "xargs is not available"
221 | fi
222 |
223 | # Use "xargs" to parse quoted args.
224 | #
225 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
226 | #
227 | # In Bash we could simply go:
228 | #
229 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
230 | # set -- "${ARGS[@]}" "$@"
231 | #
232 | # but POSIX shell has neither arrays nor command substitution, so instead we
233 | # post-process each arg (as a line of input to sed) to backslash-escape any
234 | # character that might be a shell metacharacter, then use eval to reverse
235 | # that process (while maintaining the separation between arguments), and wrap
236 | # the whole thing up as a single "set" statement.
237 | #
238 | # This will of course break if any of these variables contains a newline or
239 | # an unmatched quote.
240 | #
241 |
242 | eval "set -- $(
243 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
244 | xargs -n1 |
245 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
246 | tr '\n' ' '
247 | )" '"$@"'
248 |
249 | exec "$JAVACMD" "$@"
250 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%"=="" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%"=="" set DIRNAME=.
29 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo.
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48 | echo.
49 | echo Please set the JAVA_HOME variable in your environment to match the
50 | echo location of your Java installation.
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo.
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62 | echo.
63 | echo Please set the JAVA_HOME variable in your environment to match the
64 | echo location of your Java installation.
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'LiveKitReactNativeMeet'
2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 | include ':app'
4 | includeBuild('../node_modules/@react-native/gradle-plugin')
5 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "LiveKitReactNativeMeet",
3 | "displayName": "LiveKitReactNativeMeet"
4 | }
5 |
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ['module:@react-native/babel-preset'],
3 | };
4 |
--------------------------------------------------------------------------------
/index.tsx:
--------------------------------------------------------------------------------
1 | import { AppRegistry } from 'react-native';
2 | import App from './src/App';
3 | import { name as appName } from './app.json';
4 | import { registerGlobals } from '@livekit/react-native';
5 | import ReactNativeForegroundService from '@supersami/rn-foreground-service';
6 |
7 | registerGlobals();
8 | ReactNativeForegroundService.register();
9 | AppRegistry.registerComponent(appName, () => App);
10 |
--------------------------------------------------------------------------------
/ios/.xcode.env:
--------------------------------------------------------------------------------
1 | # This `.xcode.env` file is versioned and is used to source the environment
2 | # used when running script phases inside Xcode.
3 | # To customize your local environment, you can create an `.xcode.env.local`
4 | # file that is not versioned.
5 |
6 | # NODE_BINARY variable contains the PATH to the node executable.
7 | #
8 | # Customize the NODE_BINARY variable here.
9 | # For example, to use nvm with brew, add the following line
10 | # . "$(brew --prefix nvm)/nvm.sh" --no-use
11 | export NODE_BINARY=$(command -v node)
12 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 00E356F31AD99517003FC87E /* LiveKitReactNativeMeetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* LiveKitReactNativeMeetTests.m */; };
11 | 0C80B921A6F3F58F76C31292 /* libPods-LiveKitReactNativeMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-LiveKitReactNativeMeet.a */; };
12 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
13 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
14 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
15 | 6132EF182BDFF13200BBE14D /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */; };
16 | 7699B88040F8A987B510C191 /* libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 19F6CBCC0A4E27FBF8BF4A61 /* libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a */; };
17 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
18 | /* End PBXBuildFile section */
19 |
20 | /* Begin PBXContainerItemProxy section */
21 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
22 | isa = PBXContainerItemProxy;
23 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
24 | proxyType = 1;
25 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
26 | remoteInfo = LiveKitReactNativeMeet;
27 | };
28 | /* End PBXContainerItemProxy section */
29 |
30 | /* Begin PBXFileReference section */
31 | 00E356EE1AD99517003FC87E /* LiveKitReactNativeMeetTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LiveKitReactNativeMeetTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
32 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
33 | 00E356F21AD99517003FC87E /* LiveKitReactNativeMeetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LiveKitReactNativeMeetTests.m; sourceTree = ""; };
34 | 13B07F961A680F5B00A75B9A /* LiveKitReactNativeMeet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LiveKitReactNativeMeet.app; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = LiveKitReactNativeMeet/AppDelegate.h; sourceTree = ""; };
36 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = LiveKitReactNativeMeet/AppDelegate.mm; sourceTree = ""; };
37 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = LiveKitReactNativeMeet/Images.xcassets; sourceTree = ""; };
38 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = LiveKitReactNativeMeet/Info.plist; sourceTree = ""; };
39 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = LiveKitReactNativeMeet/main.m; sourceTree = ""; };
40 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 3B4392A12AC88292D35C810B /* Pods-LiveKitReactNativeMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LiveKitReactNativeMeet.debug.xcconfig"; path = "Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet.debug.xcconfig"; sourceTree = ""; };
42 | 5709B34CF0A7D63546082F79 /* Pods-LiveKitReactNativeMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LiveKitReactNativeMeet.release.xcconfig"; path = "Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet.release.xcconfig"; sourceTree = ""; };
43 | 5B7EB9410499542E8C5724F5 /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.debug.xcconfig"; path = "Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.debug.xcconfig"; sourceTree = ""; };
44 | 5DCACB8F33CDC322A6C60F78 /* libPods-LiveKitReactNativeMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-LiveKitReactNativeMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
45 | 6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = PrivacyInfo.xcprivacy; path = LiveKitReactNativeMeet/PrivacyInfo.xcprivacy; sourceTree = ""; };
46 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = LiveKitReactNativeMeet/LaunchScreen.storyboard; sourceTree = ""; };
47 | 89C6BE57DB24E9ADA2F236DE /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.release.xcconfig"; path = "Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.release.xcconfig"; sourceTree = ""; };
48 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
49 | /* End PBXFileReference section */
50 |
51 | /* Begin PBXFrameworksBuildPhase section */
52 | 00E356EB1AD99517003FC87E /* Frameworks */ = {
53 | isa = PBXFrameworksBuildPhase;
54 | buildActionMask = 2147483647;
55 | files = (
56 | 7699B88040F8A987B510C191 /* libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a in Frameworks */,
57 | );
58 | runOnlyForDeploymentPostprocessing = 0;
59 | };
60 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
61 | isa = PBXFrameworksBuildPhase;
62 | buildActionMask = 2147483647;
63 | files = (
64 | 0C80B921A6F3F58F76C31292 /* libPods-LiveKitReactNativeMeet.a in Frameworks */,
65 | );
66 | runOnlyForDeploymentPostprocessing = 0;
67 | };
68 | /* End PBXFrameworksBuildPhase section */
69 |
70 | /* Begin PBXGroup section */
71 | 00E356EF1AD99517003FC87E /* LiveKitReactNativeMeetTests */ = {
72 | isa = PBXGroup;
73 | children = (
74 | 00E356F21AD99517003FC87E /* LiveKitReactNativeMeetTests.m */,
75 | 00E356F01AD99517003FC87E /* Supporting Files */,
76 | );
77 | path = LiveKitReactNativeMeetTests;
78 | sourceTree = "";
79 | };
80 | 00E356F01AD99517003FC87E /* Supporting Files */ = {
81 | isa = PBXGroup;
82 | children = (
83 | 00E356F11AD99517003FC87E /* Info.plist */,
84 | );
85 | name = "Supporting Files";
86 | sourceTree = "";
87 | };
88 | 13B07FAE1A68108700A75B9A /* LiveKitReactNativeMeet */ = {
89 | isa = PBXGroup;
90 | children = (
91 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
92 | 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
93 | 13B07FB51A68108700A75B9A /* Images.xcassets */,
94 | 13B07FB61A68108700A75B9A /* Info.plist */,
95 | 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
96 | 13B07FB71A68108700A75B9A /* main.m */,
97 | );
98 | name = LiveKitReactNativeMeet;
99 | sourceTree = "";
100 | };
101 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
102 | isa = PBXGroup;
103 | children = (
104 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
105 | 5DCACB8F33CDC322A6C60F78 /* libPods-LiveKitReactNativeMeet.a */,
106 | 19F6CBCC0A4E27FBF8BF4A61 /* libPods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.a */,
107 | );
108 | name = Frameworks;
109 | sourceTree = "";
110 | };
111 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
112 | isa = PBXGroup;
113 | children = (
114 | );
115 | name = Libraries;
116 | sourceTree = "";
117 | };
118 | 83CBB9F61A601CBA00E9B192 = {
119 | isa = PBXGroup;
120 | children = (
121 | 6132EF172BDFF13200BBE14D /* PrivacyInfo.xcprivacy */,
122 | 13B07FAE1A68108700A75B9A /* LiveKitReactNativeMeet */,
123 | 832341AE1AAA6A7D00B99B32 /* Libraries */,
124 | 00E356EF1AD99517003FC87E /* LiveKitReactNativeMeetTests */,
125 | 83CBBA001A601CBA00E9B192 /* Products */,
126 | 2D16E6871FA4F8E400B85C8A /* Frameworks */,
127 | BBD78D7AC51CEA395F1C20DB /* Pods */,
128 | );
129 | indentWidth = 2;
130 | sourceTree = "";
131 | tabWidth = 2;
132 | usesTabs = 0;
133 | };
134 | 83CBBA001A601CBA00E9B192 /* Products */ = {
135 | isa = PBXGroup;
136 | children = (
137 | 13B07F961A680F5B00A75B9A /* LiveKitReactNativeMeet.app */,
138 | 00E356EE1AD99517003FC87E /* LiveKitReactNativeMeetTests.xctest */,
139 | );
140 | name = Products;
141 | sourceTree = "";
142 | };
143 | BBD78D7AC51CEA395F1C20DB /* Pods */ = {
144 | isa = PBXGroup;
145 | children = (
146 | 3B4392A12AC88292D35C810B /* Pods-LiveKitReactNativeMeet.debug.xcconfig */,
147 | 5709B34CF0A7D63546082F79 /* Pods-LiveKitReactNativeMeet.release.xcconfig */,
148 | 5B7EB9410499542E8C5724F5 /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.debug.xcconfig */,
149 | 89C6BE57DB24E9ADA2F236DE /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.release.xcconfig */,
150 | );
151 | path = Pods;
152 | sourceTree = "";
153 | };
154 | /* End PBXGroup section */
155 |
156 | /* Begin PBXNativeTarget section */
157 | 00E356ED1AD99517003FC87E /* LiveKitReactNativeMeetTests */ = {
158 | isa = PBXNativeTarget;
159 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LiveKitReactNativeMeetTests" */;
160 | buildPhases = (
161 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */,
162 | 00E356EA1AD99517003FC87E /* Sources */,
163 | 00E356EB1AD99517003FC87E /* Frameworks */,
164 | 00E356EC1AD99517003FC87E /* Resources */,
165 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */,
166 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */,
167 | );
168 | buildRules = (
169 | );
170 | dependencies = (
171 | 00E356F51AD99517003FC87E /* PBXTargetDependency */,
172 | );
173 | name = LiveKitReactNativeMeetTests;
174 | productName = LiveKitReactNativeMeetTests;
175 | productReference = 00E356EE1AD99517003FC87E /* LiveKitReactNativeMeetTests.xctest */;
176 | productType = "com.apple.product-type.bundle.unit-test";
177 | };
178 | 13B07F861A680F5B00A75B9A /* LiveKitReactNativeMeet */ = {
179 | isa = PBXNativeTarget;
180 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "LiveKitReactNativeMeet" */;
181 | buildPhases = (
182 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */,
183 | 13B07F871A680F5B00A75B9A /* Sources */,
184 | 13B07F8C1A680F5B00A75B9A /* Frameworks */,
185 | 13B07F8E1A680F5B00A75B9A /* Resources */,
186 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
187 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */,
188 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */,
189 | );
190 | buildRules = (
191 | );
192 | dependencies = (
193 | );
194 | name = LiveKitReactNativeMeet;
195 | productName = LiveKitReactNativeMeet;
196 | productReference = 13B07F961A680F5B00A75B9A /* LiveKitReactNativeMeet.app */;
197 | productType = "com.apple.product-type.application";
198 | };
199 | /* End PBXNativeTarget section */
200 |
201 | /* Begin PBXProject section */
202 | 83CBB9F71A601CBA00E9B192 /* Project object */ = {
203 | isa = PBXProject;
204 | attributes = {
205 | LastUpgradeCheck = 1210;
206 | TargetAttributes = {
207 | 00E356ED1AD99517003FC87E = {
208 | CreatedOnToolsVersion = 6.2;
209 | TestTargetID = 13B07F861A680F5B00A75B9A;
210 | };
211 | 13B07F861A680F5B00A75B9A = {
212 | LastSwiftMigration = 1120;
213 | };
214 | };
215 | };
216 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "LiveKitReactNativeMeet" */;
217 | compatibilityVersion = "Xcode 12.0";
218 | developmentRegion = en;
219 | hasScannedForEncodings = 0;
220 | knownRegions = (
221 | en,
222 | Base,
223 | );
224 | mainGroup = 83CBB9F61A601CBA00E9B192;
225 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
226 | projectDirPath = "";
227 | projectRoot = "";
228 | targets = (
229 | 13B07F861A680F5B00A75B9A /* LiveKitReactNativeMeet */,
230 | 00E356ED1AD99517003FC87E /* LiveKitReactNativeMeetTests */,
231 | );
232 | };
233 | /* End PBXProject section */
234 |
235 | /* Begin PBXResourcesBuildPhase section */
236 | 00E356EC1AD99517003FC87E /* Resources */ = {
237 | isa = PBXResourcesBuildPhase;
238 | buildActionMask = 2147483647;
239 | files = (
240 | );
241 | runOnlyForDeploymentPostprocessing = 0;
242 | };
243 | 13B07F8E1A680F5B00A75B9A /* Resources */ = {
244 | isa = PBXResourcesBuildPhase;
245 | buildActionMask = 2147483647;
246 | files = (
247 | 6132EF182BDFF13200BBE14D /* PrivacyInfo.xcprivacy in Resources */,
248 | 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
249 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
250 | );
251 | runOnlyForDeploymentPostprocessing = 0;
252 | };
253 | /* End PBXResourcesBuildPhase section */
254 |
255 | /* Begin PBXShellScriptBuildPhase section */
256 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
257 | isa = PBXShellScriptBuildPhase;
258 | buildActionMask = 2147483647;
259 | files = (
260 | );
261 | inputPaths = (
262 | "$(SRCROOT)/.xcode.env.local",
263 | "$(SRCROOT)/.xcode.env",
264 | );
265 | name = "Bundle React Native code and images";
266 | outputPaths = (
267 | );
268 | runOnlyForDeploymentPostprocessing = 0;
269 | shellPath = /bin/sh;
270 | shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
271 | };
272 | 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = {
273 | isa = PBXShellScriptBuildPhase;
274 | buildActionMask = 2147483647;
275 | files = (
276 | );
277 | inputFileListPaths = (
278 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-frameworks-${CONFIGURATION}-input-files.xcfilelist",
279 | );
280 | name = "[CP] Embed Pods Frameworks";
281 | outputFileListPaths = (
282 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-frameworks-${CONFIGURATION}-output-files.xcfilelist",
283 | );
284 | runOnlyForDeploymentPostprocessing = 0;
285 | shellPath = /bin/sh;
286 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-frameworks.sh\"\n";
287 | showEnvVarsInLog = 0;
288 | };
289 | A55EABD7B0C7F3A422A6CC61 /* [CP] Check Pods Manifest.lock */ = {
290 | isa = PBXShellScriptBuildPhase;
291 | buildActionMask = 2147483647;
292 | files = (
293 | );
294 | inputFileListPaths = (
295 | );
296 | inputPaths = (
297 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
298 | "${PODS_ROOT}/Manifest.lock",
299 | );
300 | name = "[CP] Check Pods Manifest.lock";
301 | outputFileListPaths = (
302 | );
303 | outputPaths = (
304 | "$(DERIVED_FILE_DIR)/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-checkManifestLockResult.txt",
305 | );
306 | runOnlyForDeploymentPostprocessing = 0;
307 | shellPath = /bin/sh;
308 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
309 | showEnvVarsInLog = 0;
310 | };
311 | C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = {
312 | isa = PBXShellScriptBuildPhase;
313 | buildActionMask = 2147483647;
314 | files = (
315 | );
316 | inputFileListPaths = (
317 | );
318 | inputPaths = (
319 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
320 | "${PODS_ROOT}/Manifest.lock",
321 | );
322 | name = "[CP] Check Pods Manifest.lock";
323 | outputFileListPaths = (
324 | );
325 | outputPaths = (
326 | "$(DERIVED_FILE_DIR)/Pods-LiveKitReactNativeMeet-checkManifestLockResult.txt",
327 | );
328 | runOnlyForDeploymentPostprocessing = 0;
329 | shellPath = /bin/sh;
330 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
331 | showEnvVarsInLog = 0;
332 | };
333 | C59DA0FBD6956966B86A3779 /* [CP] Embed Pods Frameworks */ = {
334 | isa = PBXShellScriptBuildPhase;
335 | buildActionMask = 2147483647;
336 | files = (
337 | );
338 | inputFileListPaths = (
339 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
340 | );
341 | name = "[CP] Embed Pods Frameworks";
342 | outputFileListPaths = (
343 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
344 | );
345 | runOnlyForDeploymentPostprocessing = 0;
346 | shellPath = /bin/sh;
347 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-frameworks.sh\"\n";
348 | showEnvVarsInLog = 0;
349 | };
350 | E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = {
351 | isa = PBXShellScriptBuildPhase;
352 | buildActionMask = 2147483647;
353 | files = (
354 | );
355 | inputFileListPaths = (
356 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-resources-${CONFIGURATION}-input-files.xcfilelist",
357 | );
358 | name = "[CP] Copy Pods Resources";
359 | outputFileListPaths = (
360 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-resources-${CONFIGURATION}-output-files.xcfilelist",
361 | );
362 | runOnlyForDeploymentPostprocessing = 0;
363 | shellPath = /bin/sh;
364 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet/Pods-LiveKitReactNativeMeet-resources.sh\"\n";
365 | showEnvVarsInLog = 0;
366 | };
367 | F6A41C54EA430FDDC6A6ED99 /* [CP] Copy Pods Resources */ = {
368 | isa = PBXShellScriptBuildPhase;
369 | buildActionMask = 2147483647;
370 | files = (
371 | );
372 | inputFileListPaths = (
373 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-resources-${CONFIGURATION}-input-files.xcfilelist",
374 | );
375 | name = "[CP] Copy Pods Resources";
376 | outputFileListPaths = (
377 | "${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-resources-${CONFIGURATION}-output-files.xcfilelist",
378 | );
379 | runOnlyForDeploymentPostprocessing = 0;
380 | shellPath = /bin/sh;
381 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests/Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests-resources.sh\"\n";
382 | showEnvVarsInLog = 0;
383 | };
384 | /* End PBXShellScriptBuildPhase section */
385 |
386 | /* Begin PBXSourcesBuildPhase section */
387 | 00E356EA1AD99517003FC87E /* Sources */ = {
388 | isa = PBXSourcesBuildPhase;
389 | buildActionMask = 2147483647;
390 | files = (
391 | 00E356F31AD99517003FC87E /* LiveKitReactNativeMeetTests.m in Sources */,
392 | );
393 | runOnlyForDeploymentPostprocessing = 0;
394 | };
395 | 13B07F871A680F5B00A75B9A /* Sources */ = {
396 | isa = PBXSourcesBuildPhase;
397 | buildActionMask = 2147483647;
398 | files = (
399 | 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
400 | 13B07FC11A68108700A75B9A /* main.m in Sources */,
401 | );
402 | runOnlyForDeploymentPostprocessing = 0;
403 | };
404 | /* End PBXSourcesBuildPhase section */
405 |
406 | /* Begin PBXTargetDependency section */
407 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
408 | isa = PBXTargetDependency;
409 | target = 13B07F861A680F5B00A75B9A /* LiveKitReactNativeMeet */;
410 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
411 | };
412 | /* End PBXTargetDependency section */
413 |
414 | /* Begin XCBuildConfiguration section */
415 | 00E356F61AD99517003FC87E /* Debug */ = {
416 | isa = XCBuildConfiguration;
417 | baseConfigurationReference = 5B7EB9410499542E8C5724F5 /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.debug.xcconfig */;
418 | buildSettings = {
419 | BUNDLE_LOADER = "$(TEST_HOST)";
420 | GCC_PREPROCESSOR_DEFINITIONS = (
421 | "DEBUG=1",
422 | "$(inherited)",
423 | );
424 | INFOPLIST_FILE = LiveKitReactNativeMeetTests/Info.plist;
425 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
426 | LD_RUNPATH_SEARCH_PATHS = (
427 | "$(inherited)",
428 | "@executable_path/Frameworks",
429 | "@loader_path/Frameworks",
430 | );
431 | OTHER_LDFLAGS = (
432 | "-ObjC",
433 | "-lc++",
434 | "$(inherited)",
435 | );
436 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
437 | PRODUCT_NAME = "$(TARGET_NAME)";
438 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LiveKitReactNativeMeet.app/LiveKitReactNativeMeet";
439 | };
440 | name = Debug;
441 | };
442 | 00E356F71AD99517003FC87E /* Release */ = {
443 | isa = XCBuildConfiguration;
444 | baseConfigurationReference = 89C6BE57DB24E9ADA2F236DE /* Pods-LiveKitReactNativeMeet-LiveKitReactNativeMeetTests.release.xcconfig */;
445 | buildSettings = {
446 | BUNDLE_LOADER = "$(TEST_HOST)";
447 | COPY_PHASE_STRIP = NO;
448 | INFOPLIST_FILE = LiveKitReactNativeMeetTests/Info.plist;
449 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
450 | LD_RUNPATH_SEARCH_PATHS = (
451 | "$(inherited)",
452 | "@executable_path/Frameworks",
453 | "@loader_path/Frameworks",
454 | );
455 | OTHER_LDFLAGS = (
456 | "-ObjC",
457 | "-lc++",
458 | "$(inherited)",
459 | );
460 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
461 | PRODUCT_NAME = "$(TARGET_NAME)";
462 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/LiveKitReactNativeMeet.app/LiveKitReactNativeMeet";
463 | };
464 | name = Release;
465 | };
466 | 13B07F941A680F5B00A75B9A /* Debug */ = {
467 | isa = XCBuildConfiguration;
468 | baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-LiveKitReactNativeMeet.debug.xcconfig */;
469 | buildSettings = {
470 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
471 | CLANG_ENABLE_MODULES = YES;
472 | CURRENT_PROJECT_VERSION = 1;
473 | ENABLE_BITCODE = NO;
474 | INFOPLIST_FILE = LiveKitReactNativeMeet/Info.plist;
475 | LD_RUNPATH_SEARCH_PATHS = (
476 | "$(inherited)",
477 | "@executable_path/Frameworks",
478 | );
479 | MARKETING_VERSION = 1.0;
480 | OTHER_LDFLAGS = (
481 | "$(inherited)",
482 | "-ObjC",
483 | "-lc++",
484 | );
485 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
486 | PRODUCT_NAME = LiveKitReactNativeMeet;
487 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
488 | SWIFT_VERSION = 5.0;
489 | VERSIONING_SYSTEM = "apple-generic";
490 | };
491 | name = Debug;
492 | };
493 | 13B07F951A680F5B00A75B9A /* Release */ = {
494 | isa = XCBuildConfiguration;
495 | baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-LiveKitReactNativeMeet.release.xcconfig */;
496 | buildSettings = {
497 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
498 | CLANG_ENABLE_MODULES = YES;
499 | CURRENT_PROJECT_VERSION = 1;
500 | INFOPLIST_FILE = LiveKitReactNativeMeet/Info.plist;
501 | LD_RUNPATH_SEARCH_PATHS = (
502 | "$(inherited)",
503 | "@executable_path/Frameworks",
504 | );
505 | MARKETING_VERSION = 1.0;
506 | OTHER_LDFLAGS = (
507 | "$(inherited)",
508 | "-ObjC",
509 | "-lc++",
510 | );
511 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
512 | PRODUCT_NAME = LiveKitReactNativeMeet;
513 | SWIFT_VERSION = 5.0;
514 | VERSIONING_SYSTEM = "apple-generic";
515 | };
516 | name = Release;
517 | };
518 | 83CBBA201A601CBA00E9B192 /* Debug */ = {
519 | isa = XCBuildConfiguration;
520 | buildSettings = {
521 | ALWAYS_SEARCH_USER_PATHS = NO;
522 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
523 | CLANG_CXX_LANGUAGE_STANDARD = "c++20";
524 | CLANG_CXX_LIBRARY = "libc++";
525 | CLANG_ENABLE_MODULES = YES;
526 | CLANG_ENABLE_OBJC_ARC = YES;
527 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
528 | CLANG_WARN_BOOL_CONVERSION = YES;
529 | CLANG_WARN_COMMA = YES;
530 | CLANG_WARN_CONSTANT_CONVERSION = YES;
531 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
532 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
533 | CLANG_WARN_EMPTY_BODY = YES;
534 | CLANG_WARN_ENUM_CONVERSION = YES;
535 | CLANG_WARN_INFINITE_RECURSION = YES;
536 | CLANG_WARN_INT_CONVERSION = YES;
537 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
538 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
539 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
540 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
541 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
542 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
543 | CLANG_WARN_STRICT_PROTOTYPES = YES;
544 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
545 | CLANG_WARN_UNREACHABLE_CODE = YES;
546 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
547 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
548 | COPY_PHASE_STRIP = NO;
549 | ENABLE_STRICT_OBJC_MSGSEND = YES;
550 | ENABLE_TESTABILITY = YES;
551 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
552 | GCC_C_LANGUAGE_STANDARD = gnu99;
553 | GCC_DYNAMIC_NO_PIC = NO;
554 | GCC_NO_COMMON_BLOCKS = YES;
555 | GCC_OPTIMIZATION_LEVEL = 0;
556 | GCC_PREPROCESSOR_DEFINITIONS = (
557 | "DEBUG=1",
558 | "$(inherited)",
559 | );
560 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
561 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
562 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
563 | GCC_WARN_UNDECLARED_SELECTOR = YES;
564 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
565 | GCC_WARN_UNUSED_FUNCTION = YES;
566 | GCC_WARN_UNUSED_VARIABLE = YES;
567 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
568 | LD_RUNPATH_SEARCH_PATHS = (
569 | /usr/lib/swift,
570 | "$(inherited)",
571 | );
572 | LIBRARY_SEARCH_PATHS = (
573 | "\"$(SDKROOT)/usr/lib/swift\"",
574 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
575 | "\"$(inherited)\"",
576 | );
577 | MTL_ENABLE_DEBUG_INFO = YES;
578 | ONLY_ACTIVE_ARCH = YES;
579 | OTHER_CFLAGS = "$(inherited)";
580 | OTHER_CPLUSPLUSFLAGS = (
581 | "$(OTHER_CFLAGS)",
582 | "-DFOLLY_NO_CONFIG",
583 | "-DFOLLY_MOBILE=1",
584 | "-DFOLLY_USE_LIBCPP=1",
585 | "-DFOLLY_CFG_NO_COROUTINES=1",
586 | );
587 | OTHER_LDFLAGS = (
588 | "$(inherited)",
589 | " ",
590 | );
591 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
592 | SDKROOT = iphoneos;
593 | USE_HERMES = true;
594 | };
595 | name = Debug;
596 | };
597 | 83CBBA211A601CBA00E9B192 /* Release */ = {
598 | isa = XCBuildConfiguration;
599 | buildSettings = {
600 | ALWAYS_SEARCH_USER_PATHS = NO;
601 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
602 | CLANG_CXX_LANGUAGE_STANDARD = "c++20";
603 | CLANG_CXX_LIBRARY = "libc++";
604 | CLANG_ENABLE_MODULES = YES;
605 | CLANG_ENABLE_OBJC_ARC = YES;
606 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
607 | CLANG_WARN_BOOL_CONVERSION = YES;
608 | CLANG_WARN_COMMA = YES;
609 | CLANG_WARN_CONSTANT_CONVERSION = YES;
610 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
611 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
612 | CLANG_WARN_EMPTY_BODY = YES;
613 | CLANG_WARN_ENUM_CONVERSION = YES;
614 | CLANG_WARN_INFINITE_RECURSION = YES;
615 | CLANG_WARN_INT_CONVERSION = YES;
616 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
617 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
618 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
619 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
620 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
621 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
622 | CLANG_WARN_STRICT_PROTOTYPES = YES;
623 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
624 | CLANG_WARN_UNREACHABLE_CODE = YES;
625 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
626 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
627 | COPY_PHASE_STRIP = YES;
628 | ENABLE_NS_ASSERTIONS = NO;
629 | ENABLE_STRICT_OBJC_MSGSEND = YES;
630 | "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
631 | GCC_C_LANGUAGE_STANDARD = gnu99;
632 | GCC_NO_COMMON_BLOCKS = YES;
633 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
634 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
635 | GCC_WARN_UNDECLARED_SELECTOR = YES;
636 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
637 | GCC_WARN_UNUSED_FUNCTION = YES;
638 | GCC_WARN_UNUSED_VARIABLE = YES;
639 | IPHONEOS_DEPLOYMENT_TARGET = 13.4;
640 | LD_RUNPATH_SEARCH_PATHS = (
641 | /usr/lib/swift,
642 | "$(inherited)",
643 | );
644 | LIBRARY_SEARCH_PATHS = (
645 | "\"$(SDKROOT)/usr/lib/swift\"",
646 | "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
647 | "\"$(inherited)\"",
648 | );
649 | MTL_ENABLE_DEBUG_INFO = NO;
650 | OTHER_CFLAGS = "$(inherited)";
651 | OTHER_CPLUSPLUSFLAGS = (
652 | "$(OTHER_CFLAGS)",
653 | "-DFOLLY_NO_CONFIG",
654 | "-DFOLLY_MOBILE=1",
655 | "-DFOLLY_USE_LIBCPP=1",
656 | "-DFOLLY_CFG_NO_COROUTINES=1",
657 | );
658 | OTHER_LDFLAGS = (
659 | "$(inherited)",
660 | " ",
661 | );
662 | REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
663 | SDKROOT = iphoneos;
664 | USE_HERMES = true;
665 | VALIDATE_PRODUCT = YES;
666 | };
667 | name = Release;
668 | };
669 | /* End XCBuildConfiguration section */
670 |
671 | /* Begin XCConfigurationList section */
672 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LiveKitReactNativeMeetTests" */ = {
673 | isa = XCConfigurationList;
674 | buildConfigurations = (
675 | 00E356F61AD99517003FC87E /* Debug */,
676 | 00E356F71AD99517003FC87E /* Release */,
677 | );
678 | defaultConfigurationIsVisible = 0;
679 | defaultConfigurationName = Release;
680 | };
681 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "LiveKitReactNativeMeet" */ = {
682 | isa = XCConfigurationList;
683 | buildConfigurations = (
684 | 13B07F941A680F5B00A75B9A /* Debug */,
685 | 13B07F951A680F5B00A75B9A /* Release */,
686 | );
687 | defaultConfigurationIsVisible = 0;
688 | defaultConfigurationName = Release;
689 | };
690 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "LiveKitReactNativeMeet" */ = {
691 | isa = XCConfigurationList;
692 | buildConfigurations = (
693 | 83CBBA201A601CBA00E9B192 /* Debug */,
694 | 83CBBA211A601CBA00E9B192 /* Release */,
695 | );
696 | defaultConfigurationIsVisible = 0;
697 | defaultConfigurationName = Release;
698 | };
699 | /* End XCConfigurationList section */
700 | };
701 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
702 | }
703 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet.xcodeproj/xcshareddata/xcschemes/LiveKitReactNativeMeet.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
55 |
61 |
62 |
63 |
64 |
70 |
72 |
78 |
79 |
80 |
81 |
83 |
84 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : RCTAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/AppDelegate.mm:
--------------------------------------------------------------------------------
1 | #import "AppDelegate.h"
2 | #import "LivekitReactNative.h"
3 | #import
4 |
5 | @implementation AppDelegate
6 |
7 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
8 | {
9 | [LivekitReactNative setup];
10 | self.moduleName = @"LiveKitReactNativeMeet";
11 | // You can add your custom initial props in the dictionary below.
12 | // They will be passed down to the ViewController used by React Native.
13 | self.initialProps = @{};
14 |
15 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
16 | }
17 |
18 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
19 | {
20 | return [self getBundleURL];
21 | }
22 |
23 | - (NSURL *)getBundleURL
24 | {
25 | #if DEBUG
26 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
27 | #else
28 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
29 | #endif
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ios-marketing",
45 | "scale" : "1x",
46 | "size" : "1024x1024"
47 | }
48 | ],
49 | "info" : {
50 | "author" : "xcode",
51 | "version" : 1
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | LiveKitReactNativeMeet
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(MARKETING_VERSION)
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | $(CURRENT_PROJECT_VERSION)
25 | LSRequiresIPhoneOS
26 |
27 | NSAppTransportSecurity
28 |
29 |
30 | NSAllowsArbitraryLoads
31 |
32 | NSAllowsLocalNetworking
33 |
34 |
35 | NSLocationWhenInUseUsageDescription
36 |
37 | UILaunchStoryboardName
38 | LaunchScreen
39 | UIRequiredDeviceCapabilities
40 |
41 | armv7
42 |
43 | UISupportedInterfaceOrientations
44 |
45 | UIInterfaceOrientationPortrait
46 | UIInterfaceOrientationLandscapeLeft
47 | UIInterfaceOrientationLandscapeRight
48 |
49 | UIViewControllerBasedStatusBarAppearance
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/PrivacyInfo.xcprivacy:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSPrivacyCollectedDataTypes
6 |
7 |
8 | NSPrivacyAccessedAPITypes
9 |
10 |
11 | NSPrivacyAccessedAPIType
12 | NSPrivacyAccessedAPICategoryFileTimestamp
13 | NSPrivacyAccessedAPITypeReasons
14 |
15 | C617.1
16 |
17 |
18 |
19 | NSPrivacyAccessedAPIType
20 | NSPrivacyAccessedAPICategoryUserDefaults
21 | NSPrivacyAccessedAPITypeReasons
22 |
23 | CA92.1
24 |
25 |
26 |
27 | NSPrivacyAccessedAPIType
28 | NSPrivacyAccessedAPICategorySystemBootTime
29 | NSPrivacyAccessedAPITypeReasons
30 |
31 | 35F9.1
32 |
33 |
34 |
35 | NSPrivacyTracking
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeet/main.m:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char *argv[])
6 | {
7 | @autoreleasepool {
8 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeetTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ios/LiveKitReactNativeMeetTests/LiveKitReactNativeMeetTests.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | #import
5 | #import
6 |
7 | #define TIMEOUT_SECONDS 600
8 | #define TEXT_TO_LOOK_FOR @"Welcome to React"
9 |
10 | @interface LiveKitReactNativeMeetTests : XCTestCase
11 |
12 | @end
13 |
14 | @implementation LiveKitReactNativeMeetTests
15 |
16 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
17 | {
18 | if (test(view)) {
19 | return YES;
20 | }
21 | for (UIView *subview in [view subviews]) {
22 | if ([self findSubviewInView:subview matching:test]) {
23 | return YES;
24 | }
25 | }
26 | return NO;
27 | }
28 |
29 | - (void)testRendersWelcomeScreen
30 | {
31 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
32 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
33 | BOOL foundElement = NO;
34 |
35 | __block NSString *redboxError = nil;
36 | #ifdef DEBUG
37 | RCTSetLogFunction(
38 | ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
39 | if (level >= RCTLogLevelError) {
40 | redboxError = message;
41 | }
42 | });
43 | #endif
44 |
45 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
46 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
47 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
48 |
49 | foundElement = [self findSubviewInView:vc.view
50 | matching:^BOOL(UIView *view) {
51 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
52 | return YES;
53 | }
54 | return NO;
55 | }];
56 | }
57 |
58 | #ifdef DEBUG
59 | RCTSetLogFunction(RCTDefaultLogFunction);
60 | #endif
61 |
62 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
63 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
64 | }
65 |
66 | @end
67 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Resolve react_native_pods.rb with node to allow for hoisting
2 | require Pod::Executable.execute_command('node', ['-p',
3 | 'require.resolve(
4 | "react-native/scripts/react_native_pods.rb",
5 | {paths: [process.argv[1]]},
6 | )', __dir__]).strip
7 |
8 | platform :ios, min_ios_version_supported
9 | prepare_react_native_project!
10 |
11 | # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
12 | # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
13 | #
14 | # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
15 | # ```js
16 | # module.exports = {
17 | # dependencies: {
18 | # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
19 | # ```
20 | flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
21 |
22 | linkage = ENV['USE_FRAMEWORKS']
23 | if linkage != nil
24 | Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
25 | use_frameworks! :linkage => linkage.to_sym
26 | end
27 |
28 | target 'LiveKitReactNativeMeet' do
29 | config = use_native_modules!
30 |
31 | use_react_native!(
32 | :path => config[:reactNativePath],
33 | # Enables Flipper.
34 | #
35 | # Note that if you have use_frameworks! enabled, Flipper will not work and
36 | # you should disable the next line.
37 | :flipper_configuration => flipper_config,
38 | # An absolute path to your application root.
39 | :app_path => "#{Pod::Config.instance.installation_root}/.."
40 | )
41 |
42 | target 'LiveKitReactNativeMeetTests' do
43 | inherit! :complete
44 | # Pods for testing
45 | end
46 |
47 | post_install do |installer|
48 | # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202
49 | react_native_post_install(
50 | installer,
51 | config[:reactNativePath],
52 | :mac_catalyst_enabled => false
53 | )
54 | end
55 | end
56 |
--------------------------------------------------------------------------------
/ios/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - boost (1.83.0)
3 | - DoubleConversion (1.1.6)
4 | - FBLazyVector (0.73.8)
5 | - FBReactNativeSpec (0.73.8):
6 | - RCT-Folly (= 2022.05.16.00)
7 | - RCTRequired (= 0.73.8)
8 | - RCTTypeSafety (= 0.73.8)
9 | - React-Core (= 0.73.8)
10 | - React-jsi (= 0.73.8)
11 | - ReactCommon/turbomodule/core (= 0.73.8)
12 | - fmt (6.2.1)
13 | - glog (0.3.5)
14 | - hermes-engine (0.73.8):
15 | - hermes-engine/Pre-built (= 0.73.8)
16 | - hermes-engine/Pre-built (0.73.8)
17 | - libevent (2.1.12)
18 | - livekit-react-native (2.1.0):
19 | - livekit-react-native-webrtc
20 | - React-Core
21 | - livekit-react-native-webrtc (114.1.1):
22 | - React-Core
23 | - WebRTC-SDK (= 114.5735.08)
24 | - RCT-Folly (2022.05.16.00):
25 | - boost
26 | - DoubleConversion
27 | - fmt (~> 6.2.1)
28 | - glog
29 | - RCT-Folly/Default (= 2022.05.16.00)
30 | - RCT-Folly/Default (2022.05.16.00):
31 | - boost
32 | - DoubleConversion
33 | - fmt (~> 6.2.1)
34 | - glog
35 | - RCT-Folly/Fabric (2022.05.16.00):
36 | - boost
37 | - DoubleConversion
38 | - fmt (~> 6.2.1)
39 | - glog
40 | - RCT-Folly/Futures (2022.05.16.00):
41 | - boost
42 | - DoubleConversion
43 | - fmt (~> 6.2.1)
44 | - glog
45 | - libevent
46 | - RCTRequired (0.73.8)
47 | - RCTTypeSafety (0.73.8):
48 | - FBLazyVector (= 0.73.8)
49 | - RCTRequired (= 0.73.8)
50 | - React-Core (= 0.73.8)
51 | - React (0.73.8):
52 | - React-Core (= 0.73.8)
53 | - React-Core/DevSupport (= 0.73.8)
54 | - React-Core/RCTWebSocket (= 0.73.8)
55 | - React-RCTActionSheet (= 0.73.8)
56 | - React-RCTAnimation (= 0.73.8)
57 | - React-RCTBlob (= 0.73.8)
58 | - React-RCTImage (= 0.73.8)
59 | - React-RCTLinking (= 0.73.8)
60 | - React-RCTNetwork (= 0.73.8)
61 | - React-RCTSettings (= 0.73.8)
62 | - React-RCTText (= 0.73.8)
63 | - React-RCTVibration (= 0.73.8)
64 | - React-callinvoker (0.73.8)
65 | - React-Codegen (0.73.8):
66 | - DoubleConversion
67 | - FBReactNativeSpec
68 | - glog
69 | - hermes-engine
70 | - RCT-Folly
71 | - RCTRequired
72 | - RCTTypeSafety
73 | - React-Core
74 | - React-jsi
75 | - React-jsiexecutor
76 | - React-NativeModulesApple
77 | - React-rncore
78 | - ReactCommon/turbomodule/bridging
79 | - ReactCommon/turbomodule/core
80 | - React-Core (0.73.8):
81 | - glog
82 | - hermes-engine
83 | - RCT-Folly (= 2022.05.16.00)
84 | - React-Core/Default (= 0.73.8)
85 | - React-cxxreact
86 | - React-hermes
87 | - React-jsi
88 | - React-jsiexecutor
89 | - React-perflogger
90 | - React-runtimescheduler
91 | - React-utils
92 | - SocketRocket (= 0.6.1)
93 | - Yoga
94 | - React-Core/CoreModulesHeaders (0.73.8):
95 | - glog
96 | - hermes-engine
97 | - RCT-Folly (= 2022.05.16.00)
98 | - React-Core/Default
99 | - React-cxxreact
100 | - React-hermes
101 | - React-jsi
102 | - React-jsiexecutor
103 | - React-perflogger
104 | - React-runtimescheduler
105 | - React-utils
106 | - SocketRocket (= 0.6.1)
107 | - Yoga
108 | - React-Core/Default (0.73.8):
109 | - glog
110 | - hermes-engine
111 | - RCT-Folly (= 2022.05.16.00)
112 | - React-cxxreact
113 | - React-hermes
114 | - React-jsi
115 | - React-jsiexecutor
116 | - React-perflogger
117 | - React-runtimescheduler
118 | - React-utils
119 | - SocketRocket (= 0.6.1)
120 | - Yoga
121 | - React-Core/DevSupport (0.73.8):
122 | - glog
123 | - hermes-engine
124 | - RCT-Folly (= 2022.05.16.00)
125 | - React-Core/Default (= 0.73.8)
126 | - React-Core/RCTWebSocket (= 0.73.8)
127 | - React-cxxreact
128 | - React-hermes
129 | - React-jsi
130 | - React-jsiexecutor
131 | - React-jsinspector (= 0.73.8)
132 | - React-perflogger
133 | - React-runtimescheduler
134 | - React-utils
135 | - SocketRocket (= 0.6.1)
136 | - Yoga
137 | - React-Core/RCTActionSheetHeaders (0.73.8):
138 | - glog
139 | - hermes-engine
140 | - RCT-Folly (= 2022.05.16.00)
141 | - React-Core/Default
142 | - React-cxxreact
143 | - React-hermes
144 | - React-jsi
145 | - React-jsiexecutor
146 | - React-perflogger
147 | - React-runtimescheduler
148 | - React-utils
149 | - SocketRocket (= 0.6.1)
150 | - Yoga
151 | - React-Core/RCTAnimationHeaders (0.73.8):
152 | - glog
153 | - hermes-engine
154 | - RCT-Folly (= 2022.05.16.00)
155 | - React-Core/Default
156 | - React-cxxreact
157 | - React-hermes
158 | - React-jsi
159 | - React-jsiexecutor
160 | - React-perflogger
161 | - React-runtimescheduler
162 | - React-utils
163 | - SocketRocket (= 0.6.1)
164 | - Yoga
165 | - React-Core/RCTBlobHeaders (0.73.8):
166 | - glog
167 | - hermes-engine
168 | - RCT-Folly (= 2022.05.16.00)
169 | - React-Core/Default
170 | - React-cxxreact
171 | - React-hermes
172 | - React-jsi
173 | - React-jsiexecutor
174 | - React-perflogger
175 | - React-runtimescheduler
176 | - React-utils
177 | - SocketRocket (= 0.6.1)
178 | - Yoga
179 | - React-Core/RCTImageHeaders (0.73.8):
180 | - glog
181 | - hermes-engine
182 | - RCT-Folly (= 2022.05.16.00)
183 | - React-Core/Default
184 | - React-cxxreact
185 | - React-hermes
186 | - React-jsi
187 | - React-jsiexecutor
188 | - React-perflogger
189 | - React-runtimescheduler
190 | - React-utils
191 | - SocketRocket (= 0.6.1)
192 | - Yoga
193 | - React-Core/RCTLinkingHeaders (0.73.8):
194 | - glog
195 | - hermes-engine
196 | - RCT-Folly (= 2022.05.16.00)
197 | - React-Core/Default
198 | - React-cxxreact
199 | - React-hermes
200 | - React-jsi
201 | - React-jsiexecutor
202 | - React-perflogger
203 | - React-runtimescheduler
204 | - React-utils
205 | - SocketRocket (= 0.6.1)
206 | - Yoga
207 | - React-Core/RCTNetworkHeaders (0.73.8):
208 | - glog
209 | - hermes-engine
210 | - RCT-Folly (= 2022.05.16.00)
211 | - React-Core/Default
212 | - React-cxxreact
213 | - React-hermes
214 | - React-jsi
215 | - React-jsiexecutor
216 | - React-perflogger
217 | - React-runtimescheduler
218 | - React-utils
219 | - SocketRocket (= 0.6.1)
220 | - Yoga
221 | - React-Core/RCTSettingsHeaders (0.73.8):
222 | - glog
223 | - hermes-engine
224 | - RCT-Folly (= 2022.05.16.00)
225 | - React-Core/Default
226 | - React-cxxreact
227 | - React-hermes
228 | - React-jsi
229 | - React-jsiexecutor
230 | - React-perflogger
231 | - React-runtimescheduler
232 | - React-utils
233 | - SocketRocket (= 0.6.1)
234 | - Yoga
235 | - React-Core/RCTTextHeaders (0.73.8):
236 | - glog
237 | - hermes-engine
238 | - RCT-Folly (= 2022.05.16.00)
239 | - React-Core/Default
240 | - React-cxxreact
241 | - React-hermes
242 | - React-jsi
243 | - React-jsiexecutor
244 | - React-perflogger
245 | - React-runtimescheduler
246 | - React-utils
247 | - SocketRocket (= 0.6.1)
248 | - Yoga
249 | - React-Core/RCTVibrationHeaders (0.73.8):
250 | - glog
251 | - hermes-engine
252 | - RCT-Folly (= 2022.05.16.00)
253 | - React-Core/Default
254 | - React-cxxreact
255 | - React-hermes
256 | - React-jsi
257 | - React-jsiexecutor
258 | - React-perflogger
259 | - React-runtimescheduler
260 | - React-utils
261 | - SocketRocket (= 0.6.1)
262 | - Yoga
263 | - React-Core/RCTWebSocket (0.73.8):
264 | - glog
265 | - hermes-engine
266 | - RCT-Folly (= 2022.05.16.00)
267 | - React-Core/Default (= 0.73.8)
268 | - React-cxxreact
269 | - React-hermes
270 | - React-jsi
271 | - React-jsiexecutor
272 | - React-perflogger
273 | - React-runtimescheduler
274 | - React-utils
275 | - SocketRocket (= 0.6.1)
276 | - Yoga
277 | - React-CoreModules (0.73.8):
278 | - RCT-Folly (= 2022.05.16.00)
279 | - RCTTypeSafety (= 0.73.8)
280 | - React-Codegen
281 | - React-Core/CoreModulesHeaders (= 0.73.8)
282 | - React-jsi (= 0.73.8)
283 | - React-NativeModulesApple
284 | - React-RCTBlob
285 | - React-RCTImage (= 0.73.8)
286 | - ReactCommon
287 | - SocketRocket (= 0.6.1)
288 | - React-cxxreact (0.73.8):
289 | - boost (= 1.83.0)
290 | - DoubleConversion
291 | - fmt (~> 6.2.1)
292 | - glog
293 | - hermes-engine
294 | - RCT-Folly (= 2022.05.16.00)
295 | - React-callinvoker (= 0.73.8)
296 | - React-debug (= 0.73.8)
297 | - React-jsi (= 0.73.8)
298 | - React-jsinspector (= 0.73.8)
299 | - React-logger (= 0.73.8)
300 | - React-perflogger (= 0.73.8)
301 | - React-runtimeexecutor (= 0.73.8)
302 | - React-debug (0.73.8)
303 | - React-Fabric (0.73.8):
304 | - DoubleConversion
305 | - fmt (~> 6.2.1)
306 | - glog
307 | - hermes-engine
308 | - RCT-Folly/Fabric (= 2022.05.16.00)
309 | - RCTRequired
310 | - RCTTypeSafety
311 | - React-Core
312 | - React-cxxreact
313 | - React-debug
314 | - React-Fabric/animations (= 0.73.8)
315 | - React-Fabric/attributedstring (= 0.73.8)
316 | - React-Fabric/componentregistry (= 0.73.8)
317 | - React-Fabric/componentregistrynative (= 0.73.8)
318 | - React-Fabric/components (= 0.73.8)
319 | - React-Fabric/core (= 0.73.8)
320 | - React-Fabric/imagemanager (= 0.73.8)
321 | - React-Fabric/leakchecker (= 0.73.8)
322 | - React-Fabric/mounting (= 0.73.8)
323 | - React-Fabric/scheduler (= 0.73.8)
324 | - React-Fabric/telemetry (= 0.73.8)
325 | - React-Fabric/templateprocessor (= 0.73.8)
326 | - React-Fabric/textlayoutmanager (= 0.73.8)
327 | - React-Fabric/uimanager (= 0.73.8)
328 | - React-graphics
329 | - React-jsi
330 | - React-jsiexecutor
331 | - React-logger
332 | - React-rendererdebug
333 | - React-runtimescheduler
334 | - React-utils
335 | - ReactCommon/turbomodule/core
336 | - React-Fabric/animations (0.73.8):
337 | - DoubleConversion
338 | - fmt (~> 6.2.1)
339 | - glog
340 | - hermes-engine
341 | - RCT-Folly/Fabric (= 2022.05.16.00)
342 | - RCTRequired
343 | - RCTTypeSafety
344 | - React-Core
345 | - React-cxxreact
346 | - React-debug
347 | - React-graphics
348 | - React-jsi
349 | - React-jsiexecutor
350 | - React-logger
351 | - React-rendererdebug
352 | - React-runtimescheduler
353 | - React-utils
354 | - ReactCommon/turbomodule/core
355 | - React-Fabric/attributedstring (0.73.8):
356 | - DoubleConversion
357 | - fmt (~> 6.2.1)
358 | - glog
359 | - hermes-engine
360 | - RCT-Folly/Fabric (= 2022.05.16.00)
361 | - RCTRequired
362 | - RCTTypeSafety
363 | - React-Core
364 | - React-cxxreact
365 | - React-debug
366 | - React-graphics
367 | - React-jsi
368 | - React-jsiexecutor
369 | - React-logger
370 | - React-rendererdebug
371 | - React-runtimescheduler
372 | - React-utils
373 | - ReactCommon/turbomodule/core
374 | - React-Fabric/componentregistry (0.73.8):
375 | - DoubleConversion
376 | - fmt (~> 6.2.1)
377 | - glog
378 | - hermes-engine
379 | - RCT-Folly/Fabric (= 2022.05.16.00)
380 | - RCTRequired
381 | - RCTTypeSafety
382 | - React-Core
383 | - React-cxxreact
384 | - React-debug
385 | - React-graphics
386 | - React-jsi
387 | - React-jsiexecutor
388 | - React-logger
389 | - React-rendererdebug
390 | - React-runtimescheduler
391 | - React-utils
392 | - ReactCommon/turbomodule/core
393 | - React-Fabric/componentregistrynative (0.73.8):
394 | - DoubleConversion
395 | - fmt (~> 6.2.1)
396 | - glog
397 | - hermes-engine
398 | - RCT-Folly/Fabric (= 2022.05.16.00)
399 | - RCTRequired
400 | - RCTTypeSafety
401 | - React-Core
402 | - React-cxxreact
403 | - React-debug
404 | - React-graphics
405 | - React-jsi
406 | - React-jsiexecutor
407 | - React-logger
408 | - React-rendererdebug
409 | - React-runtimescheduler
410 | - React-utils
411 | - ReactCommon/turbomodule/core
412 | - React-Fabric/components (0.73.8):
413 | - DoubleConversion
414 | - fmt (~> 6.2.1)
415 | - glog
416 | - hermes-engine
417 | - RCT-Folly/Fabric (= 2022.05.16.00)
418 | - RCTRequired
419 | - RCTTypeSafety
420 | - React-Core
421 | - React-cxxreact
422 | - React-debug
423 | - React-Fabric/components/inputaccessory (= 0.73.8)
424 | - React-Fabric/components/legacyviewmanagerinterop (= 0.73.8)
425 | - React-Fabric/components/modal (= 0.73.8)
426 | - React-Fabric/components/rncore (= 0.73.8)
427 | - React-Fabric/components/root (= 0.73.8)
428 | - React-Fabric/components/safeareaview (= 0.73.8)
429 | - React-Fabric/components/scrollview (= 0.73.8)
430 | - React-Fabric/components/text (= 0.73.8)
431 | - React-Fabric/components/textinput (= 0.73.8)
432 | - React-Fabric/components/unimplementedview (= 0.73.8)
433 | - React-Fabric/components/view (= 0.73.8)
434 | - React-graphics
435 | - React-jsi
436 | - React-jsiexecutor
437 | - React-logger
438 | - React-rendererdebug
439 | - React-runtimescheduler
440 | - React-utils
441 | - ReactCommon/turbomodule/core
442 | - React-Fabric/components/inputaccessory (0.73.8):
443 | - DoubleConversion
444 | - fmt (~> 6.2.1)
445 | - glog
446 | - hermes-engine
447 | - RCT-Folly/Fabric (= 2022.05.16.00)
448 | - RCTRequired
449 | - RCTTypeSafety
450 | - React-Core
451 | - React-cxxreact
452 | - React-debug
453 | - React-graphics
454 | - React-jsi
455 | - React-jsiexecutor
456 | - React-logger
457 | - React-rendererdebug
458 | - React-runtimescheduler
459 | - React-utils
460 | - ReactCommon/turbomodule/core
461 | - React-Fabric/components/legacyviewmanagerinterop (0.73.8):
462 | - DoubleConversion
463 | - fmt (~> 6.2.1)
464 | - glog
465 | - hermes-engine
466 | - RCT-Folly/Fabric (= 2022.05.16.00)
467 | - RCTRequired
468 | - RCTTypeSafety
469 | - React-Core
470 | - React-cxxreact
471 | - React-debug
472 | - React-graphics
473 | - React-jsi
474 | - React-jsiexecutor
475 | - React-logger
476 | - React-rendererdebug
477 | - React-runtimescheduler
478 | - React-utils
479 | - ReactCommon/turbomodule/core
480 | - React-Fabric/components/modal (0.73.8):
481 | - DoubleConversion
482 | - fmt (~> 6.2.1)
483 | - glog
484 | - hermes-engine
485 | - RCT-Folly/Fabric (= 2022.05.16.00)
486 | - RCTRequired
487 | - RCTTypeSafety
488 | - React-Core
489 | - React-cxxreact
490 | - React-debug
491 | - React-graphics
492 | - React-jsi
493 | - React-jsiexecutor
494 | - React-logger
495 | - React-rendererdebug
496 | - React-runtimescheduler
497 | - React-utils
498 | - ReactCommon/turbomodule/core
499 | - React-Fabric/components/rncore (0.73.8):
500 | - DoubleConversion
501 | - fmt (~> 6.2.1)
502 | - glog
503 | - hermes-engine
504 | - RCT-Folly/Fabric (= 2022.05.16.00)
505 | - RCTRequired
506 | - RCTTypeSafety
507 | - React-Core
508 | - React-cxxreact
509 | - React-debug
510 | - React-graphics
511 | - React-jsi
512 | - React-jsiexecutor
513 | - React-logger
514 | - React-rendererdebug
515 | - React-runtimescheduler
516 | - React-utils
517 | - ReactCommon/turbomodule/core
518 | - React-Fabric/components/root (0.73.8):
519 | - DoubleConversion
520 | - fmt (~> 6.2.1)
521 | - glog
522 | - hermes-engine
523 | - RCT-Folly/Fabric (= 2022.05.16.00)
524 | - RCTRequired
525 | - RCTTypeSafety
526 | - React-Core
527 | - React-cxxreact
528 | - React-debug
529 | - React-graphics
530 | - React-jsi
531 | - React-jsiexecutor
532 | - React-logger
533 | - React-rendererdebug
534 | - React-runtimescheduler
535 | - React-utils
536 | - ReactCommon/turbomodule/core
537 | - React-Fabric/components/safeareaview (0.73.8):
538 | - DoubleConversion
539 | - fmt (~> 6.2.1)
540 | - glog
541 | - hermes-engine
542 | - RCT-Folly/Fabric (= 2022.05.16.00)
543 | - RCTRequired
544 | - RCTTypeSafety
545 | - React-Core
546 | - React-cxxreact
547 | - React-debug
548 | - React-graphics
549 | - React-jsi
550 | - React-jsiexecutor
551 | - React-logger
552 | - React-rendererdebug
553 | - React-runtimescheduler
554 | - React-utils
555 | - ReactCommon/turbomodule/core
556 | - React-Fabric/components/scrollview (0.73.8):
557 | - DoubleConversion
558 | - fmt (~> 6.2.1)
559 | - glog
560 | - hermes-engine
561 | - RCT-Folly/Fabric (= 2022.05.16.00)
562 | - RCTRequired
563 | - RCTTypeSafety
564 | - React-Core
565 | - React-cxxreact
566 | - React-debug
567 | - React-graphics
568 | - React-jsi
569 | - React-jsiexecutor
570 | - React-logger
571 | - React-rendererdebug
572 | - React-runtimescheduler
573 | - React-utils
574 | - ReactCommon/turbomodule/core
575 | - React-Fabric/components/text (0.73.8):
576 | - DoubleConversion
577 | - fmt (~> 6.2.1)
578 | - glog
579 | - hermes-engine
580 | - RCT-Folly/Fabric (= 2022.05.16.00)
581 | - RCTRequired
582 | - RCTTypeSafety
583 | - React-Core
584 | - React-cxxreact
585 | - React-debug
586 | - React-graphics
587 | - React-jsi
588 | - React-jsiexecutor
589 | - React-logger
590 | - React-rendererdebug
591 | - React-runtimescheduler
592 | - React-utils
593 | - ReactCommon/turbomodule/core
594 | - React-Fabric/components/textinput (0.73.8):
595 | - DoubleConversion
596 | - fmt (~> 6.2.1)
597 | - glog
598 | - hermes-engine
599 | - RCT-Folly/Fabric (= 2022.05.16.00)
600 | - RCTRequired
601 | - RCTTypeSafety
602 | - React-Core
603 | - React-cxxreact
604 | - React-debug
605 | - React-graphics
606 | - React-jsi
607 | - React-jsiexecutor
608 | - React-logger
609 | - React-rendererdebug
610 | - React-runtimescheduler
611 | - React-utils
612 | - ReactCommon/turbomodule/core
613 | - React-Fabric/components/unimplementedview (0.73.8):
614 | - DoubleConversion
615 | - fmt (~> 6.2.1)
616 | - glog
617 | - hermes-engine
618 | - RCT-Folly/Fabric (= 2022.05.16.00)
619 | - RCTRequired
620 | - RCTTypeSafety
621 | - React-Core
622 | - React-cxxreact
623 | - React-debug
624 | - React-graphics
625 | - React-jsi
626 | - React-jsiexecutor
627 | - React-logger
628 | - React-rendererdebug
629 | - React-runtimescheduler
630 | - React-utils
631 | - ReactCommon/turbomodule/core
632 | - React-Fabric/components/view (0.73.8):
633 | - DoubleConversion
634 | - fmt (~> 6.2.1)
635 | - glog
636 | - hermes-engine
637 | - RCT-Folly/Fabric (= 2022.05.16.00)
638 | - RCTRequired
639 | - RCTTypeSafety
640 | - React-Core
641 | - React-cxxreact
642 | - React-debug
643 | - React-graphics
644 | - React-jsi
645 | - React-jsiexecutor
646 | - React-logger
647 | - React-rendererdebug
648 | - React-runtimescheduler
649 | - React-utils
650 | - ReactCommon/turbomodule/core
651 | - Yoga
652 | - React-Fabric/core (0.73.8):
653 | - DoubleConversion
654 | - fmt (~> 6.2.1)
655 | - glog
656 | - hermes-engine
657 | - RCT-Folly/Fabric (= 2022.05.16.00)
658 | - RCTRequired
659 | - RCTTypeSafety
660 | - React-Core
661 | - React-cxxreact
662 | - React-debug
663 | - React-graphics
664 | - React-jsi
665 | - React-jsiexecutor
666 | - React-logger
667 | - React-rendererdebug
668 | - React-runtimescheduler
669 | - React-utils
670 | - ReactCommon/turbomodule/core
671 | - React-Fabric/imagemanager (0.73.8):
672 | - DoubleConversion
673 | - fmt (~> 6.2.1)
674 | - glog
675 | - hermes-engine
676 | - RCT-Folly/Fabric (= 2022.05.16.00)
677 | - RCTRequired
678 | - RCTTypeSafety
679 | - React-Core
680 | - React-cxxreact
681 | - React-debug
682 | - React-graphics
683 | - React-jsi
684 | - React-jsiexecutor
685 | - React-logger
686 | - React-rendererdebug
687 | - React-runtimescheduler
688 | - React-utils
689 | - ReactCommon/turbomodule/core
690 | - React-Fabric/leakchecker (0.73.8):
691 | - DoubleConversion
692 | - fmt (~> 6.2.1)
693 | - glog
694 | - hermes-engine
695 | - RCT-Folly/Fabric (= 2022.05.16.00)
696 | - RCTRequired
697 | - RCTTypeSafety
698 | - React-Core
699 | - React-cxxreact
700 | - React-debug
701 | - React-graphics
702 | - React-jsi
703 | - React-jsiexecutor
704 | - React-logger
705 | - React-rendererdebug
706 | - React-runtimescheduler
707 | - React-utils
708 | - ReactCommon/turbomodule/core
709 | - React-Fabric/mounting (0.73.8):
710 | - DoubleConversion
711 | - fmt (~> 6.2.1)
712 | - glog
713 | - hermes-engine
714 | - RCT-Folly/Fabric (= 2022.05.16.00)
715 | - RCTRequired
716 | - RCTTypeSafety
717 | - React-Core
718 | - React-cxxreact
719 | - React-debug
720 | - React-graphics
721 | - React-jsi
722 | - React-jsiexecutor
723 | - React-logger
724 | - React-rendererdebug
725 | - React-runtimescheduler
726 | - React-utils
727 | - ReactCommon/turbomodule/core
728 | - React-Fabric/scheduler (0.73.8):
729 | - DoubleConversion
730 | - fmt (~> 6.2.1)
731 | - glog
732 | - hermes-engine
733 | - RCT-Folly/Fabric (= 2022.05.16.00)
734 | - RCTRequired
735 | - RCTTypeSafety
736 | - React-Core
737 | - React-cxxreact
738 | - React-debug
739 | - React-graphics
740 | - React-jsi
741 | - React-jsiexecutor
742 | - React-logger
743 | - React-rendererdebug
744 | - React-runtimescheduler
745 | - React-utils
746 | - ReactCommon/turbomodule/core
747 | - React-Fabric/telemetry (0.73.8):
748 | - DoubleConversion
749 | - fmt (~> 6.2.1)
750 | - glog
751 | - hermes-engine
752 | - RCT-Folly/Fabric (= 2022.05.16.00)
753 | - RCTRequired
754 | - RCTTypeSafety
755 | - React-Core
756 | - React-cxxreact
757 | - React-debug
758 | - React-graphics
759 | - React-jsi
760 | - React-jsiexecutor
761 | - React-logger
762 | - React-rendererdebug
763 | - React-runtimescheduler
764 | - React-utils
765 | - ReactCommon/turbomodule/core
766 | - React-Fabric/templateprocessor (0.73.8):
767 | - DoubleConversion
768 | - fmt (~> 6.2.1)
769 | - glog
770 | - hermes-engine
771 | - RCT-Folly/Fabric (= 2022.05.16.00)
772 | - RCTRequired
773 | - RCTTypeSafety
774 | - React-Core
775 | - React-cxxreact
776 | - React-debug
777 | - React-graphics
778 | - React-jsi
779 | - React-jsiexecutor
780 | - React-logger
781 | - React-rendererdebug
782 | - React-runtimescheduler
783 | - React-utils
784 | - ReactCommon/turbomodule/core
785 | - React-Fabric/textlayoutmanager (0.73.8):
786 | - DoubleConversion
787 | - fmt (~> 6.2.1)
788 | - glog
789 | - hermes-engine
790 | - RCT-Folly/Fabric (= 2022.05.16.00)
791 | - RCTRequired
792 | - RCTTypeSafety
793 | - React-Core
794 | - React-cxxreact
795 | - React-debug
796 | - React-Fabric/uimanager
797 | - React-graphics
798 | - React-jsi
799 | - React-jsiexecutor
800 | - React-logger
801 | - React-rendererdebug
802 | - React-runtimescheduler
803 | - React-utils
804 | - ReactCommon/turbomodule/core
805 | - React-Fabric/uimanager (0.73.8):
806 | - DoubleConversion
807 | - fmt (~> 6.2.1)
808 | - glog
809 | - hermes-engine
810 | - RCT-Folly/Fabric (= 2022.05.16.00)
811 | - RCTRequired
812 | - RCTTypeSafety
813 | - React-Core
814 | - React-cxxreact
815 | - React-debug
816 | - React-graphics
817 | - React-jsi
818 | - React-jsiexecutor
819 | - React-logger
820 | - React-rendererdebug
821 | - React-runtimescheduler
822 | - React-utils
823 | - ReactCommon/turbomodule/core
824 | - React-FabricImage (0.73.8):
825 | - DoubleConversion
826 | - fmt (~> 6.2.1)
827 | - glog
828 | - hermes-engine
829 | - RCT-Folly/Fabric (= 2022.05.16.00)
830 | - RCTRequired (= 0.73.8)
831 | - RCTTypeSafety (= 0.73.8)
832 | - React-Fabric
833 | - React-graphics
834 | - React-ImageManager
835 | - React-jsi
836 | - React-jsiexecutor (= 0.73.8)
837 | - React-logger
838 | - React-rendererdebug
839 | - React-utils
840 | - ReactCommon
841 | - Yoga
842 | - React-graphics (0.73.8):
843 | - glog
844 | - RCT-Folly/Fabric (= 2022.05.16.00)
845 | - React-Core/Default (= 0.73.8)
846 | - React-utils
847 | - React-hermes (0.73.8):
848 | - DoubleConversion
849 | - fmt (~> 6.2.1)
850 | - glog
851 | - hermes-engine
852 | - RCT-Folly (= 2022.05.16.00)
853 | - RCT-Folly/Futures (= 2022.05.16.00)
854 | - React-cxxreact (= 0.73.8)
855 | - React-jsi
856 | - React-jsiexecutor (= 0.73.8)
857 | - React-jsinspector (= 0.73.8)
858 | - React-perflogger (= 0.73.8)
859 | - React-ImageManager (0.73.8):
860 | - glog
861 | - RCT-Folly/Fabric
862 | - React-Core/Default
863 | - React-debug
864 | - React-Fabric
865 | - React-graphics
866 | - React-rendererdebug
867 | - React-utils
868 | - React-jserrorhandler (0.73.8):
869 | - RCT-Folly/Fabric (= 2022.05.16.00)
870 | - React-debug
871 | - React-jsi
872 | - React-Mapbuffer
873 | - React-jsi (0.73.8):
874 | - boost (= 1.83.0)
875 | - DoubleConversion
876 | - fmt (~> 6.2.1)
877 | - glog
878 | - hermes-engine
879 | - RCT-Folly (= 2022.05.16.00)
880 | - React-jsiexecutor (0.73.8):
881 | - DoubleConversion
882 | - fmt (~> 6.2.1)
883 | - glog
884 | - hermes-engine
885 | - RCT-Folly (= 2022.05.16.00)
886 | - React-cxxreact (= 0.73.8)
887 | - React-jsi (= 0.73.8)
888 | - React-perflogger (= 0.73.8)
889 | - React-jsinspector (0.73.8)
890 | - React-logger (0.73.8):
891 | - glog
892 | - React-Mapbuffer (0.73.8):
893 | - glog
894 | - React-debug
895 | - react-native-safe-area-context (4.10.1):
896 | - React-Core
897 | - React-nativeconfig (0.73.8)
898 | - React-NativeModulesApple (0.73.8):
899 | - glog
900 | - hermes-engine
901 | - React-callinvoker
902 | - React-Core
903 | - React-cxxreact
904 | - React-jsi
905 | - React-runtimeexecutor
906 | - ReactCommon/turbomodule/bridging
907 | - ReactCommon/turbomodule/core
908 | - React-perflogger (0.73.8)
909 | - React-RCTActionSheet (0.73.8):
910 | - React-Core/RCTActionSheetHeaders (= 0.73.8)
911 | - React-RCTAnimation (0.73.8):
912 | - RCT-Folly (= 2022.05.16.00)
913 | - RCTTypeSafety
914 | - React-Codegen
915 | - React-Core/RCTAnimationHeaders
916 | - React-jsi
917 | - React-NativeModulesApple
918 | - ReactCommon
919 | - React-RCTAppDelegate (0.73.8):
920 | - RCT-Folly
921 | - RCTRequired
922 | - RCTTypeSafety
923 | - React-Core
924 | - React-CoreModules
925 | - React-hermes
926 | - React-nativeconfig
927 | - React-NativeModulesApple
928 | - React-RCTFabric
929 | - React-RCTImage
930 | - React-RCTNetwork
931 | - React-runtimescheduler
932 | - ReactCommon
933 | - React-RCTBlob (0.73.8):
934 | - hermes-engine
935 | - RCT-Folly (= 2022.05.16.00)
936 | - React-Codegen
937 | - React-Core/RCTBlobHeaders
938 | - React-Core/RCTWebSocket
939 | - React-jsi
940 | - React-NativeModulesApple
941 | - React-RCTNetwork
942 | - ReactCommon
943 | - React-RCTFabric (0.73.8):
944 | - glog
945 | - hermes-engine
946 | - RCT-Folly/Fabric (= 2022.05.16.00)
947 | - React-Core
948 | - React-debug
949 | - React-Fabric
950 | - React-FabricImage
951 | - React-graphics
952 | - React-ImageManager
953 | - React-jsi
954 | - React-nativeconfig
955 | - React-RCTImage
956 | - React-RCTText
957 | - React-rendererdebug
958 | - React-runtimescheduler
959 | - React-utils
960 | - Yoga
961 | - React-RCTImage (0.73.8):
962 | - RCT-Folly (= 2022.05.16.00)
963 | - RCTTypeSafety
964 | - React-Codegen
965 | - React-Core/RCTImageHeaders
966 | - React-jsi
967 | - React-NativeModulesApple
968 | - React-RCTNetwork
969 | - ReactCommon
970 | - React-RCTLinking (0.73.8):
971 | - React-Codegen
972 | - React-Core/RCTLinkingHeaders (= 0.73.8)
973 | - React-jsi (= 0.73.8)
974 | - React-NativeModulesApple
975 | - ReactCommon
976 | - ReactCommon/turbomodule/core (= 0.73.8)
977 | - React-RCTNetwork (0.73.8):
978 | - RCT-Folly (= 2022.05.16.00)
979 | - RCTTypeSafety
980 | - React-Codegen
981 | - React-Core/RCTNetworkHeaders
982 | - React-jsi
983 | - React-NativeModulesApple
984 | - ReactCommon
985 | - React-RCTSettings (0.73.8):
986 | - RCT-Folly (= 2022.05.16.00)
987 | - RCTTypeSafety
988 | - React-Codegen
989 | - React-Core/RCTSettingsHeaders
990 | - React-jsi
991 | - React-NativeModulesApple
992 | - ReactCommon
993 | - React-RCTText (0.73.8):
994 | - React-Core/RCTTextHeaders (= 0.73.8)
995 | - Yoga
996 | - React-RCTVibration (0.73.8):
997 | - RCT-Folly (= 2022.05.16.00)
998 | - React-Codegen
999 | - React-Core/RCTVibrationHeaders
1000 | - React-jsi
1001 | - React-NativeModulesApple
1002 | - ReactCommon
1003 | - React-rendererdebug (0.73.8):
1004 | - DoubleConversion
1005 | - fmt (~> 6.2.1)
1006 | - RCT-Folly (= 2022.05.16.00)
1007 | - React-debug
1008 | - React-rncore (0.73.8)
1009 | - React-runtimeexecutor (0.73.8):
1010 | - React-jsi (= 0.73.8)
1011 | - React-runtimescheduler (0.73.8):
1012 | - glog
1013 | - hermes-engine
1014 | - RCT-Folly (= 2022.05.16.00)
1015 | - React-callinvoker
1016 | - React-cxxreact
1017 | - React-debug
1018 | - React-jsi
1019 | - React-rendererdebug
1020 | - React-runtimeexecutor
1021 | - React-utils
1022 | - React-utils (0.73.8):
1023 | - glog
1024 | - RCT-Folly (= 2022.05.16.00)
1025 | - React-debug
1026 | - ReactCommon (0.73.8):
1027 | - React-logger (= 0.73.8)
1028 | - ReactCommon/turbomodule (= 0.73.8)
1029 | - ReactCommon/turbomodule (0.73.8):
1030 | - DoubleConversion
1031 | - fmt (~> 6.2.1)
1032 | - glog
1033 | - hermes-engine
1034 | - RCT-Folly (= 2022.05.16.00)
1035 | - React-callinvoker (= 0.73.8)
1036 | - React-cxxreact (= 0.73.8)
1037 | - React-jsi (= 0.73.8)
1038 | - React-logger (= 0.73.8)
1039 | - React-perflogger (= 0.73.8)
1040 | - ReactCommon/turbomodule/bridging (= 0.73.8)
1041 | - ReactCommon/turbomodule/core (= 0.73.8)
1042 | - ReactCommon/turbomodule/bridging (0.73.8):
1043 | - DoubleConversion
1044 | - fmt (~> 6.2.1)
1045 | - glog
1046 | - hermes-engine
1047 | - RCT-Folly (= 2022.05.16.00)
1048 | - React-callinvoker (= 0.73.8)
1049 | - React-cxxreact (= 0.73.8)
1050 | - React-jsi (= 0.73.8)
1051 | - React-logger (= 0.73.8)
1052 | - React-perflogger (= 0.73.8)
1053 | - ReactCommon/turbomodule/core (0.73.8):
1054 | - DoubleConversion
1055 | - fmt (~> 6.2.1)
1056 | - glog
1057 | - hermes-engine
1058 | - RCT-Folly (= 2022.05.16.00)
1059 | - React-callinvoker (= 0.73.8)
1060 | - React-cxxreact (= 0.73.8)
1061 | - React-jsi (= 0.73.8)
1062 | - React-logger (= 0.73.8)
1063 | - React-perflogger (= 0.73.8)
1064 | - RNCAsyncStorage (1.23.1):
1065 | - React-Core
1066 | - RNScreens (3.31.1):
1067 | - glog
1068 | - RCT-Folly (= 2022.05.16.00)
1069 | - React-Core
1070 | - React-RCTImage
1071 | - SocketRocket (0.6.1)
1072 | - WebRTC-SDK (114.5735.08)
1073 | - Yoga (1.14.0)
1074 |
1075 | DEPENDENCIES:
1076 | - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
1077 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
1078 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
1079 | - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
1080 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
1081 | - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
1082 | - libevent (~> 2.1.12)
1083 | - "livekit-react-native (from `../node_modules/@livekit/react-native`)"
1084 | - "livekit-react-native-webrtc (from `../node_modules/@livekit/react-native-webrtc`)"
1085 | - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1086 | - RCT-Folly/Fabric (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
1087 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
1088 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
1089 | - React (from `../node_modules/react-native/`)
1090 | - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
1091 | - React-Codegen (from `build/generated/ios`)
1092 | - React-Core (from `../node_modules/react-native/`)
1093 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
1094 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
1095 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
1096 | - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`)
1097 | - React-Fabric (from `../node_modules/react-native/ReactCommon`)
1098 | - React-FabricImage (from `../node_modules/react-native/ReactCommon`)
1099 | - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`)
1100 | - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
1101 | - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`)
1102 | - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`)
1103 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
1104 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
1105 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`)
1106 | - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
1107 | - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`)
1108 | - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
1109 | - React-nativeconfig (from `../node_modules/react-native/ReactCommon`)
1110 | - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`)
1111 | - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
1112 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
1113 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
1114 | - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
1115 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
1116 | - React-RCTFabric (from `../node_modules/react-native/React`)
1117 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
1118 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
1119 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
1120 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
1121 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
1122 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
1123 | - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`)
1124 | - React-rncore (from `../node_modules/react-native/ReactCommon`)
1125 | - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
1126 | - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`)
1127 | - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`)
1128 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
1129 | - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
1130 | - RNScreens (from `../node_modules/react-native-screens`)
1131 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
1132 |
1133 | SPEC REPOS:
1134 | trunk:
1135 | - fmt
1136 | - libevent
1137 | - SocketRocket
1138 | - WebRTC-SDK
1139 |
1140 | EXTERNAL SOURCES:
1141 | boost:
1142 | :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
1143 | DoubleConversion:
1144 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
1145 | FBLazyVector:
1146 | :path: "../node_modules/react-native/Libraries/FBLazyVector"
1147 | FBReactNativeSpec:
1148 | :path: "../node_modules/react-native/React/FBReactNativeSpec"
1149 | glog:
1150 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
1151 | hermes-engine:
1152 | :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
1153 | :tag: hermes-2024-04-29-RNv0.73.8-644c8be78af1eae7c138fa4093fb87f0f4f8db85
1154 | livekit-react-native:
1155 | :path: "../node_modules/@livekit/react-native"
1156 | livekit-react-native-webrtc:
1157 | :path: "../node_modules/@livekit/react-native-webrtc"
1158 | RCT-Folly:
1159 | :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
1160 | RCTRequired:
1161 | :path: "../node_modules/react-native/Libraries/RCTRequired"
1162 | RCTTypeSafety:
1163 | :path: "../node_modules/react-native/Libraries/TypeSafety"
1164 | React:
1165 | :path: "../node_modules/react-native/"
1166 | React-callinvoker:
1167 | :path: "../node_modules/react-native/ReactCommon/callinvoker"
1168 | React-Codegen:
1169 | :path: build/generated/ios
1170 | React-Core:
1171 | :path: "../node_modules/react-native/"
1172 | React-CoreModules:
1173 | :path: "../node_modules/react-native/React/CoreModules"
1174 | React-cxxreact:
1175 | :path: "../node_modules/react-native/ReactCommon/cxxreact"
1176 | React-debug:
1177 | :path: "../node_modules/react-native/ReactCommon/react/debug"
1178 | React-Fabric:
1179 | :path: "../node_modules/react-native/ReactCommon"
1180 | React-FabricImage:
1181 | :path: "../node_modules/react-native/ReactCommon"
1182 | React-graphics:
1183 | :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics"
1184 | React-hermes:
1185 | :path: "../node_modules/react-native/ReactCommon/hermes"
1186 | React-ImageManager:
1187 | :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios"
1188 | React-jserrorhandler:
1189 | :path: "../node_modules/react-native/ReactCommon/jserrorhandler"
1190 | React-jsi:
1191 | :path: "../node_modules/react-native/ReactCommon/jsi"
1192 | React-jsiexecutor:
1193 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
1194 | React-jsinspector:
1195 | :path: "../node_modules/react-native/ReactCommon/jsinspector-modern"
1196 | React-logger:
1197 | :path: "../node_modules/react-native/ReactCommon/logger"
1198 | React-Mapbuffer:
1199 | :path: "../node_modules/react-native/ReactCommon"
1200 | react-native-safe-area-context:
1201 | :path: "../node_modules/react-native-safe-area-context"
1202 | React-nativeconfig:
1203 | :path: "../node_modules/react-native/ReactCommon"
1204 | React-NativeModulesApple:
1205 | :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios"
1206 | React-perflogger:
1207 | :path: "../node_modules/react-native/ReactCommon/reactperflogger"
1208 | React-RCTActionSheet:
1209 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
1210 | React-RCTAnimation:
1211 | :path: "../node_modules/react-native/Libraries/NativeAnimation"
1212 | React-RCTAppDelegate:
1213 | :path: "../node_modules/react-native/Libraries/AppDelegate"
1214 | React-RCTBlob:
1215 | :path: "../node_modules/react-native/Libraries/Blob"
1216 | React-RCTFabric:
1217 | :path: "../node_modules/react-native/React"
1218 | React-RCTImage:
1219 | :path: "../node_modules/react-native/Libraries/Image"
1220 | React-RCTLinking:
1221 | :path: "../node_modules/react-native/Libraries/LinkingIOS"
1222 | React-RCTNetwork:
1223 | :path: "../node_modules/react-native/Libraries/Network"
1224 | React-RCTSettings:
1225 | :path: "../node_modules/react-native/Libraries/Settings"
1226 | React-RCTText:
1227 | :path: "../node_modules/react-native/Libraries/Text"
1228 | React-RCTVibration:
1229 | :path: "../node_modules/react-native/Libraries/Vibration"
1230 | React-rendererdebug:
1231 | :path: "../node_modules/react-native/ReactCommon/react/renderer/debug"
1232 | React-rncore:
1233 | :path: "../node_modules/react-native/ReactCommon"
1234 | React-runtimeexecutor:
1235 | :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
1236 | React-runtimescheduler:
1237 | :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler"
1238 | React-utils:
1239 | :path: "../node_modules/react-native/ReactCommon/react/utils"
1240 | ReactCommon:
1241 | :path: "../node_modules/react-native/ReactCommon"
1242 | RNCAsyncStorage:
1243 | :path: "../node_modules/@react-native-async-storage/async-storage"
1244 | RNScreens:
1245 | :path: "../node_modules/react-native-screens"
1246 | Yoga:
1247 | :path: "../node_modules/react-native/ReactCommon/yoga"
1248 |
1249 | SPEC CHECKSUMS:
1250 | boost: d3f49c53809116a5d38da093a8aa78bf551aed09
1251 | DoubleConversion: fea03f2699887d960129cc54bba7e52542b6f953
1252 | FBLazyVector: df34a309e356a77581809834f6ec3fbe7153f620
1253 | FBReactNativeSpec: bbe8b686178e5ce03d1d8a356789f211f91f31b8
1254 | fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
1255 | glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
1256 | hermes-engine: b12d9bb1b7cee546f5e48212e7ea7e3c1665a367
1257 | libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
1258 | livekit-react-native: 0bc4499e7e668eb4ab6a109d3574c34a7828efd1
1259 | livekit-react-native-webrtc: 866212979a99f022324c00a0b735c1141912a608
1260 | RCT-Folly: 7169b2b1c44399c76a47b5deaaba715eeeb476c0
1261 | RCTRequired: 0c7f03a41ee32dec802c74c341e317a4165973d5
1262 | RCTTypeSafety: 57698bb7fcde424922e201dab377f496a08a63e3
1263 | React: 64c0c83924460a3d34fa5857ca2fd3ed2a69b581
1264 | React-callinvoker: c0129cd7b8babac64b3d3515e72a8b2e743d261e
1265 | React-Codegen: fea55b35ab6e6091091f84ec7924424c6375a9d0
1266 | React-Core: 607dac2a3cc5962c3d9612d79907ac28296c3f13
1267 | React-CoreModules: af9d2eca18c26b319157df21d5ea9eef7d5d4ad2
1268 | React-cxxreact: 91453f3e345b7c7b9286a9b3a04d01d402f7aa5a
1269 | React-debug: 9a287572a7a36429da0509664ce3d1931f39f3c3
1270 | React-Fabric: 528abafe4e58be9ca229b25eac44b2a393432b08
1271 | React-FabricImage: 42101f6e6fc9b91c2695be0002d2d6568e0067e1
1272 | React-graphics: 6af7e672af66a9e8b46e4b140a8d28c129ed2758
1273 | React-hermes: 7155160dabef04a20a41b817fbea764039833de0
1274 | React-ImageManager: 4b5f59abe72ad1cf721ef1e52e56f5974dc785a9
1275 | React-jserrorhandler: c89f6315b401eff2ff0b57f2dd5cb1624c740e63
1276 | React-jsi: da0ebd65e8da907855a7ca4e3dfeb45f5d671886
1277 | React-jsiexecutor: e0623342677d9c9f18c8b42121a70a9671c2b80b
1278 | React-jsinspector: 1729acf5ffe2d4439d698da25fddf0c75d07d1a1
1279 | React-logger: 60afd40b183e8e6642bfd0108f1a1ad360cc665e
1280 | React-Mapbuffer: 672a9342eb75a4d0663306e94d4dfc88aee73b93
1281 | react-native-safe-area-context: dcab599c527c2d7de2d76507a523d20a0b83823d
1282 | React-nativeconfig: 2e44d0d2dd222b12a5183f4bcaa4a91881497acb
1283 | React-NativeModulesApple: 8aa032fe6c92c1a3c63e4809d42816284a56a9b0
1284 | React-perflogger: f9367428cf475f4606b5965c1d5a71781bb95299
1285 | React-RCTActionSheet: 39b3248276c7f98e455aebb0cdd473a35c6d5082
1286 | React-RCTAnimation: 10eee15d10e420f56b4014efd4d7fb7f064105fc
1287 | React-RCTAppDelegate: d58a00ce3178b077984f9cbb90c6191d73c9b3a7
1288 | React-RCTBlob: 67bd0b38c39f59ec77dcbab01217a7b9dd338446
1289 | React-RCTFabric: 78b07ebde8adc626b210219bf1a3ab5bafa6b8b7
1290 | React-RCTImage: e9c7790c25684ec5b64b4c92def4d6b95b225826
1291 | React-RCTLinking: d3d3ea5596c9f30fa0e8138e356258fca1f2ccaf
1292 | React-RCTNetwork: b52bcb51f559535612957f20b4ca28ff1438182f
1293 | React-RCTSettings: 6763f9d5210ce3dae6f892a0546c06738014025b
1294 | React-RCTText: 6b8365ef043d3fc01848bb8de48ee9e67ba3bc47
1295 | React-RCTVibration: aa85a228a382b66e8844c2f94cd3e734fa96d07a
1296 | React-rendererdebug: db3c2ce7c7c239b5b2e2c913acd08dc03666e88f
1297 | React-rncore: e4514e3d953d0ad476a3e5dd999e16d68ebae2e4
1298 | React-runtimeexecutor: 1fb11b17da6dcf79da6f301ab54fcb51545bab6e
1299 | React-runtimescheduler: 1c40cfe98dcc7b06354d96a1cd8ee10cbc4cc797
1300 | React-utils: 4cc2ba652f5df1c8f0461d4ae9e3ee474c1354ea
1301 | ReactCommon: 1da3fc14d904883c46327b3322325eebf60a720a
1302 | RNCAsyncStorage: 826b603ae9c0f88b5ac4e956801f755109fa4d5c
1303 | RNScreens: 134a7511b12b8eb440b87aac21e36a71295d6024
1304 | SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
1305 | WebRTC-SDK: c24d2a6c9f571f2ed42297cb8ffba9557093142b
1306 | Yoga: e5b887426cee15d2a326bdd34afc0282fc0486ad
1307 |
1308 | PODFILE CHECKSUM: c1e7619596de8e8516240eac0c0234325a3ec3e0
1309 |
1310 | COCOAPODS: 1.13.0
1311 |
--------------------------------------------------------------------------------
/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: 'react-native',
3 | };
4 |
--------------------------------------------------------------------------------
/metro.config.js:
--------------------------------------------------------------------------------
1 | const {getDefaultConfig, mergeConfig} = require('@react-native/metro-config');
2 |
3 | /**
4 | * Metro configuration
5 | * https://facebook.github.io/metro/docs/configuration
6 | *
7 | * @type {import('metro-config').MetroConfig}
8 | */
9 | const config = {};
10 |
11 | module.exports = mergeConfig(getDefaultConfig(__dirname), config);
12 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "LiveKitReactNativeMeet",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "android": "react-native run-android",
7 | "ios": "react-native run-ios",
8 | "lint": "eslint .",
9 | "start": "react-native start",
10 | "test": "jest",
11 | "postinstall": "patch-package"
12 | },
13 | "dependencies": {
14 | "@livekit/react-native": "^2.1.0",
15 | "@livekit/react-native-webrtc": "^114.1.1",
16 | "@react-native-async-storage/async-storage": "^1.23.1",
17 | "@react-navigation/native": "^6.1.17",
18 | "@react-navigation/native-stack": "^6.9.26",
19 | "@supersami/rn-foreground-service": "^2.1.0",
20 | "react": "18.2.0",
21 | "react-native": "0.73.8",
22 | "react-native-dialog": "^9.3.0",
23 | "react-native-safe-area-context": "^4.10.1",
24 | "react-native-screens": "^3.31.1",
25 | "react-native-toast-message": "^2.2.0"
26 | },
27 | "devDependencies": {
28 | "@babel/core": "^7.20.0",
29 | "@babel/preset-env": "^7.20.0",
30 | "@babel/runtime": "^7.20.0",
31 | "@react-native/babel-preset": "0.73.21",
32 | "@react-native/eslint-config": "0.73.2",
33 | "@react-native/metro-config": "0.73.5",
34 | "@react-native/typescript-config": "0.73.1",
35 | "@types/react": "^18.2.6",
36 | "@types/react-test-renderer": "^18.0.0",
37 | "babel-jest": "^29.6.3",
38 | "eslint": "^8.19.0",
39 | "jest": "^29.6.3",
40 | "patch-package": "^8.0.0",
41 | "prettier": "2.8.8",
42 | "react-test-renderer": "18.2.0",
43 | "typescript": "5.0.4"
44 | },
45 | "engines": {
46 | "node": ">=18"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/patches/@supersami+rn-foreground-service+2.1.0.patch:
--------------------------------------------------------------------------------
1 | diff --git a/node_modules/@supersami/rn-foreground-service/android/src/main/java/com/supersami/foregroundservice/NotificationHelper.java b/node_modules/@supersami/rn-foreground-service/android/src/main/java/com/supersami/foregroundservice/NotificationHelper.java
2 | index afccd04..26dbded 100644
3 | --- a/node_modules/@supersami/rn-foreground-service/android/src/main/java/com/supersami/foregroundservice/NotificationHelper.java
4 | +++ b/node_modules/@supersami/rn-foreground-service/android/src/main/java/com/supersami/foregroundservice/NotificationHelper.java
5 | @@ -14,6 +14,7 @@ import android.os.Bundle;
6 | import androidx.core.app.NotificationCompat;
7 | import android.util.Log;
8 |
9 | +import com.facebook.react.R;
10 |
11 | // partially took ideas from: https://github.com/zo0r/react-native-push-notification/blob/master/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java
12 |
13 |
--------------------------------------------------------------------------------
/src/App.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import { DarkTheme, NavigationContainer } from '@react-navigation/native';
4 | import { createNativeStackNavigator } from '@react-navigation/native-stack';
5 | import { PreJoinPage } from './PreJoinPage';
6 | import { RoomPage } from './RoomPage';
7 | import Toast from 'react-native-toast-message';
8 |
9 | const Stack = createNativeStackNavigator();
10 | export default function App() {
11 | return (
12 | <>
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | >
21 | );
22 | }
23 |
24 | export type RootStackParamList = {
25 | PreJoinPage: undefined;
26 | RoomPage: { url: string; token: string };
27 | };
28 |
--------------------------------------------------------------------------------
/src/ParticipantView.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 |
3 | import { Image, StyleSheet, ViewStyle } from 'react-native';
4 | import {
5 | isTrackReference,
6 | TrackReferenceOrPlaceholder,
7 | useEnsureTrackRef,
8 | useIsMuted,
9 | useIsSpeaking,
10 | useParticipantInfo,
11 | VideoTrack,
12 | } from '@livekit/react-native';
13 | import { View } from 'react-native';
14 | import { Text } from 'react-native';
15 | import { useTheme } from '@react-navigation/native';
16 | export type Props = {
17 | trackRef: TrackReferenceOrPlaceholder;
18 | style?: ViewStyle;
19 | zOrder?: number;
20 | mirror?: boolean;
21 | };
22 | export const ParticipantView = ({
23 | style = {},
24 | trackRef,
25 | zOrder,
26 | mirror,
27 | }: Props) => {
28 | const trackReference = useEnsureTrackRef(trackRef);
29 | const { identity, name } = useParticipantInfo({
30 | participant: trackReference.participant,
31 | });
32 | const isSpeaking = useIsSpeaking(trackRef.participant);
33 | const isVideoMuted = useIsMuted(trackRef);
34 | const { colors } = useTheme();
35 | let videoView;
36 | if (isTrackReference(trackRef) && !isVideoMuted) {
37 | videoView = (
38 |
44 | );
45 | } else {
46 | videoView = (
47 |
48 |
49 |
53 |
54 |
55 | );
56 | }
57 |
58 | const displayName = name ? name : identity;
59 | return (
60 |
61 | {videoView}
62 |
63 | {displayName}
64 |
65 | {isSpeaking && }
66 |
67 | );
68 | };
69 |
70 | const styles = StyleSheet.create({
71 | container: {
72 | backgroundColor: '#00153C',
73 | },
74 | speakingIndicator: {
75 | position: 'absolute',
76 | bottom: 0,
77 | width: '100%',
78 | height: '100%',
79 | borderColor: '#007DFF',
80 | borderWidth: 3,
81 | },
82 | spacer: {
83 | flex: 1,
84 | },
85 | videoView: {
86 | width: '100%',
87 | height: '100%',
88 | },
89 | identityBar: {
90 | position: 'absolute',
91 | bottom: 0,
92 | width: '100%',
93 | padding: 2,
94 | backgroundColor: 'rgba(0,0,0,0.5)',
95 | },
96 | icon: {
97 | width: 40,
98 | height: 40,
99 | alignSelf: 'center',
100 | },
101 | });
102 |
--------------------------------------------------------------------------------
/src/PreJoinPage.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { useState, useEffect } from 'react';
3 | import type { NativeStackScreenProps } from '@react-navigation/native-stack';
4 |
5 | import { StyleSheet, View, TextInput, Text, Button } from 'react-native';
6 | import type { RootStackParamList } from './App';
7 | import { useTheme } from '@react-navigation/native';
8 | import AsyncStorage from '@react-native-async-storage/async-storage';
9 |
10 | const DEFAULT_URL = 'wss://www.example.com';
11 | const DEFAULT_TOKEN = '';
12 |
13 | const URL_KEY = 'url';
14 | const TOKEN_KEY = 'token';
15 |
16 | export const PreJoinPage = ({
17 | navigation,
18 | }: NativeStackScreenProps) => {
19 | const [url, setUrl] = useState(DEFAULT_URL);
20 | const [token, setToken] = useState(DEFAULT_TOKEN);
21 |
22 | useEffect(() => {
23 | AsyncStorage.getItem(URL_KEY).then((value) => {
24 | if (value) {
25 | setUrl(value);
26 | }
27 | });
28 |
29 | AsyncStorage.getItem(TOKEN_KEY).then((value) => {
30 | if (value) {
31 | setToken(value);
32 | }
33 | });
34 | }, []);
35 |
36 | const { colors } = useTheme();
37 |
38 | let saveValues = (saveUrl: string, saveToken: string) => {
39 | AsyncStorage.setItem(URL_KEY, saveUrl);
40 | AsyncStorage.setItem(TOKEN_KEY, saveToken);
41 | };
42 | return (
43 |
44 | URL
45 |
54 |
55 | Token
56 |
65 |
66 |
93 | );
94 | };
95 |
96 | const styles = StyleSheet.create({
97 | container: {
98 | flex: 1,
99 | alignItems: 'center',
100 | justifyContent: 'center',
101 | },
102 | box: {
103 | width: 60,
104 | height: 60,
105 | marginVertical: 20,
106 | },
107 | input: {
108 | width: '100%',
109 | height: 40,
110 | margin: 12,
111 | borderWidth: 1,
112 | padding: 10,
113 | },
114 | spacer: {
115 | height: 10,
116 | },
117 | });
118 |
--------------------------------------------------------------------------------
/src/RoomControls.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import { useState } from 'react';
3 | import Dialog from 'react-native-dialog';
4 |
5 | import {
6 | StyleSheet,
7 | View,
8 | Pressable,
9 | Image,
10 | ViewStyle,
11 | StyleProp,
12 | Modal,
13 | } from 'react-native';
14 | import { AudioOutputList } from './ui/AudioOutputList';
15 |
16 | export type Props = {
17 | micEnabled?: boolean;
18 | setMicEnabled: (enabled: boolean) => void;
19 | cameraEnabled?: boolean;
20 | setCameraEnabled: (enabled: boolean) => void;
21 | switchCamera: () => void;
22 | screenShareEnabled: boolean;
23 | setScreenShareEnabled: (enabled: boolean) => void;
24 | sendData: (message: string) => void;
25 | onDisconnectClick: () => void;
26 | style?: StyleProp;
27 | };
28 | export const RoomControls = ({
29 | micEnabled = false,
30 | setMicEnabled,
31 | cameraEnabled = false,
32 | setCameraEnabled,
33 | switchCamera,
34 | screenShareEnabled = false,
35 | setScreenShareEnabled,
36 | sendData,
37 | onDisconnectClick,
38 | style,
39 | }: Props) => {
40 | const [audioModalVisible, setAudioModalVisible] = useState(false);
41 | var micImage = micEnabled
42 | ? require('./icons/baseline_mic_white_24dp.png')
43 | : require('./icons/baseline_mic_off_white_24dp.png');
44 | var cameraImage = cameraEnabled
45 | ? require('./icons/baseline_videocam_white_24dp.png')
46 | : require('./icons/baseline_videocam_off_white_24dp.png');
47 | var screenShareImage = screenShareEnabled
48 | ? require('./icons/baseline_cast_connected_white_24dp.png')
49 | : require('./icons/baseline_cast_white_24dp.png');
50 |
51 | let [message, setMessage] = useState('');
52 | let [messageDialogVisible, setMessageDialogVisible] = useState(false);
53 | const handleOk = () => {
54 | sendData(message);
55 | setMessageDialogVisible(false);
56 | };
57 |
58 | const handleCancel = () => {
59 | setMessageDialogVisible(false);
60 | };
61 |
62 | return (
63 |
64 | {
69 | setAudioModalVisible(!audioModalVisible);
70 | }}
71 | >
72 |
73 |
74 | {
76 | return setAudioModalVisible(false);
77 | }}
78 | />
79 |
80 |
81 |
82 |
83 | {
85 | setMicEnabled(!micEnabled);
86 | }}
87 | >
88 |
89 |
90 | {
92 | setCameraEnabled(!cameraEnabled);
93 | }}
94 | >
95 |
96 |
97 | {
99 | switchCamera();
100 | }}
101 | >
102 |
106 |
107 | {
109 | setScreenShareEnabled(!screenShareEnabled);
110 | }}
111 | >
112 |
113 |
114 | {
116 | setMessageDialogVisible(true);
117 | }}
118 | >
119 |
123 |
124 |
125 | {
127 | onDisconnectClick();
128 | }}
129 | >
130 |
134 |
135 |
136 | {
138 | setAudioModalVisible(true);
139 | }}
140 | >
141 |
142 |
143 |
144 |
148 |
149 | Send Message
150 |
151 |
155 |
156 |
157 |
158 |
159 | );
160 | };
161 |
162 | const styles = StyleSheet.create({
163 | container: {
164 | width: '100%',
165 | flexDirection: 'row',
166 | alignItems: 'center',
167 | justifyContent: 'space-evenly',
168 | marginVertical: 8,
169 | },
170 | icon: {
171 | width: 32,
172 | height: 32,
173 | },
174 | centeredView: {
175 | flex: 1,
176 | justifyContent: 'center',
177 | alignItems: 'center',
178 | marginTop: 22,
179 | },
180 | modalView: {
181 | margin: 20,
182 | backgroundColor: 'black',
183 | borderRadius: 20,
184 | padding: 35,
185 | alignItems: 'center',
186 | shadowColor: '#000',
187 | shadowOffset: {
188 | width: 0,
189 | height: 2,
190 | },
191 | shadowOpacity: 0.25,
192 | shadowRadius: 4,
193 | elevation: 5,
194 | },
195 |
196 | dialogItemTextStyle: {
197 | color: 'black',
198 | fontSize: 12,
199 | },
200 | });
201 |
--------------------------------------------------------------------------------
/src/RoomPage.tsx:
--------------------------------------------------------------------------------
1 | import * as React from 'react';
2 | import type {
3 | NativeStackNavigationProp,
4 | NativeStackScreenProps,
5 | } from '@react-navigation/native-stack';
6 |
7 | import {
8 | StyleSheet,
9 | View,
10 | FlatList,
11 | ListRenderItem,
12 | findNodeHandle,
13 | NativeModules,
14 | } from 'react-native';
15 | import type { RootStackParamList } from './App';
16 | import { useEffect, useState } from 'react';
17 | import { RoomControls } from './RoomControls';
18 | import { ParticipantView } from './ParticipantView';
19 | import {
20 | AudioSession,
21 | useIOSAudioManagement,
22 | useLocalParticipant,
23 | LiveKitRoom,
24 | useDataChannel,
25 | useRoomContext,
26 | useVisualStableUpdate,
27 | useTracks,
28 | TrackReferenceOrPlaceholder,
29 | ReceivedDataMessage,
30 | } from '@livekit/react-native';
31 | import { Platform } from 'react-native';
32 | // @ts-ignore
33 | import {
34 | mediaDevices,
35 | ScreenCapturePickerView,
36 | } from '@livekit/react-native-webrtc';
37 | import { startCallService, stopCallService } from './callservice/CallService';
38 | import Toast from 'react-native-toast-message';
39 |
40 | import 'fastestsmallesttextencoderdecoder';
41 | import { Track } from 'livekit-client';
42 |
43 | export const RoomPage = ({
44 | navigation,
45 | route,
46 | }: NativeStackScreenProps) => {
47 | const { url, token } = route.params;
48 |
49 | useEffect(() => {
50 | let start = async () => {
51 | await AudioSession.startAudioSession();
52 | };
53 |
54 | start();
55 | return () => {
56 | AudioSession.stopAudioSession();
57 | };
58 | }, []);
59 |
60 | return (
61 |
71 |
72 |
73 | );
74 | };
75 |
76 | interface RoomViewProps {
77 | navigation: NativeStackNavigationProp;
78 | }
79 |
80 | const RoomView = ({ navigation }: RoomViewProps) => {
81 | const [isCameraFrontFacing, setCameraFrontFacing] = useState(true);
82 | const room = useRoomContext();
83 | useIOSAudioManagement(room);
84 | // Perform platform specific call setup.
85 | useEffect(() => {
86 | startCallService();
87 | return () => {
88 | stopCallService();
89 | };
90 | }, []);
91 |
92 | // Setup room listeners
93 | const { send } = useDataChannel(
94 | (dataMessage: ReceivedDataMessage) => {
95 | //@ts-ignore
96 | let decoder = new TextDecoder('utf-8');
97 | let message = decoder.decode(dataMessage.payload);
98 |
99 | let title = 'Received Message';
100 | if (dataMessage.from != null) {
101 | title = 'Received Message from ' + dataMessage.from?.identity;
102 | }
103 | Toast.show({
104 | type: 'success',
105 | text1: title,
106 | text2: message,
107 | });
108 | }
109 | );
110 |
111 | const tracks = useTracks(
112 | [
113 | { source: Track.Source.Camera, withPlaceholder: true },
114 | { source: Track.Source.ScreenShare, withPlaceholder: false },
115 | ],
116 | { onlySubscribed: false }
117 | );
118 | const stableTracks = useVisualStableUpdate(tracks, 5);
119 | // Setup views.
120 | const stageView = tracks.length > 0 && (
121 |
122 | );
123 |
124 | const renderParticipant: ListRenderItem = ({
125 | item,
126 | }) => {
127 | return (
128 |
129 | );
130 | };
131 |
132 | const otherParticipantsView = stableTracks.length > 0 && (
133 |
139 | );
140 |
141 | const {
142 | isCameraEnabled,
143 | isMicrophoneEnabled,
144 | isScreenShareEnabled,
145 | localParticipant,
146 | } = useLocalParticipant();
147 |
148 | // Prepare for iOS screenshare.
149 | const screenCaptureRef = React.useRef(null);
150 | const screenCapturePickerView = Platform.OS === 'ios' && (
151 |
152 | );
153 |
154 | const startBroadcast = async () => {
155 | if (Platform.OS === 'ios') {
156 | const reactTag = findNodeHandle(screenCaptureRef.current);
157 | await NativeModules.ScreenCapturePickerViewManager.show(reactTag);
158 | localParticipant.setScreenShareEnabled(true);
159 | } else {
160 | localParticipant.setScreenShareEnabled(true);
161 | }
162 | };
163 |
164 | return (
165 |
166 | {stageView}
167 | {otherParticipantsView}
168 | {
171 | localParticipant.setMicrophoneEnabled(enabled);
172 | }}
173 | cameraEnabled={isCameraEnabled}
174 | setCameraEnabled={(enabled: boolean) => {
175 | localParticipant.setCameraEnabled(enabled);
176 | }}
177 | switchCamera={async () => {
178 | let facingModeStr = !isCameraFrontFacing ? 'front' : 'environment';
179 | setCameraFrontFacing(!isCameraFrontFacing);
180 |
181 | let devices = await mediaDevices.enumerateDevices();
182 | var newDevice;
183 | //@ts-ignore
184 | for (const device of devices) {
185 | //@ts-ignore
186 | if (
187 | device.kind === 'videoinput' &&
188 | device.facing === facingModeStr
189 | ) {
190 | newDevice = device;
191 | break;
192 | }
193 | }
194 |
195 | if (newDevice == null) {
196 | return;
197 | }
198 |
199 | //@ts-ignore
200 | await room.switchActiveDevice('videoinput', newDevice.deviceId);
201 | }}
202 | screenShareEnabled={isScreenShareEnabled}
203 | setScreenShareEnabled={(enabled: boolean) => {
204 | if (enabled) {
205 | startBroadcast();
206 | } else {
207 | localParticipant.setScreenShareEnabled(enabled);
208 | }
209 | }}
210 | sendData={(message: string) => {
211 | Toast.show({
212 | type: 'success',
213 | text1: 'Sending Message',
214 | text2: message,
215 | });
216 |
217 | //@ts-ignore
218 | let encoder = new TextEncoder();
219 | let encodedData = encoder.encode(message);
220 | send(encodedData, { reliable: true });
221 | }}
222 | onSimulate={(scenario) => {
223 | room.simulateScenario(scenario);
224 | }}
225 | onDisconnectClick={() => {
226 | navigation.pop();
227 | }}
228 | />
229 | {screenCapturePickerView}
230 |
231 | );
232 | };
233 |
234 | const styles = StyleSheet.create({
235 | container: {
236 | flex: 1,
237 | alignItems: 'center',
238 | justifyContent: 'center',
239 | },
240 | stage: {
241 | flex: 1,
242 | width: '100%',
243 | },
244 | otherParticipantsList: {
245 | width: '100%',
246 | height: 150,
247 | flexGrow: 0,
248 | },
249 | otherParticipantView: {
250 | width: 150,
251 | height: 150,
252 | },
253 | });
254 |
--------------------------------------------------------------------------------
/src/callservice/CallService.android.ts:
--------------------------------------------------------------------------------
1 | import ReactNativeForegroundService from '@supersami/rn-foreground-service';
2 |
3 | // Start a foreground notification on Android.
4 | // A foreground notification is required for screenshare on Android.
5 | export async function startCallService() {
6 | await ReactNativeForegroundService.start({
7 | id: 3456,
8 | title: 'LiveKit React Example',
9 | message: 'Call in progress',
10 | importance: 'none',
11 | vibration: false,
12 | icon: 'ic_launcher',
13 | });
14 | }
15 | export async function stopCallService() {
16 | await ReactNativeForegroundService.stop();
17 | }
18 |
--------------------------------------------------------------------------------
/src/callservice/CallService.d.ts:
--------------------------------------------------------------------------------
1 | declare async function startCallService();
2 | declare async function stopCallService();
3 | export { startCallService, stopCallService };
4 |
--------------------------------------------------------------------------------
/src/callservice/CallService.ios.ts:
--------------------------------------------------------------------------------
1 | // Start a CallKit call on iOS.
2 | // This keeps the app alive in the background.
3 | export async function startCallService() {
4 | // TODO
5 | }
6 |
7 | export async function stopCallService() {
8 | // TODO
9 | }
10 |
--------------------------------------------------------------------------------
/src/icons/baseline_cancel_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_cancel_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_cast_connected_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_cast_connected_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_cast_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_cast_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_mic_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_mic_off_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_mic_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_mic_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_videocam_off_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_videocam_off_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/baseline_videocam_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/baseline_videocam_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/camera_flip_outline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/camera_flip_outline.png
--------------------------------------------------------------------------------
/src/icons/message_outline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/message_outline.png
--------------------------------------------------------------------------------
/src/icons/outline_dots_white_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/outline_dots_white_24dp.png
--------------------------------------------------------------------------------
/src/icons/speaker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/icons/speaker.png
--------------------------------------------------------------------------------
/src/types/Foreground.d.ts:
--------------------------------------------------------------------------------
1 | declare module '@voximplant/react-native-foreground-service';
2 |
--------------------------------------------------------------------------------
/src/types/ReactNativeWebrtc.d.ts:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/livekit-examples/react-native-meet/b2fd5fc55f18f79e5f420fc35dd866e7cad6029e/src/types/ReactNativeWebrtc.d.ts
--------------------------------------------------------------------------------
/src/ui/AudioOutputList.tsx:
--------------------------------------------------------------------------------
1 | import { AudioSession } from '@livekit/react-native';
2 | import React from 'react';
3 | import { useEffect, useState } from 'react';
4 | import {
5 | FlatList,
6 | ListRenderItem,
7 | Pressable,
8 | StyleSheet,
9 | Text,
10 | View,
11 | } from 'react-native';
12 |
13 | export type Props = {
14 | onSelect: () => void;
15 | };
16 | export const AudioOutputList = ({ onSelect }: Props) => {
17 | const [audioOutputs, setAudioOutputs] = useState([]);
18 | useEffect(() => {
19 | let loadAudioOutputs = async () => {
20 | let outputs = await AudioSession.getAudioOutputs();
21 | setAudioOutputs(outputs);
22 | };
23 | loadAudioOutputs();
24 | return () => {};
25 | }, []);
26 |
27 | let selectOutput = async (deviceId: string) => {
28 | await AudioSession.selectAudioOutput(deviceId);
29 | onSelect();
30 | };
31 | let renderAudioOutput: ListRenderItem = ({ item }) => {
32 | return (
33 | {
35 | selectOutput(item);
36 | }}
37 | >
38 |
39 | {item}
40 |
41 |
42 | );
43 | };
44 | return (
45 |
46 | {'Select Audio Output'}
47 |
48 | item}
52 | />
53 |
54 | );
55 | };
56 | const styles = StyleSheet.create({
57 | container: {
58 | width: '100%',
59 | flexDirection: 'row',
60 | alignItems: 'center',
61 | justifyContent: 'space-evenly',
62 | marginVertical: 8,
63 | },
64 | icon: {
65 | width: 32,
66 | height: 32,
67 | },
68 | spacer: {
69 | paddingTop: 10,
70 | },
71 | centeredView: {
72 | flex: 1,
73 | justifyContent: 'center',
74 | alignItems: 'center',
75 | marginTop: 22,
76 | },
77 | modalView: {
78 | margin: 20,
79 | backgroundColor: 'black',
80 | borderRadius: 20,
81 | padding: 35,
82 | alignItems: 'center',
83 | shadowColor: '#000',
84 | shadowOffset: {
85 | width: 0,
86 | height: 2,
87 | },
88 | shadowOpacity: 0.25,
89 | shadowRadius: 4,
90 | elevation: 5,
91 | },
92 | titleTextStyle: {
93 | color: 'white',
94 | fontWeight: 'bold',
95 | textAlign: 'center',
96 | fontSize: 24,
97 | },
98 | itemTextStyle: {
99 | color: 'white',
100 | fontWeight: 'bold',
101 | textAlign: 'center',
102 | fontSize: 20,
103 | },
104 | });
105 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@react-native/typescript-config/tsconfig.json"
3 | }
4 |
--------------------------------------------------------------------------------