├── .eslintignore ├── .gitattributes ├── packages ├── RNWebRTCARExample │ ├── .watchmanconfig │ ├── .gitattributes │ ├── ios │ │ ├── Gemfile │ │ ├── RNWebRTCARExample │ │ │ ├── Images.xcassets │ │ │ │ ├── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── Icon-76.png │ │ │ │ │ ├── Icon-60@2x.png │ │ │ │ │ ├── Icon-60@3x.png │ │ │ │ │ ├── Icon-76@2x.png │ │ │ │ │ ├── Icon-Small.png │ │ │ │ │ ├── Icon-83.5@2x.png │ │ │ │ │ ├── Icon-Small-40.png │ │ │ │ │ ├── Icon-Small@2x-1.png │ │ │ │ │ ├── Icon-Small@2x.png │ │ │ │ │ ├── Icon-Small@3x.png │ │ │ │ │ ├── Icon-Notification.png │ │ │ │ │ ├── Icon-Small-40@2x.png │ │ │ │ │ ├── Icon-Small-40@3x.png │ │ │ │ │ ├── Icon-Notification@2x.png │ │ │ │ │ ├── Icon-Notification@3x.png │ │ │ │ │ ├── Icon-Small-40@2x-1.png │ │ │ │ │ ├── Icon-Notification@2x-1.png │ │ │ │ │ └── Contents.json │ │ │ ├── art.scnassets │ │ │ │ ├── ship.scn │ │ │ │ └── texture.png │ │ │ ├── AppDelegate.h │ │ │ ├── main.m │ │ │ ├── AppDelegate.m │ │ │ ├── Info.plist │ │ │ └── Base.lproj │ │ │ │ └── LaunchScreen.xib │ │ ├── ExampleARSCNViewManager.h │ │ ├── RNWebRTCARExample.xcworkspace │ │ │ ├── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ │ └── contents.xcworkspacedata │ │ ├── fastlane │ │ │ ├── Appfile │ │ │ ├── README.md │ │ │ └── Fastfile │ │ ├── RNWebRTCARExampleTests │ │ │ ├── Info.plist │ │ │ └── RNWebRTCARExampleTests.m │ │ ├── RNWebRTCARExample-tvOSTests │ │ │ └── Info.plist │ │ ├── RNWebRTCARExample-tvOS │ │ │ └── Info.plist │ │ ├── ExampleARSCNViewManager.m │ │ ├── Podfile │ │ ├── RNWebRTCARExample.xcodeproj │ │ │ ├── xcshareddata │ │ │ │ └── xcschemes │ │ │ │ │ ├── RNWebRTCARExample.xcscheme │ │ │ │ │ └── RNWebRTCARExample-tvOS.xcscheme │ │ │ └── project.pbxproj │ │ └── Podfile.lock │ ├── app.json │ ├── babel.config.js │ ├── index.js │ ├── js │ │ ├── Custom │ │ │ └── AR.js │ │ ├── utils │ │ │ ├── signal.js │ │ │ └── rtc.js │ │ ├── AR.js │ │ ├── config.js │ │ ├── App.js │ │ └── Setting.js │ ├── README.md │ ├── CHANGELOG.md │ ├── .gitignore │ ├── metro.config.js │ ├── package.json │ └── .flowconfig ├── react-native-webrtc-ar-session │ ├── .npmignore │ ├── index.android.js │ ├── ios │ │ ├── RNWebRTCARSession.h │ │ ├── RNWebRTCARSession.podspec │ │ ├── RNWebRTCARSession.m │ │ └── RNWebRTCARSession.xcodeproj │ │ │ └── project.pbxproj │ ├── package.json │ ├── CHANGELOG.md │ ├── index.ios.js │ └── README.md └── rn-webrtc-server │ ├── package.json │ ├── CHANGELOG.md │ ├── fake-keys │ ├── privatekey.pem │ └── certificate.pem │ ├── server.js │ └── public │ └── index.html ├── .eslintrc.js ├── .prettierrc ├── lerna.json ├── scripts └── release.sh ├── .github └── workflows │ └── test.yml ├── patches ├── react-native-arkit+0.9.0.patch └── react-native-webrtc+1.75.3.patch ├── .gitignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md └── package.json /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | gem "fastlane" 4 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNWebRTCARExample", 3 | "displayName": "RNWebRTCARExample" 4 | } -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | rules: { 5 | semi: 0, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "all", 3 | "tabWidth": 2, 4 | "semi": false, 5 | "singleQuote": true, 6 | "printWidth": 80 7 | } 8 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/.npmignore: -------------------------------------------------------------------------------- 1 | ios/RNWebRTCARSession.xcodeproj/project.xcworkspace 2 | ios/RNWebRTCARSession.xcodeproj/xcuserdata 3 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "lerna": "3.1.2", 3 | "packages": [ 4 | "packages/*" 5 | ], 6 | "version": "0.1.3", 7 | "npmClient": "yarn", 8 | "useWorkspaces": true 9 | } 10 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/art.scnassets/ship.scn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/art.scnassets/ship.scn -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/art.scnassets/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/art.scnassets/texture.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/ExampleARSCNViewManager.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import 4 | 5 | @interface ExampleARSCNViewManager : RCTViewManager 6 | 7 | @end 8 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | env: { 4 | production: { 5 | plugins: ['closure-elimination', 'transform-remove-console'], 6 | }, 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/icon.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/index.js: -------------------------------------------------------------------------------- 1 | import { AppRegistry } from 'react-native' 2 | import App from './js/App' 3 | import { name as appName } from './app.json' 4 | 5 | console.disableYellowBox = true 6 | 7 | AppRegistry.registerComponent(appName, () => App) 8 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /scripts/release.sh: -------------------------------------------------------------------------------- 1 | #/bin/bash -e 2 | 3 | lerna publish $1 --conventional-commits 4 | 5 | cd packages/RNWebRTCARExample 6 | yarn sync-version 7 | cd - 8 | 9 | git add RNWebRTCARExample/ 10 | git commit -m '[Example] Sync version' 11 | git push 12 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-76@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-83.5@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x-1.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@2x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@3x.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Small-40@2x-1.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jhen0409/rn-webrtc-arkit-integration/HEAD/packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Icon-Notification@2x-1.png -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier("com.example.ARKitWebRTC") # The bundle identifier of your app 2 | apple_id("iainst0409@gmail.com") # Your Apple email address 3 | 4 | itc_team_id("117828041") # App Store Connect Team ID 5 | team_id("C6EUM5DVB3") # Developer Portal Team ID 6 | 7 | # For more information about the Appfile, see: 8 | # https://docs.fastlane.tools/advanced/#appfile 9 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/index.android.js: -------------------------------------------------------------------------------- 1 | import { NativeModules } from 'react-native' 2 | 3 | const { RNWebRTCARSession } = NativeModules 4 | 5 | if (RNWebRTCARSession) { 6 | RNWebRTCARSession.init() 7 | } 8 | 9 | const noop = f => f 10 | 11 | export const startCapturingARView = noop 12 | export const stopCapturingARView = noop 13 | export const isARWorldTrackingSupported = () => false 14 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/ios/RNWebRTCARSession.h: -------------------------------------------------------------------------------- 1 | #if __has_include("RCTBridgeModule.h") 2 | #import "RCTBridgeModule.h" 3 | #else 4 | #import 5 | #endif 6 | 7 | #if __has_include("RCTARKit.h") 8 | #import "RCTARKit.h" 9 | #endif 10 | 11 | #import 12 | 13 | @interface RNWebRTCARSession : NSObject 14 | 15 | + (void)setArView:(ARSCNView *)arView API_AVAILABLE(ios(11.0)); 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rn-webrtc-server", 3 | "private": true, 4 | "version": "0.1.2", 5 | "main": "app.js", 6 | "scripts": { 7 | "deploy": "cd ../.. && git subtree push --prefix packages/rn-webrtc-server heroku master", 8 | "local": "LOCAL=1 yarn start", 9 | "start": "node server.js" 10 | }, 11 | "dependencies": { 12 | "express": "^4.17.1", 13 | "open": "^7.0.2", 14 | "socket.io": "2.3.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, strong) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [0.1.2](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.1...v0.1.2) (2020-02-28) 7 | 8 | **Note:** Version bump only for package rn-webrtc-server 9 | 10 | 11 | 12 | 13 | 14 | ## 0.1.1 (2020-02-27) 15 | 16 | **Note:** Version bump only for package rn-webrtc-server 17 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/Custom/AR.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react' 2 | import { requireNativeComponent, NativeModules } from 'react-native' 3 | 4 | const ExampleARSCNView = requireNativeComponent('ExampleARSCNView') 5 | 6 | const { 7 | injectARSession, 8 | revertARSession, 9 | } = NativeModules.ExampleARSCNViewManager 10 | 11 | export default function(props) { 12 | useEffect(() => { 13 | injectARSession() 14 | return () => revertARSession() 15 | }, []) 16 | return 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: [push] 3 | 4 | jobs: 5 | test: 6 | runs-on: macOS-latest 7 | steps: 8 | - uses: actions/checkout@v1 9 | 10 | - uses: actions/setup-node@v1 11 | with: 12 | node-version: 13.x 13 | 14 | - name: Run test 15 | run: | 16 | yarn 17 | yarn lint 18 | cd packages/RNWebRTCARExample 19 | 20 | cd ios 21 | pod repo update 22 | pod install 23 | cd - 24 | xcodebuild -workspace ios/RNWebRTCARExample.xcworkspace -scheme RNWebRTCARExample -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build 25 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/ios/RNWebRTCARSession.podspec: -------------------------------------------------------------------------------- 1 | require 'json' 2 | pkg = JSON.parse(File.read('../package.json')) 3 | 4 | Pod::Spec.new do |s| 5 | s.name = "RNWebRTCARSession" 6 | s.version = pkg["version"] 7 | s.summary = pkg["description"] 8 | s.homepage = pkg["homepage"] 9 | s.license = pkg["license"] 10 | s.author = pkg["author"] 11 | s.platform = :ios, "10.0" 12 | s.source = { :git => pkg["repository"], :tag => "master" } 13 | s.source_files = "**/*.{h,m}" 14 | s.requires_arc = true 15 | 16 | s.dependency "React" 17 | s.dependency "react-native-webrtc" 18 | 19 | end 20 | 21 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/README.md: -------------------------------------------------------------------------------- 1 | # Example for react-native-webrtc-ar-session 2 | 3 | - Example 1: AR scene example with `react-native-arkit` 4 | - Example 2: AR face tracking example with [custom native view](ios/ExampleARSCNViewManager.m) (You can switch it on Setting) 5 | 6 | ## Installation 7 | 8 | ```bash 9 | # OPTIONAL: Run this command if you got `WebRTC.framework does not contain bitcode` build error 10 | $ yarn webrtc-dl-bitcode 11 | 12 | $ cd ios && pod install && cd - 13 | ``` 14 | 15 | ## Usage 16 | 17 | - After opened the app, click `Setting` button to type `Room ID`. 18 | - You can visit [https://rnwebrtc-server.herokuapp.com](https://rnwebrtc-server.herokuapp.com) for test. 19 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-webrtc-ar-session", 3 | "version": "0.1.3", 4 | "description": "Capturing ARKit scene (Like `react-native-arkit`) into `react-native-webrtc` video stream", 5 | "scripts": {}, 6 | "dependencies": { 7 | "invariant": "^2.2.4" 8 | }, 9 | "author": "Jhen-Jie Hong ", 10 | "homepage": "https://github.com/jhen0409/rn-webrtc-arkit-integration", 11 | "repository": "https://github.com/jhen0409/rn-webrtc-arkit-integration", 12 | "keywords": [ 13 | "react-native", 14 | "webrtc", 15 | "react-native-webrtc", 16 | "arkit", 17 | "react-native-arkit" 18 | ], 19 | "license": "MIT" 20 | } 21 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [0.1.3](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.2...v0.1.3) (2020-03-02) 7 | 8 | 9 | ### Features 10 | 11 | * **example:** set frame rate ([ae32ad8](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/ae32ad88ed651ed316b79e6c737bf88585a191cf)) 12 | 13 | 14 | 15 | 16 | 17 | ## [0.1.2](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.1...v0.1.2) (2020-02-28) 18 | 19 | **Note:** Version bump only for package RNWebRTCARExample 20 | 21 | 22 | 23 | 24 | 25 | ## 0.1.1 (2020-02-27) 26 | 27 | **Note:** Version bump only for package RNWebRTCARExample 28 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/utils/signal.js: -------------------------------------------------------------------------------- 1 | import io from 'socket.io-client' 2 | import config from '../config' 3 | 4 | export const createSignalClient = ({ onEvent }) => { 5 | const socket = io.connect(config.signalServer.url, { 6 | transports: ['websocket'], 7 | }) 8 | 9 | socket.on('exchange', data => onEvent('exchange', data)) 10 | socket.on('leave', id => onEvent('leave', id)) 11 | socket.on('connect', data => onEvent('connect', data)) 12 | 13 | return { 14 | _socket: socket, 15 | join(id) { 16 | socket.emit('join', id, socketIds => 17 | onEvent('join', { id, list: socketIds }), 18 | ) 19 | }, 20 | exchange(id, data) { 21 | socket.emit('exchange', { to: id, ...data }) 22 | }, 23 | close() { 24 | socket.close() 25 | onEvent('close') 26 | }, 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | Install _fastlane_ using 12 | ``` 13 | [sudo] gem install fastlane -NV 14 | ``` 15 | or alternatively using `brew cask install fastlane` 16 | 17 | # Available Actions 18 | ## iOS 19 | ### ios beta 20 | ``` 21 | fastlane ios beta 22 | ``` 23 | Push a new beta build to TestFlight 24 | 25 | ---- 26 | 27 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 28 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 29 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 30 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExampleTests/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 | 0.1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 202002270 23 | 24 | 25 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 0.1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 202002270 23 | 24 | 25 | -------------------------------------------------------------------------------- /patches/react-native-arkit+0.9.0.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/react-native-arkit/ios/RCTARKit.podspec b/node_modules/react-native-arkit/ios/RCTARKit.podspec 2 | new file mode 100644 3 | index 0000000..5cb4f39 4 | --- /dev/null 5 | +++ b/node_modules/react-native-arkit/ios/RCTARKit.podspec 6 | @@ -0,0 +1,18 @@ 7 | +require 'json' 8 | +pkg = JSON.parse(File.read('../package.json')) 9 | + 10 | +Pod::Spec.new do |s| 11 | + 12 | + s.name = "RCTARKit" 13 | + s.version = pkg["version"] 14 | + s.summary = pkg["description"] 15 | + s.homepage = pkg["homepage"] 16 | + s.license = pkg["license"] 17 | + s.author = pkg["author"] 18 | + s.platforms = { :ios => "9.0" } 19 | + s.source = { :git => pkg["repository"]["url"], :tag => "#{s.version}" } 20 | + s.source_files = '**/*.{h,m}' 21 | + s.preserve_paths = "**/*.js" 22 | + s.dependency 'React' 23 | + 24 | +end 25 | \ No newline at end of file 26 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/fake-keys/privatekey.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIICXQIBAAKBgQDRKUxB1pLVRQ/dcUEP1p1oTIg0GoEvMPl6s7kC2Mroyovn/FaC 3 | zsgvwYhuwIeA6qgYoNIkSkXMQRmtfTpBvJNqM6A7jpUUmYuaUgqdrh5GZ5FGJjgA 4 | GIRJBWtovqxnCaHcmBYxlj0o/nxDmzgK655WBso7nwpixrzbsV3x7ZG45QIDAQAB 5 | AoGBAJQzUtkDlJ6QhKE+8f6q7nVMZOWmMgqiBOMwHNMrkPpJKcCCRzoAEk/kLSts 6 | N5bcraZlrQARsEr9hZgrtu+FEl1ROdKc6B3bJ5B6FigwY7m8/Z3+YdgwqV6NJGQk 7 | 3twY4PoJEdeZ7GX2QnX8RDjyFvLaZ12jiDic30Nrn1gwvOCxAkEA9Dp5r9yg4DT/ 8 | V4SE5+NPCJmeV7zwfW3XUQHWD4TaFbOCjnjWB/BnrrjXhvd3VNzwajrJvqq/UiM4 9 | bAG4VLz0CwJBANs+IYm3tYfeP5YsYJVMOJ5TcOAZ3T9jMF+QC9/ObwepW4D1woRr 10 | rCYxe01JyZpqqWnfeIUoJ70QL9uP8AgTrM8CQFFqGNymKL71C9XJ6GBA5zzPsPhA 11 | lM7LSgbIHOrJd8XaNIB4CalV28pj9f0ZC5+vkzlmZZB47RRdh1aB8EfXQWcCQGa8 12 | KI8WLNRsCrPeO6v6OZXHV99Lf2eSnTpKj6XiYBjg/WXiw7G1mseS7Ep9RyE61gQs 13 | mZccB/MKQMLMIhhGz/UCQQDog5KBVaMhwrw1hwZ5gDyZs2YrE75522BnAU1ajQj+ 14 | VmTkcBwCtfnbXsWcHnYQnLlvz2Bi9ov2JncmJ5F1kiIw 15 | -----END RSA PRIVATE KEY----- 16 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [0.1.3](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.2...v0.1.3) (2020-03-02) 7 | 8 | 9 | ### Features 10 | 11 | * add frame rate option for startSession ([acd1e48](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/acd1e4890ef91d0a11809a3741bab13952da19fa)) 12 | 13 | 14 | 15 | 16 | 17 | ## [0.1.2](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.1...v0.1.2) (2020-02-28) 18 | 19 | 20 | ### Bug Fixes 21 | 22 | * s.source in podspec ([1de3f82](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/1de3f820f95454565959616619a5cb7ade6d6199)) 23 | 24 | 25 | 26 | 27 | 28 | ## 0.1.1 (2020-02-27) 29 | 30 | **Note:** Version bump only for package react-native-webrtc-ar-session 31 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/index.ios.js: -------------------------------------------------------------------------------- 1 | import { NativeModules } from 'react-native' 2 | import invariant from 'invariant' 3 | 4 | const { RNWebRTCARSession } = NativeModules 5 | 6 | if (RNWebRTCARSession) { 7 | RNWebRTCARSession.init() 8 | } 9 | 10 | const checkNativeModule = () => 11 | invariant( 12 | RNWebRTCARSession, 13 | 'Native Module `react-native-webrtc-ar-session` is not linked.', 14 | ) 15 | 16 | export const startCapturingARView = (options = {}) => { 17 | checkNativeModule() 18 | return RNWebRTCARSession.startSession(options) 19 | } 20 | 21 | export const stopCapturingARView = () => { 22 | checkNativeModule() 23 | return RNWebRTCARSession.stopSession() 24 | } 25 | 26 | export const isARWorldTrackingSupported = () => { 27 | checkNativeModule() 28 | return !!RNWebRTCARSession.AR_WORLD_TRACKING_SUPPORTED 29 | } 30 | 31 | export const isARFaceTrackingSupported = () => { 32 | checkNativeModule() 33 | return !!RNWebRTCARSession.AR_FACE_TRACKING_SUPPORTED 34 | } 35 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/fake-keys/certificate.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIICjTCCAfYCCQC8xCdh8aBfxDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC 3 | VVMxEzARBgNVBAgTCldhc2hpbmd0b24xETAPBgNVBAcTCFJpY2hsYW5kMQ0wCwYD 4 | VQQKFAQmeWV0MQswCQYDVQQLFAImITEVMBMGA1UEAxMMTmF0aGFuIEZyaXR6MSAw 5 | HgYJKoZIhvcNAQkBFhFuYXRoYW5AYW5keWV0Lm5ldDAeFw0xMTEwMTkwNjI2Mzha 6 | Fw0xMTExMTgwNjI2MzhaMIGKMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu 7 | Z3RvbjERMA8GA1UEBxMIUmljaGxhbmQxDTALBgNVBAoUBCZ5ZXQxCzAJBgNVBAsU 8 | AiYhMRUwEwYDVQQDEwxOYXRoYW4gRnJpdHoxIDAeBgkqhkiG9w0BCQEWEW5hdGhh 9 | bkBhbmR5ZXQubmV0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRKUxB1pLV 10 | RQ/dcUEP1p1oTIg0GoEvMPl6s7kC2Mroyovn/FaCzsgvwYhuwIeA6qgYoNIkSkXM 11 | QRmtfTpBvJNqM6A7jpUUmYuaUgqdrh5GZ5FGJjgAGIRJBWtovqxnCaHcmBYxlj0o 12 | /nxDmzgK655WBso7nwpixrzbsV3x7ZG45QIDAQABMA0GCSqGSIb3DQEBBQUAA4GB 13 | ALeMY0Og6SfSNXzvATyR1BYSjJCG19AwR/vafK4vB6ejta37TGEPOM66BdtxH8J7 14 | T3QuMki9Eqid0zPATOttTlAhBeDGzPOzD4ohJu55PwY0jTJ2+qFUiDKmmCuaUbC6 15 | JCt3LWcZMvkkMfsk1HgyUEKat/Lrs/iaVU6TDMFa52v5 16 | -----END CERTIFICATE----- 17 | -------------------------------------------------------------------------------- /.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 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | yarn-error.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | *.keystore 42 | !debug.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [0.1.3](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.2...v0.1.3) (2020-03-02) 7 | 8 | 9 | ### Features 10 | 11 | * **example:** set frame rate ([ae32ad8](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/ae32ad88ed651ed316b79e6c737bf88585a191cf)) 12 | * add frame rate option for startSession ([acd1e48](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/acd1e4890ef91d0a11809a3741bab13952da19fa)) 13 | 14 | 15 | 16 | 17 | 18 | ## [0.1.2](https://github.com/jhen0409/rn-webrtc-arkit-integration/compare/v0.1.1...v0.1.2) (2020-02-28) 19 | 20 | 21 | ### Bug Fixes 22 | 23 | * s.source in podspec ([1de3f82](https://github.com/jhen0409/rn-webrtc-arkit-integration/commit/1de3f820f95454565959616619a5cb7ade6d6199)) 24 | 25 | 26 | 27 | 28 | 29 | ## 0.1.1 (2020-02-27) 30 | 31 | **Note:** Version bump only for package rn-webrtc-arkit-integration 32 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 Jhen-Jie Hong 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/.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 | *.app.dSYM.zip 23 | *.xcuserstate 24 | 25 | # Android/IntelliJ 26 | # 27 | build/ 28 | .idea 29 | .gradle 30 | local.properties 31 | *.iml 32 | 33 | # node.js 34 | # 35 | node_modules/ 36 | npm-debug.log 37 | yarn-error.log 38 | 39 | # BUCK 40 | buck-out/ 41 | \.buckd/ 42 | *.keystore 43 | !debug.keystore 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://docs.fastlane.tools/best-practices/source-control/ 51 | 52 | */fastlane/report.xml 53 | */fastlane/Preview.html 54 | */fastlane/screenshots 55 | 56 | # Bundle artifact 57 | *.jsbundle 58 | 59 | # CocoaPods 60 | /ios/Pods/ 61 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | const path = require('path') 8 | const blacklist = require('metro-config/src/defaults/blacklist') 9 | 10 | module.exports = { 11 | transformer: { 12 | getTransformOptions: async () => ({ 13 | transform: { 14 | experimentalImportSupport: false, 15 | inlineRequires: false, 16 | }, 17 | }), 18 | }, 19 | resolver: { 20 | blacklistRE: blacklist([ 21 | new RegExp(path.resolve('../../node_modules/react/.*')), 22 | new RegExp(path.resolve('../../node_modules/react-native/.*')), 23 | ]), 24 | extraNodeModules: { 25 | react: path.resolve(__dirname, 'node_modules/react'), 26 | 'react-native': path.resolve(__dirname, 'node_modules/react-native'), 27 | }, 28 | }, 29 | serializer: { 30 | processModuleFilter: mod => !mod.path.endsWith('/package.json'), 31 | }, 32 | projectRoot: path.resolve(__dirname), 33 | watchFolders: [ 34 | path.resolve(__dirname, '../../packages'), 35 | path.resolve(__dirname, '../../node_modules'), 36 | ], 37 | } 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![CI Status](https://github.com/jhen0409/rn-webrtc-arkit-integration/workflows/CI/badge.svg)](https://github.com/jhen0409/rn-webrtc-arkit-integration) 2 | 3 | Capturing ARKit scene (Like [`react-native-arkit`](https://github.com/react-native-ar/react-native-arkit)) into [`react-native-webrtc`](https://github.com/react-native-webrtc/react-native-webrtc) video stream. 4 | 5 | - [Package (react-native-webrtc-ar-session)](packages/react-native-webrtc-ar-session) 6 | - [Example](packages/RNWebRTCARExample) 7 | 8 | ## Introdution 9 | 10 | ![demo](https://user-images.githubusercontent.com/3001525/75106771-d3485600-565a-11ea-9355-277c0d80c2fb.png) 11 | 12 | > Demo with iPod Touch (2019) and deployed [test page](https://rnwebrtc-server.herokuapp.com) 13 | 14 | For made integration between ARKit and WebRTC, this plugin continuously capture `[ARSCNView snapshot]` and convert to `RTCVideoFrame`. 15 | 16 | You can use it with `react-native-arkit` or any `ARSCNView` implementation. 17 | 18 | ## Credits 19 | 20 | - [Example](https://github.com/HippoAR/ReactNativeARKit) from [react-native-arkit](https://github.com/react-native-ar/react-native-arkit) 21 | - [react-native-webrtc-server](https://github.com/oney/react-native-webrtc-server) 22 | 23 | ## License 24 | 25 | [MIT](LICENSE.md) 26 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # This file contains the fastlane.tools configuration 2 | # You can find the documentation at https://docs.fastlane.tools 3 | # 4 | # For a list of all available actions, check out 5 | # 6 | # https://docs.fastlane.tools/actions 7 | # 8 | # For a list of all available plugins, check out 9 | # 10 | # https://docs.fastlane.tools/plugins/available-plugins 11 | # 12 | 13 | # Uncomment the line if you want fastlane to automatically update itself 14 | # update_fastlane 15 | 16 | default_platform(:ios) 17 | 18 | platform :ios do 19 | desc "Push a new beta build to TestFlight" 20 | lane :beta do 21 | build_number = get_build_number(xcodeproj: "RNWebRTCARExample.xcodeproj") 22 | if build_number.start_with?(Time.new.strftime("%Y%m%d")) 23 | build_number = (build_number.to_i + 1).to_s 24 | else 25 | build_number = Time.new.strftime("%Y%m%d0") 26 | end 27 | 28 | increment_build_number( 29 | build_number: build_number, 30 | xcodeproj: "RNWebRTCARExample.xcodeproj" 31 | ) 32 | build_app( 33 | workspace: "RNWebRTCARExample.xcworkspace", 34 | scheme: "RNWebRTCARExample", 35 | export_xcargs: "-allowProvisioningUpdates", 36 | ) 37 | upload_to_testflight 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rn-webrtc-arkit-integration", 3 | "private": true, 4 | "workspaces": [ 5 | "packages/*" 6 | ], 7 | "scripts": { 8 | "lint": "eslint .", 9 | "release": "./scripts/release.sh", 10 | "postinstall": "yarnw-sync-deps && yarn --ignore-scripts && patch-package" 11 | }, 12 | "dependencies": { 13 | "@babel/core": "^7.8.4", 14 | "@babel/runtime": "^7.8.4", 15 | "@react-native-community/async-storage": "^1.8.0", 16 | "@react-native-community/eslint-config": "^0.0.7", 17 | "babel-plugin-closure-elimination": "^1.3.0", 18 | "babel-plugin-transform-remove-console": "^6.9.4", 19 | "eslint": "^7.0.0", 20 | "express": "^4.17.1", 21 | "invariant": "^2.2.4", 22 | "lerna": "^3.20.2", 23 | "lodash.debounce": "^4.0.8", 24 | "metro-react-native-babel-preset": "^0.59.0", 25 | "open": "^7.0.2", 26 | "patch-package": "^6.2.0", 27 | "prop-types": "^15.7.2", 28 | "react": "16.9.0", 29 | "react-native": "0.61.5", 30 | "react-native-arkit": "^0.9.0", 31 | "react-native-debugger-open": "^0.3.24", 32 | "react-native-gesture-handler": "^1.6.0", 33 | "react-native-modalize": "^2.0.0", 34 | "react-native-version": "^4.0.0", 35 | "react-native-webrtc": "^1.75.3", 36 | "socket.io": "2.3.0", 37 | "socket.io-client": "^2.3.0", 38 | "yarn-workspace-sync-deps": "^0.3.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNWebRTCARExample", 3 | "version": "0.1.3", 4 | "private": true, 5 | "workspaces": { 6 | "nohoist": [ 7 | "react-native", 8 | "react-native/**" 9 | ] 10 | }, 11 | "scripts": { 12 | "ios": "react-native run-ios", 13 | "webrtc-dl-bitcode": "../../node_modules/react-native-webrtc/tools/downloadBitcode.sh", 14 | "start": "rndebugger-open && react-native start", 15 | "sync-version": "react-native-version -A -B -t ios", 16 | "postinstall": "yarn sync-version" 17 | }, 18 | "dependencies": { 19 | "@react-native-community/async-storage": "^1.8.0", 20 | "lodash.debounce": "^4.0.8", 21 | "react": "16.9.0", 22 | "react-native": "0.61.5", 23 | "react-native-arkit": "^0.9.0", 24 | "react-native-gesture-handler": "^1.6.0", 25 | "react-native-modalize": "^2.0.0", 26 | "react-native-webrtc": "^1.75.3", 27 | "react-native-webrtc-ar-session": "^0.1.3", 28 | "socket.io-client": "^2.3.0" 29 | }, 30 | "devDependencies": { 31 | "@babel/core": "^7.8.4", 32 | "@babel/runtime": "^7.8.4", 33 | "babel-plugin-closure-elimination": "^1.3.0", 34 | "babel-plugin-transform-remove-console": "^6.9.4", 35 | "metro-react-native-babel-preset": "^0.59.0", 36 | "react-native-debugger-open": "^0.3.24", 37 | "react-native-version": "^4.0.0" 38 | }, 39 | "jest": { 40 | "preset": "react-native" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/AR.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { StyleSheet } from 'react-native' 3 | import { ARKit } from 'react-native-arkit' 4 | import ARFaceTracking from './Custom/AR' 5 | 6 | const styles = StyleSheet.create({ 7 | container: { flex: 1, backgroundColor: 'black' }, 8 | }) 9 | 10 | export default function AR(props) { 11 | const { faceTracking, debug } = props 12 | if (faceTracking) { 13 | return 14 | } 15 | return ( 16 | 23 | 28 | 36 | 41 | 49 | 50 | ) 51 | } 52 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | signalServer: { url: 'https://rnwebrtc-server.herokuapp.com' }, 3 | pc: { 4 | iceServers: [ 5 | { url: 'stun:stun.l.google.com:19302' }, 6 | { url: 'stun:stun01.sipphone.com' }, 7 | { url: 'stun:stun.ekiga.net' }, 8 | { url: 'stun:stun.fwdnet.net' }, 9 | { url: 'stun:stun.ideasip.com' }, 10 | { url: 'stun:stun.iptel.org' }, 11 | { url: 'stun:stun.rixtelecom.se' }, 12 | { url: 'stun:stun.schlund.de' }, 13 | { url: 'stun:stun.l.google.com:19302' }, 14 | { url: 'stun:stun1.l.google.com:19302' }, 15 | { url: 'stun:stun2.l.google.com:19302' }, 16 | { url: 'stun:stun3.l.google.com:19302' }, 17 | { url: 'stun:stun4.l.google.com:19302' }, 18 | { url: 'stun:stunserver.org' }, 19 | { url: 'stun:stun.softjoys.com' }, 20 | { url: 'stun:stun.voiparound.com' }, 21 | { url: 'stun:stun.voipbuster.com' }, 22 | { url: 'stun:stun.voipstunt.com' }, 23 | { url: 'stun:stun.voxgratia.org' }, 24 | { url: 'stun:stun.xten.com' }, 25 | { 26 | url: 'turn:numb.viagenie.ca', 27 | credential: 'muazkh', 28 | username: 'webrtc@live.com', 29 | }, 30 | { 31 | url: 'turn:192.158.29.39:3478?transport=udp', 32 | credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 33 | username: '28224511:1379330808', 34 | }, 35 | { 36 | url: 'turn:192.158.29.39:3478?transport=tcp', 37 | credential: 'JZEOEt2V3Qb0y27GRntt2u2PAYA=', 38 | username: '28224511:1379330808', 39 | }, 40 | ], 41 | }, 42 | } 43 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import "AppDelegate.h" 9 | 10 | #import 11 | #import 12 | #import 13 | 14 | @implementation AppDelegate 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; 19 | RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge 20 | moduleName:@"RNWebRTCARExample" 21 | initialProperties:nil]; 22 | 23 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 24 | 25 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 26 | UIViewController *rootViewController = [UIViewController new]; 27 | rootViewController.view = rootView; 28 | self.window.rootViewController = rootViewController; 29 | [self.window makeKeyAndVisible]; 30 | return YES; 31 | } 32 | 33 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 34 | { 35 | #if DEBUG 36 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 37 | #else 38 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 39 | #endif 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample-tvOS/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 | APPL 17 | CFBundleShortVersionString 18 | 0.1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 202002270 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | localhost 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | 35 | 36 | NSLocationWhenInUseUsageDescription 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const fs = require('fs') 3 | const path = require('path') 4 | const open = require('open') 5 | const https = require('https') 6 | const http = require('http') 7 | const IO = require('socket.io') 8 | 9 | const app = express() 10 | const options = { 11 | key: fs.readFileSync('./fake-keys/privatekey.pem'), 12 | cert: fs.readFileSync('./fake-keys/certificate.pem'), 13 | } 14 | 15 | const serverPort = process.env.PORT || 4443 16 | 17 | let server 18 | if (process.env.LOCAL) { 19 | server = https.createServer(options, app) 20 | } else { 21 | server = http.createServer(app) 22 | } 23 | const io = new IO(server) 24 | 25 | app.use(express.static(path.join(__dirname, 'public'))) 26 | 27 | server.listen(serverPort, () => { 28 | console.log('server up and running at %s port', serverPort) 29 | if (process.env.LOCAL) { 30 | open('https://localhost:' + serverPort) 31 | } 32 | }) 33 | 34 | function socketIdsInRoom(name) { 35 | const room = io.nsps['/'].adapter.rooms[name] 36 | if (room) { 37 | return Object.keys(room.sockets) 38 | } 39 | return [] 40 | } 41 | 42 | io.on('connection', socket => { 43 | console.log('connection') 44 | socket.on('disconnect', () => { 45 | console.log('disconnect') 46 | if (socket.room) { 47 | const { room } = socket 48 | io.to(room).emit('leave', socket.id) 49 | socket.leave(room) 50 | } 51 | }) 52 | 53 | socket.on('join', (name, callback) => { 54 | console.log('join', name) 55 | const socketIds = socketIdsInRoom(name) 56 | callback(socketIds) 57 | socket.join(name) 58 | socket.room = name 59 | }) 60 | 61 | socket.on('exchange', data => { 62 | console.log('exchange', data) 63 | data.from = socket.id 64 | const to = io.sockets.connected[data.to] 65 | if (to) { 66 | to.emit('exchange', data) 67 | } 68 | }) 69 | }) 70 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ARKit WebRTC Example 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 | 0.1.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 202002270 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | NSExceptionDomains 32 | 33 | localhost 34 | 35 | NSExceptionAllowsInsecureHTTPLoads 36 | 37 | 38 | 39 | 40 | NSCameraUsageDescription 41 | Used for AR session and WebRTC 42 | NSLocationWhenInUseUsageDescription 43 | 44 | NSMicrophoneUsageDescription 45 | Used for WebRTC 46 | UILaunchStoryboardName 47 | LaunchScreen 48 | UIRequiredDeviceCapabilities 49 | 50 | armv7 51 | 52 | UIRequiresFullScreen 53 | 54 | UISupportedInterfaceOrientations 55 | 56 | UIInterfaceOrientationPortrait 57 | UIInterfaceOrientationLandscapeLeft 58 | UIInterfaceOrientationLandscapeRight 59 | 60 | UIViewControllerBasedStatusBarAppearance 61 | 62 | ITSAppUsesNonExemptEncryption 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/ExampleARSCNViewManager.m: -------------------------------------------------------------------------------- 1 | #import "ExampleARSCNViewManager.h" 2 | #import 3 | #import 4 | 5 | @interface ExampleARSCNViewManager () 6 | 7 | @end 8 | 9 | @implementation ExampleARSCNViewManager 10 | 11 | static ARSCNView *_arView = nil; 12 | 13 | RCT_EXPORT_MODULE() 14 | 15 | - (UIView *)view 16 | { 17 | return [self instance]; 18 | } 19 | 20 | - (ARSCNView*)instance { 21 | if (_arView != nil) { 22 | return _arView; 23 | } 24 | ARSCNView *arView = [[ARSCNView alloc] init]; 25 | arView.delegate = self; 26 | arView.session.delegate = self; 27 | arView.showsStatistics = true; 28 | _arView = arView; 29 | [self resume]; 30 | return _arView; 31 | } 32 | 33 | RCT_CUSTOM_VIEW_PROPERTY(debug, BOOL, ARSCNView) { 34 | _arView.showsStatistics = [RCTConvert BOOL:json]; 35 | } 36 | 37 | - (void)pause { 38 | [_arView.session pause]; 39 | } 40 | 41 | - (void)resume { 42 | ARFaceTrackingConfiguration *configuration = [ARFaceTrackingConfiguration new]; 43 | [_arView.session runWithConfiguration:configuration]; 44 | } 45 | 46 | #pragma mark - ARSCNViewDelegate 47 | - (nullable SCNNode *)renderer:(id )renderer nodeForAnchor:(ARAnchor *)anchor { 48 | ARSCNFaceGeometry *faceMesh = [ARSCNFaceGeometry faceGeometryWithDevice:_arView.device]; 49 | SCNNode *node = [SCNNode nodeWithGeometry:faceMesh]; 50 | node.geometry.firstMaterial.fillMode = SCNFillModeLines; 51 | return node; 52 | } 53 | 54 | - (void)renderer:(id )renderer didUpdateNode:(SCNNode *)node forAnchor:(ARAnchor *)anchor { 55 | if ([anchor isKindOfClass:[ARFaceAnchor class]] && [node.geometry isKindOfClass:[ARSCNFaceGeometry class]]) { 56 | ARFaceAnchor *faceAnchor = anchor; 57 | ARSCNFaceGeometry *faceMesh = node.geometry; 58 | [faceMesh updateFromFaceGeometry:faceAnchor.geometry]; 59 | } 60 | } 61 | 62 | 63 | RCT_EXPORT_METHOD(injectARSession:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { 64 | [RNWebRTCARSession setArView:_arView]; 65 | resolve(@{}); 66 | } 67 | 68 | RCT_EXPORT_METHOD(revertARSession:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { 69 | [RNWebRTCARSession setArView:nil]; 70 | resolve(@{}); 71 | } 72 | 73 | @end 74 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExampleTests/RNWebRTCARExampleTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | #import 12 | #import 13 | 14 | #define TIMEOUT_SECONDS 600 15 | #define TEXT_TO_LOOK_FOR @"Welcome to React" 16 | 17 | @interface RNWebRTCARExampleTests : XCTestCase 18 | 19 | @end 20 | 21 | @implementation RNWebRTCARExampleTests 22 | 23 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 24 | { 25 | if (test(view)) { 26 | return YES; 27 | } 28 | for (UIView *subview in [view subviews]) { 29 | if ([self findSubviewInView:subview matching:test]) { 30 | return YES; 31 | } 32 | } 33 | return NO; 34 | } 35 | 36 | - (void)testRendersWelcomeScreen 37 | { 38 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; 39 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 40 | BOOL foundElement = NO; 41 | 42 | __block NSString *redboxError = nil; 43 | #ifdef DEBUG 44 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 45 | if (level >= RCTLogLevelError) { 46 | redboxError = message; 47 | } 48 | }); 49 | #endif 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | #ifdef DEBUG 64 | RCTSetLogFunction(RCTDefaultLogFunction); 65 | #endif 66 | 67 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 68 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 69 | } 70 | 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/README.md: -------------------------------------------------------------------------------- 1 | # react-native-webrtc-ar-session 2 | 3 | Capturing ARKit scene (Like [`react-native-arkit`](https://github.com/react-native-ar/react-native-arkit)) into [`react-native-webrtc`](https://github.com/react-native-webrtc/react-native-webrtc) video stream. 4 | 5 | - [Example](https://github.com/jhen0409/rn-webrtc-arkit-integration/tree/master/packages/RNWebRTCARExample) 6 | 7 | # Installation 8 | 9 | - Required use the [react-native-webrtc patch](https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/patches/react-native-webrtc%2B1.75.3.patch). (You can use [`patch-package`](https://github.com/ds300/patch-package)) 10 | - Add dependency with `yarn add react-native-webrtc-ar-session` 11 | - You may need to run `react-native link react-native-webrtc-ar-session` or autolinking. 12 | 13 | ## Usage 14 | 15 | After using [this react-native-webrtc patch](https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/patches/react-native-webrtc%2B1.75.3.patch), we need to set `ar: true` in `video` property of `mediaDevices.getUserMedia(...)`. (See [the example](https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/packages/RNWebRTCARExample/js/utils/rtc.js#L26-L28)) 16 | 17 | ```js 18 | import { 19 | isARWorldTrackingSupported, 20 | startCapturingARView, 21 | stopCapturingARView, 22 | } from 'react-native-webrtc-ar-session' 23 | 24 | // Check the device is support AR World Tracking 25 | isARWorldTrackingSupported() 26 | 27 | // Start capturing view into WebRTC video stream 28 | // You can call it after WebRTC and ARKit view is ready 29 | startCapturingARView({ 30 | frameRate: 30, // Default to ARSCNView.preferredFramesPerSecond (Default: 60) 31 | }).then(({ success }) => console.log('Start session:', success)) 32 | 33 | stopCapturingARView() 34 | ``` 35 | 36 | ## Use another ARSCNView instead of `react-native-arkit` 37 | 38 | You can have native ARSCNView setup without `react-native-arkit`: 39 | 40 | ```objective-c 41 | // Add to your header file 42 | #import 43 | 44 | [RNWebRTCARSession setArView:__your_arscnview_here__]; 45 | ``` 46 | 47 | [Example](https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/packages/RNWebRTCARExample/ios/ExampleARSCNViewManager.m) 48 | 49 | ## License 50 | 51 | [MIT](https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/LICENSE.md) 52 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore polyfills 9 | node_modules/react-native/Libraries/polyfills/.* 10 | 11 | ; These should not be required directly 12 | ; require from fbjs/lib instead: require('fbjs/lib/warning') 13 | node_modules/warning/.* 14 | 15 | ; Flow doesn't support platforms 16 | .*/Libraries/Utilities/LoadingView.js 17 | 18 | [untyped] 19 | .*/node_modules/@react-native-community/cli/.*/.* 20 | 21 | [include] 22 | 23 | [libs] 24 | node_modules/react-native/Libraries/react-native/react-native-interface.js 25 | node_modules/react-native/flow/ 26 | 27 | [options] 28 | emoji=true 29 | 30 | esproposal.optional_chaining=enable 31 | esproposal.nullish_coalescing=enable 32 | 33 | module.file_ext=.js 34 | module.file_ext=.json 35 | module.file_ext=.ios.js 36 | 37 | munge_underscores=true 38 | 39 | module.name_mapper='^react-native$' -> '/node_modules/react-native/Libraries/react-native/react-native-implementation' 40 | module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' 41 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' 42 | 43 | suppress_type=$FlowIssue 44 | suppress_type=$FlowFixMe 45 | suppress_type=$FlowFixMeProps 46 | suppress_type=$FlowFixMeState 47 | 48 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) 49 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ 50 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 51 | 52 | [lints] 53 | sketchy-null-number=warn 54 | sketchy-null-mixed=warn 55 | sketchy-number=warn 56 | untyped-type-import=warn 57 | nonstrict-import=warn 58 | deprecated-type=warn 59 | unsafe-getters-setters=warn 60 | inexact-spread=warn 61 | unnecessary-invariant=warn 62 | signature-verification-failure=warn 63 | deprecated-utility=error 64 | 65 | [strict] 66 | deprecated-type 67 | nonstrict-import 68 | sketchy-null 69 | unclear-type 70 | unsafe-getters-setters 71 | untyped-import 72 | untyped-type-import 73 | 74 | [version] 75 | ^0.105.0 76 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/App.js: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState, useCallback } from 'react' 2 | import { StyleSheet, SafeAreaView } from 'react-native' 3 | import { RTCView } from 'react-native-webrtc' 4 | import { isARWorldTrackingSupported } from 'react-native-webrtc-ar-session' 5 | import { createWebRTCClient } from './utils/rtc' 6 | import AR from './AR' 7 | import Setting from './Setting' 8 | 9 | const styles = StyleSheet.create({ 10 | container: { flex: 1, backgroundColor: 'black' }, 11 | remoteContainer: { position: 'absolute', top: 0, right: 0 }, 12 | remote: { width: 150, height: 200, backgroundColor: 'black' }, 13 | }) 14 | 15 | const ar = isARWorldTrackingSupported() 16 | 17 | export default function App() { 18 | const [setting, setSetting] = useState({ 19 | debug: __DEV__, 20 | arEnabled: ar, 21 | faceTracking: false, 22 | }) 23 | const [localStreamURL, setLocalStreamURL] = useState(null) 24 | const [remoteStreams, setRemoteStreams] = useState({}) 25 | useEffect(() => { 26 | if (!setting.roomId) { 27 | return 28 | } 29 | const client = createWebRTCClient({ 30 | ar: setting.arEnabled, 31 | onLocalStream: stream => { 32 | setLocalStreamURL(stream.toURL()) 33 | client.join(setting.roomId) 34 | }, 35 | onAddStream: (id, stream) => 36 | setRemoteStreams(streams => ({ 37 | ...streams, 38 | [id]: stream.toURL(), 39 | })), 40 | onRemoveStream: id => 41 | setRemoteStreams(streams => { 42 | delete streams[id] 43 | return streams 44 | }), 45 | onLog: console.log, 46 | onError: console.log, 47 | }) 48 | 49 | return () => { 50 | setLocalStreamURL(null) 51 | setRemoteStreams({}) 52 | client.close() 53 | } 54 | }, [setting.roomId, setting.arEnabled, setting.faceTracking]) 55 | 56 | const handleSettingChange = useCallback( 57 | (name, value) => 58 | setSetting(state => ({ 59 | ...state, 60 | [name]: value, 61 | })), 62 | [setSetting], 63 | ) 64 | 65 | return ( 66 | <> 67 | {setting.arEnabled ? ( 68 | 69 | ) : ( 70 | 71 | )} 72 | 73 | {Object.entries(remoteStreams).map(([id, streamURL], index) => ( 74 | 75 | ))} 76 | 77 | 78 | 79 | ) 80 | } 81 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-Notification@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-Notification@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-Small@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-Small@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-Small-40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-Small-40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon-Notification.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-Notification@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-Small.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-Small@2x-1.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-Small-40.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-Small-40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-76.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "icon.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '10.0' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | target 'RNWebRTCARExample' do 5 | # Pods for RNWebRTCARExample 6 | pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" 7 | pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" 8 | pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" 9 | pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" 10 | pod 'React', :path => '../node_modules/react-native/' 11 | pod 'React-Core', :path => '../node_modules/react-native/' 12 | pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' 13 | pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' 14 | pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' 15 | pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' 16 | pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' 17 | pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' 18 | pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' 19 | pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' 20 | pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' 21 | pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' 22 | pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' 23 | pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' 24 | 25 | pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' 26 | pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' 27 | pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' 28 | pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' 29 | pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" 30 | pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" 31 | pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' 32 | 33 | pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' 34 | pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' 35 | pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' 36 | 37 | target 'RNWebRTCARExampleTests' do 38 | inherit! :search_paths 39 | # Pods for testing 40 | end 41 | 42 | use_native_modules! 43 | end 44 | 45 | target 'RNWebRTCARExample-tvOS' do 46 | # Pods for RNWebRTCARExample-tvOS 47 | 48 | target 'RNWebRTCARExample-tvOSTests' do 49 | inherit! :search_paths 50 | # Pods for testing 51 | end 52 | 53 | end 54 | -------------------------------------------------------------------------------- /patches/react-native-webrtc+1.75.3.patch: -------------------------------------------------------------------------------- 1 | diff --git a/node_modules/react-native-webrtc/RTCUtil.js b/node_modules/react-native-webrtc/RTCUtil.js 2 | index 8beb4f0..7adda7b 100644 3 | --- a/node_modules/react-native-webrtc/RTCUtil.js 4 | +++ b/node_modules/react-native-webrtc/RTCUtil.js 5 | @@ -72,7 +72,8 @@ function normalizeMediaConstraints(constraints, mediaType) { 6 | facingMode: extractString(constraints, 'facingMode'), 7 | frameRate: extractNumber(constraints.mandatory, 'minFrameRate'), 8 | height: extractNumber(constraints.mandatory, 'minHeight'), 9 | - width: extractNumber(constraints.mandatory, 'minWidth') 10 | + width: extractNumber(constraints.mandatory, 'minWidth'), 11 | + ar: !!constraints.ar, 12 | }; 13 | } else { 14 | // New style. 15 | @@ -81,7 +82,8 @@ function normalizeMediaConstraints(constraints, mediaType) { 16 | facingMode: extractString(constraints, 'facingMode'), 17 | frameRate: extractNumber(constraints, 'frameRate'), 18 | height: extractNumber(constraints, 'height'), 19 | - width: extractNumber(constraints, 'width') 20 | + width: extractNumber(constraints, 'width'), 21 | + ar: !!constraints.ar, 22 | }; 23 | } 24 | 25 | diff --git a/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m b/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m 26 | index 06063dd..02c9137 100644 27 | --- a/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m 28 | +++ b/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m 29 | @@ -16,6 +16,11 @@ 30 | 31 | @implementation WebRTCModule (RTCMediaStream) 32 | 33 | +static RTCVideoSource *_arVideSource = nil; 34 | ++ (RTCVideoSource *)arVideoSource { 35 | + return _arVideSource; 36 | +} 37 | + 38 | #pragma mark - getUserMedia 39 | 40 | /** 41 | @@ -40,6 +45,10 @@ - (RTCVideoTrack *)createVideoTrack:(NSDictionary *)constraints { 42 | NSString *trackUUID = [[NSUUID UUID] UUIDString]; 43 | RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithSource:videoSource trackId:trackUUID]; 44 | 45 | + 46 | + if ([constraints[@"video"][@"ar"] boolValue]) { 47 | + _arVideSource = videoSource; 48 | + } else { 49 | #if !TARGET_IPHONE_SIMULATOR 50 | RTCCameraVideoCapturer *videoCapturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:videoSource]; 51 | VideoCaptureController *videoCaptureController 52 | @@ -48,6 +57,7 @@ - (RTCVideoTrack *)createVideoTrack:(NSDictionary *)constraints { 53 | videoTrack.videoCaptureController = videoCaptureController; 54 | [videoCaptureController startCapture]; 55 | #endif 56 | + } 57 | 58 | return videoTrack; 59 | } 60 | diff --git a/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule.h b/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule.h 61 | index ec0c14b..a6624de 100644 62 | --- a/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule.h 63 | +++ b/node_modules/react-native-webrtc/ios/RCTWebRTC/WebRTCModule.h 64 | @@ -34,4 +34,6 @@ 65 | 66 | - (RTCMediaStream*)streamForReactTag:(NSString*)reactTag; 67 | 68 | ++ (RTCVideoSource *)arVideoSource; 69 | + 70 | @end 71 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample.xcodeproj/xcshareddata/xcschemes/RNWebRTCARExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample.xcodeproj/xcshareddata/xcschemes/RNWebRTCARExample-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 43 | 49 | 50 | 51 | 52 | 53 | 58 | 59 | 61 | 67 | 68 | 69 | 70 | 71 | 77 | 78 | 79 | 80 | 81 | 82 | 92 | 94 | 100 | 101 | 102 | 103 | 104 | 105 | 111 | 113 | 119 | 120 | 121 | 122 | 124 | 125 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/Setting.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect, useRef, useMemo } from 'react' 2 | import PropTypes from 'prop-types' 3 | import { 4 | StyleSheet, 5 | View, 6 | Text, 7 | TextInput, 8 | SafeAreaView, 9 | Switch, 10 | TouchableOpacity, 11 | Linking, 12 | } from 'react-native' 13 | import { Modalize } from 'react-native-modalize' 14 | import { 15 | isARWorldTrackingSupported, 16 | isARFaceTrackingSupported, 17 | } from 'react-native-webrtc-ar-session' 18 | import AsyncStorage from '@react-native-community/async-storage' 19 | import debounce from 'lodash.debounce' 20 | 21 | const styles = StyleSheet.create({ 22 | bottomWrap: { 23 | position: 'absolute', 24 | bottom: 4, 25 | left: 72, 26 | right: 0, 27 | justifyContent: 'center', 28 | alignItems: 'center', 29 | }, 30 | button: { 31 | height: 24, 32 | backgroundColor: '#aaaa', 33 | justifyContent: 'center', 34 | borderRadius: 8, 35 | padding: 4, 36 | paddingHorizontal: 16, 37 | }, 38 | buttonText: { fontSize: 12, color: 'black', alignSelf: 'center' }, 39 | 40 | modal: { padding: 16, backgroundColor: '#333a' }, 41 | title: { 42 | color: '#ccc', 43 | fontSize: 32, 44 | fontWeight: '600', 45 | marginBottom: 16, 46 | }, 47 | field: { 48 | color: '#ccc', 49 | fontSize: 20, 50 | fontWeight: '500', 51 | marginBottom: 8, 52 | }, 53 | fieldInput: { 54 | color: '#ccc', 55 | fontSize: 16, 56 | borderBottomWidth: StyleSheet.hairlineWidth, 57 | borderBottomColor: '#ccc', 58 | padding: 4, 59 | }, 60 | textContainer: { 61 | flex: 1, 62 | alignItems: 'center', 63 | flexDirection: 'row', 64 | padding: 8, 65 | }, 66 | text: { fontSize: 12, color: '#999' }, 67 | link: { color: '#2980b9', fontSize: 12 }, 68 | 69 | roomId: { marginVertical: 8 }, 70 | switch: { 71 | marginVertical: 8, 72 | flexDirection: 'row', 73 | justifyContent: 'space-between', 74 | }, 75 | }) 76 | 77 | const readme = 78 | 'https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/packages/RNWebRTCARExample/README.md#usage' 79 | 80 | export default function Settings(props) { 81 | const modal = useRef(null) 82 | const { onChange } = props 83 | const [roomId, setRoomId] = useState('') 84 | const [debug, setDebug] = useState(__DEV__) 85 | const [arEnabled, setAREnabled] = useState(true) 86 | const [faceTracking, setFaceTracking] = useState(false) 87 | 88 | useEffect(() => { 89 | AsyncStorage.getItem('roomId').then(setRoomId) 90 | }, []) 91 | 92 | useEffect(() => { 93 | AsyncStorage.setItem('roomId', roomId || '').then(() => { 94 | onChange('roomId', roomId) 95 | }) 96 | }, [onChange, roomId]) 97 | 98 | useEffect(() => { 99 | onChange('debug', debug) 100 | }, [onChange, debug]) 101 | 102 | useEffect(() => { 103 | onChange('arEnabled', arEnabled) 104 | }, [onChange, arEnabled]) 105 | 106 | useEffect(() => { 107 | onChange('faceTracking', faceTracking) 108 | }, [onChange, faceTracking]) 109 | 110 | const handleRoomIdChange = useMemo( 111 | () => 112 | debounce(id => { 113 | if (roomId !== id) { 114 | setRoomId(id) 115 | } 116 | }, 2e3), 117 | [roomId, setRoomId], 118 | ) 119 | 120 | return ( 121 | <> 122 | 123 | { 126 | if (modal.current) { 127 | modal.current.open() 128 | } 129 | }} 130 | > 131 | Settings 132 | 133 | 134 | 135 | Settings 136 | 137 | Room ID (WebRTC) 138 | 143 | 144 | {isARWorldTrackingSupported() && ( 145 | setAREnabled(val => !val)} 148 | > 149 | Enable AR scene 150 | 151 | 152 | )} 153 | {isARWorldTrackingSupported() && ( 154 | setDebug(val => !val)} 157 | > 158 | Debug AR scene 159 | 160 | 161 | )} 162 | {isARFaceTrackingSupported() && ( 163 | setFaceTracking(val => !val)} 166 | > 167 | Face Tracking Example 168 | 169 | 170 | )} 171 | 172 | Visit 173 | Linking.openURL(readme)}> 174 | this website 175 | 176 | for more information. 177 | 178 | 179 | 180 | ) 181 | } 182 | 183 | Settings.propTypes = { 184 | onChange: PropTypes.func, 185 | } 186 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/js/utils/rtc.js: -------------------------------------------------------------------------------- 1 | import { 2 | RTCPeerConnection, 3 | RTCIceCandidate, 4 | RTCSessionDescription, 5 | mediaDevices, 6 | } from 'react-native-webrtc' 7 | import { 8 | isARWorldTrackingSupported, 9 | startCapturingARView, 10 | stopCapturingARView, 11 | } from 'react-native-webrtc-ar-session' 12 | import config from '../config' 13 | import { createSignalClient } from './signal' 14 | 15 | const fps = 30 16 | 17 | async function getLocalStream(isFront, ar) { 18 | const sourceInfos = await mediaDevices.enumerateDevices() 19 | let videoSourceId 20 | sourceInfos.some(info => { 21 | if (info.kind === 'video' && info.facing === (isFront ? 'front' : 'back')) { 22 | videoSourceId = info.id 23 | } 24 | }) 25 | return mediaDevices.getUserMedia({ 26 | audio: true, 27 | video: { 28 | // NOTE: Specified field by using patch: 29 | // https://github.com/jhen0409/rn-webrtc-arkit-integration/blob/master/patches/react-native-webrtc%2B1.75.3.patch#L45 30 | ar: ar && isARWorldTrackingSupported(), 31 | mandatory: { 32 | // minWidth: 500, 33 | // minHeight: 300, 34 | minFrameRate: fps, 35 | }, 36 | facingMode: isFront ? 'user' : 'environment', 37 | optional: videoSourceId ? [{ sourceId: videoSourceId }] : [], 38 | }, 39 | }) 40 | } 41 | 42 | export const createWebRTCClient = ({ 43 | ar, 44 | onLocalStream, 45 | onAddStream, 46 | onRemoveStream, 47 | onPeerLeave, 48 | onLog, 49 | onError, 50 | }) => { 51 | const peers = {} 52 | 53 | let client 54 | let localStream 55 | 56 | const getStats = () => { 57 | const peer = peers[Object.keys(peers)[0]] 58 | if ( 59 | peer.getRemoteStreams()[0] && 60 | peer.getRemoteStreams()[0].getAudioTracks()[0] 61 | ) { 62 | const track = peer.getRemoteStreams()[0].getAudioTracks()[0] 63 | onLog('track', track) 64 | peer 65 | .getStats(track) 66 | .then(report => onLog('getStats report', report)) 67 | .catch(onError) 68 | } 69 | } 70 | 71 | const createPeerConnection = (id, isOffer) => { 72 | const peer = new RTCPeerConnection(config.pc) 73 | peers[id] = peer 74 | 75 | peer.onicecandidate = event => { 76 | onLog('onicecandidate', event.candidate) 77 | if (event.candidate) { 78 | client.exchange(id, { candidate: event.candidate }) 79 | } 80 | } 81 | 82 | const createOffer = async () => { 83 | const description = await peer.createOffer() 84 | onLog('createOffer', description) 85 | await peer.setLocalDescription(description) 86 | onLog('setLocalDescription', peer.localDescription) 87 | client.exchange(id, { sdp: peer.localDescription }) 88 | } 89 | 90 | peer.onnegotiationneeded = () => { 91 | onLog('onnegotiationneeded') 92 | if (isOffer) { 93 | createOffer().catch(onError) 94 | } 95 | } 96 | peer.onicepeerstatechange = event => { 97 | const { iceConnectionState } = event.target 98 | onLog('onicepeerstatechange', iceConnectionState) 99 | if (iceConnectionState === 'completed') { 100 | setTimeout(getStats, 1e3) 101 | } 102 | } 103 | peer.onsignalingstatechange = event => { 104 | onLog('onsignalingstatechange', event.target.signalingState) 105 | } 106 | peer.onaddstream = event => { 107 | onLog('onaddstream', id, event.stream) 108 | onAddStream(id, event.stream) 109 | } 110 | peer.onremovestream = event => { 111 | onLog('onremovestream', id, event.stream) 112 | onRemoveStream(id) 113 | } 114 | peer.addStream(localStream) 115 | return peer 116 | } 117 | 118 | const exchange = async data => { 119 | const { from: id } = data 120 | const peer = id in peers ? peers[id] : createPeerConnection(id, false) 121 | 122 | if (data.sdp) { 123 | onLog('exchange sdp', data) 124 | await peer.setRemoteDescription(new RTCSessionDescription(data.sdp)) 125 | if (peer.remoteDescription.type === 'offer') { 126 | const desc = await peer.createAnswer() 127 | onLog('createAnswer', desc) 128 | await peer.setLocalDescription(desc) 129 | onLog('setLocalDescription', peer.localDescription) 130 | client.exchange(id, { sdp: peer.localDescription }) 131 | } 132 | } else { 133 | onLog('exchange candidate', data) 134 | peer.addIceCandidate(new RTCIceCandidate(data.candidate)) 135 | } 136 | } 137 | 138 | const leave = id => { 139 | const peer = peers[id] 140 | if (!peer) { 141 | return 142 | } 143 | peer.close() 144 | delete peers[id] 145 | onLog('leave', id) 146 | onRemoveStream(id) 147 | } 148 | 149 | client = createSignalClient({ 150 | onEvent: (type, payload) => { 151 | switch (type) { 152 | case 'join': 153 | onLog('join', payload) 154 | payload.list.forEach(id => createPeerConnection(id, true)) 155 | break 156 | case 'connect': 157 | onLog('connect') 158 | getLocalStream(false, ar).then(stream => { 159 | localStream = stream 160 | onLocalStream(stream) 161 | if (ar) { 162 | startCapturingARView({ frameRate: fps }).then(result => 163 | onLog('Start WebRTC AR session', result), 164 | ) 165 | } 166 | }) 167 | break 168 | case 'exchange': 169 | exchange(payload).catch(onError) 170 | break 171 | case 'leave': 172 | leave(payload) 173 | break 174 | case 'close': 175 | Object.entries(peers).forEach(([id, peer]) => { 176 | delete peers[id] 177 | peer.close() 178 | }) 179 | if (localStream) { 180 | localStream.release() 181 | } 182 | stopCapturingARView() 183 | break 184 | } 185 | }, 186 | }) 187 | 188 | return { 189 | ...client, 190 | getPeers: () => peers, 191 | } 192 | } 193 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/ios/RNWebRTCARSession.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import "RNWebRTCARSession.h" 3 | #import 4 | #import 5 | #import 6 | #import 7 | #import 8 | #import 9 | 10 | @interface RNWebRTCARSession () 11 | 12 | @property (nonatomic,strong) dispatch_source_t timer; 13 | 14 | 15 | @end 16 | 17 | @implementation RNWebRTCARSession 18 | 19 | RCT_EXPORT_MODULE() 20 | 21 | + (BOOL)requiresMainQueueSetup 22 | { 23 | return YES; 24 | } 25 | 26 | - (NSDictionary *)constantsToExport 27 | { 28 | if (@available(iOS 11.0, *)) { 29 | return @{ 30 | @"AR_WORLD_TRACKING_SUPPORTED": @(ARWorldTrackingConfiguration.isSupported), 31 | @"AR_FACE_TRACKING_SUPPORTED": @(ARFaceTrackingConfiguration.isSupported) 32 | }; 33 | } else { 34 | return @{ 35 | @"AR_WORLD_TRACKING_SUPPORTED": @(NO), 36 | @"AR_FACE_TRACKING_SUPPORTED": @(NO), 37 | }; 38 | } 39 | } 40 | 41 | static RTCVideoCapturer *_dummyCapturer; 42 | static RTCVideoSource *_videoSource; 43 | API_AVAILABLE(ios(11.0)) 44 | static ARSCNView *_arView; 45 | 46 | #pragma mark - RNWebRTCARSession 47 | 48 | - (CVPixelBufferRef)getPixelBufferFromCGImage:(UIImage *)uiimage { 49 | CGImageRef imageRef = uiimage.CGImage; 50 | 51 | CGDataProviderRef provider = CGImageGetDataProvider(imageRef); 52 | CFDataRef pixelData = CGDataProviderCopyData(provider); 53 | const unsigned char *data = CFDataGetBytePtr(pixelData); 54 | 55 | size_t frameWidth = CGImageGetWidth(imageRef); 56 | size_t frameHeight = CGImageGetHeight(imageRef); 57 | 58 | CFRelease(pixelData); 59 | 60 | NSDictionary *options = @{(id)kCVPixelBufferIOSurfacePropertiesKey : @{}}; 61 | CVPixelBufferRef pixelBuffer = NULL; 62 | CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, frameWidth, frameHeight, kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange, (__bridge CFDictionaryRef)(options), &pixelBuffer); 63 | NSParameterAssert(status == kCVReturnSuccess && pixelBuffer != NULL); 64 | 65 | CVPixelBufferLockBaseAddress(pixelBuffer, 0); 66 | 67 | size_t width = CVPixelBufferGetWidth(pixelBuffer); 68 | size_t height = CVPixelBufferGetHeight(pixelBuffer); 69 | 70 | size_t wh = width * height; 71 | 72 | size_t width0 = CVPixelBufferGetWidthOfPlane(pixelBuffer, 0); 73 | size_t height0 = CVPixelBufferGetHeightOfPlane(pixelBuffer, 0); 74 | size_t bpr0 = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0); 75 | 76 | size_t height1 = CVPixelBufferGetHeightOfPlane(pixelBuffer, 1); 77 | size_t bpr1 = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 1); 78 | 79 | unsigned char *bufY = malloc(wh); 80 | unsigned char *bufUV = malloc(wh / 2); 81 | 82 | size_t offset, p; 83 | 84 | int r,g,b,y,u,v; 85 | int a = 255; 86 | for (int row = 0; row < height; ++row) { 87 | for (int col = 0; col < width; ++col) { 88 | offset = ((width * row) + col); 89 | p = offset * 4; 90 | r = data[p + 2]; 91 | g = data[p + 1]; 92 | b = data[p + 0]; 93 | a = data[p + 3]; 94 | 95 | // RGB to YUV 96 | y = 0.299*r + 0.587*g + 0.114*b; 97 | u = -0.1687*r - 0.3313*g + 0.5*b + 128; 98 | v = 0.5*r - 0.4187*g - 0.0813*b + 128; 99 | 100 | bufY[offset] = y; 101 | bufUV[(row / 2) * width + (col / 2) * 2] = u; 102 | bufUV[(row / 2) * width + (col / 2) * 2 + 1] = v; 103 | } 104 | } 105 | uint8_t *yPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0); 106 | memset(yPlane, 0x80, height0 * bpr0); 107 | for (int row = 0; row < height0; ++row) { 108 | memcpy(yPlane + row * bpr0, bufY + row * width0, width0); 109 | } 110 | uint8_t *uvPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1); 111 | memset(uvPlane, 0x80, height1 * bpr1); 112 | for (int row=0; row < height1; ++row) { 113 | memcpy(uvPlane + row * bpr1, bufUV + row * width, width); 114 | } 115 | 116 | CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); 117 | free(bufY); 118 | free(bufUV); 119 | 120 | return pixelBuffer; 121 | } 122 | 123 | + (void)setArView:(ARSCNView *)arView API_AVAILABLE(ios(11.0)){ 124 | _arView = arView; 125 | } 126 | 127 | - (void)captureARSnapshot API_AVAILABLE(ios(11.0)){ 128 | int64_t timeStampNs = [[NSDate date] timeIntervalSince1970] * 1000000000; 129 | CVPixelBufferRef pixelBuffer = [self getPixelBufferFromCGImage:[_arView snapshot]]; 130 | [_videoSource 131 | capturer:_dummyCapturer 132 | didCaptureVideoFrame: 133 | [[RTCVideoFrame alloc] 134 | initWithBuffer:[[RTCCVPixelBuffer alloc] initWithPixelBuffer:pixelBuffer] 135 | rotation:RTCVideoRotation_0 136 | timeStampNs:timeStampNs 137 | ] 138 | ]; 139 | CVPixelBufferRelease(pixelBuffer); 140 | } 141 | 142 | RCT_EXPORT_METHOD(init:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { 143 | _dummyCapturer = NULL; 144 | _videoSource = NULL; 145 | if (self.timer) { 146 | dispatch_source_cancel(self.timer); 147 | self.timer = nil; 148 | } 149 | resolve(@{}); 150 | } 151 | 152 | RCT_EXPORT_METHOD(stopSession:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { 153 | _dummyCapturer = NULL; 154 | _videoSource = NULL; 155 | if (self.timer) { 156 | dispatch_source_cancel(self.timer); 157 | self.timer = nil; 158 | } 159 | resolve(@{}); 160 | } 161 | 162 | RCT_EXPORT_METHOD(startSession:(NSDictionary *)options 163 | resolve:(RCTPromiseResolveBlock)resolve 164 | reject:(RCTPromiseRejectBlock)reject 165 | ) { 166 | NSInteger frameRate = [options[@"frameRate"] intValue]; 167 | 168 | if (@available(iOS 11.0, *)) { 169 | _videoSource = [WebRTCModule arVideoSource]; 170 | 171 | #if __has_include("RCTARKit.h") 172 | if (!_arView && [ARKit isInitialized]) { 173 | _arView = [ARKit sharedInstance].arView; 174 | } 175 | #endif 176 | if (_videoSource && _arView) { 177 | _dummyCapturer = [[RTCVideoCapturer alloc] init]; 178 | 179 | dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 180 | self.timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue); 181 | 182 | if (!frameRate) { 183 | frameRate = _arView.preferredFramesPerSecond; 184 | } 185 | dispatch_source_set_timer( 186 | self.timer, 187 | DISPATCH_TIME_NOW, 188 | NSEC_PER_SEC / frameRate, 189 | NSEC_PER_SEC 190 | ); 191 | 192 | dispatch_source_set_event_handler(self.timer, ^{ 193 | [self captureARSnapshot]; 194 | }); 195 | dispatch_resume(self.timer); 196 | 197 | resolve(@{ @"success": @(YES) }); 198 | return; 199 | } 200 | } 201 | resolve(@{ @"success": @(NO) }); 202 | } 203 | 204 | @end 205 | -------------------------------------------------------------------------------- /packages/rn-webrtc-server/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | react-native-webrtc server 5 | 6 | 7 | 8 | 9 |
10 |
11 | 12 | 13 |
14 | 15 | 16 | 233 | 234 | -------------------------------------------------------------------------------- /packages/react-native-webrtc-ar-session/ios/RNWebRTCARSession.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B3E7B58A1CC2AC0600A0062D /* RNWebRTCARSession.m in Sources */ = {isa = PBXBuildFile; fileRef = B3E7B5891CC2AC0600A0062D /* RNWebRTCARSession.m */; }; 11 | /* End PBXBuildFile section */ 12 | 13 | /* Begin PBXCopyFilesBuildPhase section */ 14 | 58B511D91A9E6C8500147676 /* CopyFiles */ = { 15 | isa = PBXCopyFilesBuildPhase; 16 | buildActionMask = 2147483647; 17 | dstPath = "include/$(PRODUCT_NAME)"; 18 | dstSubfolderSpec = 16; 19 | files = ( 20 | ); 21 | runOnlyForDeploymentPostprocessing = 0; 22 | }; 23 | /* End PBXCopyFilesBuildPhase section */ 24 | 25 | /* Begin PBXFileReference section */ 26 | 134814201AA4EA6300B7C361 /* libRNWebRTCARSession.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRNWebRTCARSession.a; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | B3E7B5881CC2AC0600A0062D /* RNWebRTCARSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RNWebRTCARSession.h; sourceTree = ""; }; 28 | B3E7B5891CC2AC0600A0062D /* RNWebRTCARSession.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RNWebRTCARSession.m; sourceTree = ""; }; 29 | /* End PBXFileReference section */ 30 | 31 | /* Begin PBXFrameworksBuildPhase section */ 32 | 58B511D81A9E6C8500147676 /* Frameworks */ = { 33 | isa = PBXFrameworksBuildPhase; 34 | buildActionMask = 2147483647; 35 | files = ( 36 | ); 37 | runOnlyForDeploymentPostprocessing = 0; 38 | }; 39 | /* End PBXFrameworksBuildPhase section */ 40 | 41 | /* Begin PBXGroup section */ 42 | 134814211AA4EA7D00B7C361 /* Products */ = { 43 | isa = PBXGroup; 44 | children = ( 45 | 134814201AA4EA6300B7C361 /* libRNWebRTCARSession.a */, 46 | ); 47 | name = Products; 48 | sourceTree = ""; 49 | }; 50 | 58B511D21A9E6C8500147676 = { 51 | isa = PBXGroup; 52 | children = ( 53 | B3E7B5881CC2AC0600A0062D /* RNWebRTCARSession.h */, 54 | B3E7B5891CC2AC0600A0062D /* RNWebRTCARSession.m */, 55 | 134814211AA4EA7D00B7C361 /* Products */, 56 | ); 57 | sourceTree = ""; 58 | }; 59 | /* End PBXGroup section */ 60 | 61 | /* Begin PBXNativeTarget section */ 62 | 58B511DA1A9E6C8500147676 /* RNWebRTCARSession */ = { 63 | isa = PBXNativeTarget; 64 | buildConfigurationList = 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNWebRTCARSession" */; 65 | buildPhases = ( 66 | 58B511D71A9E6C8500147676 /* Sources */, 67 | 58B511D81A9E6C8500147676 /* Frameworks */, 68 | 58B511D91A9E6C8500147676 /* CopyFiles */, 69 | ); 70 | buildRules = ( 71 | ); 72 | dependencies = ( 73 | ); 74 | name = RNWebRTCARSession; 75 | productName = RCTDataManager; 76 | productReference = 134814201AA4EA6300B7C361 /* libRNWebRTCARSession.a */; 77 | productType = "com.apple.product-type.library.static"; 78 | }; 79 | /* End PBXNativeTarget section */ 80 | 81 | /* Begin PBXProject section */ 82 | 58B511D31A9E6C8500147676 /* Project object */ = { 83 | isa = PBXProject; 84 | attributes = { 85 | LastUpgradeCheck = 0830; 86 | ORGANIZATIONNAME = Facebook; 87 | TargetAttributes = { 88 | 58B511DA1A9E6C8500147676 = { 89 | CreatedOnToolsVersion = 6.1.1; 90 | }; 91 | }; 92 | }; 93 | buildConfigurationList = 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNWebRTCARSession" */; 94 | compatibilityVersion = "Xcode 3.2"; 95 | developmentRegion = English; 96 | hasScannedForEncodings = 0; 97 | knownRegions = ( 98 | en, 99 | ); 100 | mainGroup = 58B511D21A9E6C8500147676; 101 | productRefGroup = 58B511D21A9E6C8500147676; 102 | projectDirPath = ""; 103 | projectRoot = ""; 104 | targets = ( 105 | 58B511DA1A9E6C8500147676 /* RNWebRTCARSession */, 106 | ); 107 | }; 108 | /* End PBXProject section */ 109 | 110 | /* Begin PBXSourcesBuildPhase section */ 111 | 58B511D71A9E6C8500147676 /* Sources */ = { 112 | isa = PBXSourcesBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | B3E7B58A1CC2AC0600A0062D /* RNWebRTCARSession.m in Sources */, 116 | ); 117 | runOnlyForDeploymentPostprocessing = 0; 118 | }; 119 | /* End PBXSourcesBuildPhase section */ 120 | 121 | /* Begin XCBuildConfiguration section */ 122 | 58B511ED1A9E6C8500147676 /* Debug */ = { 123 | isa = XCBuildConfiguration; 124 | buildSettings = { 125 | ALWAYS_SEARCH_USER_PATHS = NO; 126 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 127 | CLANG_CXX_LIBRARY = "libc++"; 128 | CLANG_ENABLE_MODULES = YES; 129 | CLANG_ENABLE_OBJC_ARC = YES; 130 | CLANG_WARN_BOOL_CONVERSION = YES; 131 | CLANG_WARN_CONSTANT_CONVERSION = YES; 132 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 133 | CLANG_WARN_EMPTY_BODY = YES; 134 | CLANG_WARN_ENUM_CONVERSION = YES; 135 | CLANG_WARN_INFINITE_RECURSION = YES; 136 | CLANG_WARN_INT_CONVERSION = YES; 137 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 138 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 139 | CLANG_WARN_UNREACHABLE_CODE = YES; 140 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 141 | COPY_PHASE_STRIP = NO; 142 | ENABLE_STRICT_OBJC_MSGSEND = YES; 143 | ENABLE_TESTABILITY = YES; 144 | GCC_C_LANGUAGE_STANDARD = gnu99; 145 | GCC_DYNAMIC_NO_PIC = NO; 146 | GCC_NO_COMMON_BLOCKS = YES; 147 | GCC_OPTIMIZATION_LEVEL = 0; 148 | GCC_PREPROCESSOR_DEFINITIONS = ( 149 | "DEBUG=1", 150 | "$(inherited)", 151 | ); 152 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 153 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 154 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 155 | GCC_WARN_UNDECLARED_SELECTOR = YES; 156 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 157 | GCC_WARN_UNUSED_FUNCTION = YES; 158 | GCC_WARN_UNUSED_VARIABLE = YES; 159 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 160 | MTL_ENABLE_DEBUG_INFO = YES; 161 | ONLY_ACTIVE_ARCH = YES; 162 | SDKROOT = iphoneos; 163 | }; 164 | name = Debug; 165 | }; 166 | 58B511EE1A9E6C8500147676 /* Release */ = { 167 | isa = XCBuildConfiguration; 168 | buildSettings = { 169 | ALWAYS_SEARCH_USER_PATHS = NO; 170 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 171 | CLANG_CXX_LIBRARY = "libc++"; 172 | CLANG_ENABLE_MODULES = YES; 173 | CLANG_ENABLE_OBJC_ARC = YES; 174 | CLANG_WARN_BOOL_CONVERSION = YES; 175 | CLANG_WARN_CONSTANT_CONVERSION = YES; 176 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 177 | CLANG_WARN_EMPTY_BODY = YES; 178 | CLANG_WARN_ENUM_CONVERSION = YES; 179 | CLANG_WARN_INFINITE_RECURSION = YES; 180 | CLANG_WARN_INT_CONVERSION = YES; 181 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 182 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 183 | CLANG_WARN_UNREACHABLE_CODE = YES; 184 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 185 | COPY_PHASE_STRIP = YES; 186 | ENABLE_NS_ASSERTIONS = NO; 187 | ENABLE_STRICT_OBJC_MSGSEND = YES; 188 | GCC_C_LANGUAGE_STANDARD = gnu99; 189 | GCC_NO_COMMON_BLOCKS = YES; 190 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 191 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 192 | GCC_WARN_UNDECLARED_SELECTOR = YES; 193 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 194 | GCC_WARN_UNUSED_FUNCTION = YES; 195 | GCC_WARN_UNUSED_VARIABLE = YES; 196 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 197 | MTL_ENABLE_DEBUG_INFO = NO; 198 | SDKROOT = iphoneos; 199 | VALIDATE_PRODUCT = YES; 200 | }; 201 | name = Release; 202 | }; 203 | 58B511F01A9E6C8500147676 /* Debug */ = { 204 | isa = XCBuildConfiguration; 205 | buildSettings = { 206 | HEADER_SEARCH_PATHS = ( 207 | "$(inherited)", 208 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 209 | "$(SRCROOT)/../../../React/**", 210 | "$(SRCROOT)/../../react-native/React/**", 211 | ); 212 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 213 | OTHER_LDFLAGS = "-ObjC"; 214 | PRODUCT_NAME = RNWebRTCARSession; 215 | SKIP_INSTALL = YES; 216 | }; 217 | name = Debug; 218 | }; 219 | 58B511F11A9E6C8500147676 /* Release */ = { 220 | isa = XCBuildConfiguration; 221 | buildSettings = { 222 | HEADER_SEARCH_PATHS = ( 223 | "$(inherited)", 224 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 225 | "$(SRCROOT)/../../../React/**", 226 | "$(SRCROOT)/../../react-native/React/**", 227 | ); 228 | LIBRARY_SEARCH_PATHS = "$(inherited)"; 229 | OTHER_LDFLAGS = "-ObjC"; 230 | PRODUCT_NAME = RNWebRTCARSession; 231 | SKIP_INSTALL = YES; 232 | }; 233 | name = Release; 234 | }; 235 | /* End XCBuildConfiguration section */ 236 | 237 | /* Begin XCConfigurationList section */ 238 | 58B511D61A9E6C8500147676 /* Build configuration list for PBXProject "RNWebRTCARSession" */ = { 239 | isa = XCConfigurationList; 240 | buildConfigurations = ( 241 | 58B511ED1A9E6C8500147676 /* Debug */, 242 | 58B511EE1A9E6C8500147676 /* Release */, 243 | ); 244 | defaultConfigurationIsVisible = 0; 245 | defaultConfigurationName = Release; 246 | }; 247 | 58B511EF1A9E6C8500147676 /* Build configuration list for PBXNativeTarget "RNWebRTCARSession" */ = { 248 | isa = XCConfigurationList; 249 | buildConfigurations = ( 250 | 58B511F01A9E6C8500147676 /* Debug */, 251 | 58B511F11A9E6C8500147676 /* Release */, 252 | ); 253 | defaultConfigurationIsVisible = 0; 254 | defaultConfigurationName = Release; 255 | }; 256 | /* End XCConfigurationList section */ 257 | }; 258 | rootObject = 58B511D31A9E6C8500147676 /* Project object */; 259 | } 260 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - boost-for-react-native (1.63.0) 3 | - DoubleConversion (1.1.6) 4 | - FBLazyVector (0.61.5) 5 | - FBReactNativeSpec (0.61.5): 6 | - Folly (= 2018.10.22.00) 7 | - RCTRequired (= 0.61.5) 8 | - RCTTypeSafety (= 0.61.5) 9 | - React-Core (= 0.61.5) 10 | - React-jsi (= 0.61.5) 11 | - ReactCommon/turbomodule/core (= 0.61.5) 12 | - Folly (2018.10.22.00): 13 | - boost-for-react-native 14 | - DoubleConversion 15 | - Folly/Default (= 2018.10.22.00) 16 | - glog 17 | - Folly/Default (2018.10.22.00): 18 | - boost-for-react-native 19 | - DoubleConversion 20 | - glog 21 | - glog (0.3.5) 22 | - RCTARKit (0.9.0): 23 | - React 24 | - RCTRequired (0.61.5) 25 | - RCTTypeSafety (0.61.5): 26 | - FBLazyVector (= 0.61.5) 27 | - Folly (= 2018.10.22.00) 28 | - RCTRequired (= 0.61.5) 29 | - React-Core (= 0.61.5) 30 | - React (0.61.5): 31 | - React-Core (= 0.61.5) 32 | - React-Core/DevSupport (= 0.61.5) 33 | - React-Core/RCTWebSocket (= 0.61.5) 34 | - React-RCTActionSheet (= 0.61.5) 35 | - React-RCTAnimation (= 0.61.5) 36 | - React-RCTBlob (= 0.61.5) 37 | - React-RCTImage (= 0.61.5) 38 | - React-RCTLinking (= 0.61.5) 39 | - React-RCTNetwork (= 0.61.5) 40 | - React-RCTSettings (= 0.61.5) 41 | - React-RCTText (= 0.61.5) 42 | - React-RCTVibration (= 0.61.5) 43 | - React-Core (0.61.5): 44 | - Folly (= 2018.10.22.00) 45 | - glog 46 | - React-Core/Default (= 0.61.5) 47 | - React-cxxreact (= 0.61.5) 48 | - React-jsi (= 0.61.5) 49 | - React-jsiexecutor (= 0.61.5) 50 | - Yoga 51 | - React-Core/CoreModulesHeaders (0.61.5): 52 | - Folly (= 2018.10.22.00) 53 | - glog 54 | - React-Core/Default 55 | - React-cxxreact (= 0.61.5) 56 | - React-jsi (= 0.61.5) 57 | - React-jsiexecutor (= 0.61.5) 58 | - Yoga 59 | - React-Core/Default (0.61.5): 60 | - Folly (= 2018.10.22.00) 61 | - glog 62 | - React-cxxreact (= 0.61.5) 63 | - React-jsi (= 0.61.5) 64 | - React-jsiexecutor (= 0.61.5) 65 | - Yoga 66 | - React-Core/DevSupport (0.61.5): 67 | - Folly (= 2018.10.22.00) 68 | - glog 69 | - React-Core/Default (= 0.61.5) 70 | - React-Core/RCTWebSocket (= 0.61.5) 71 | - React-cxxreact (= 0.61.5) 72 | - React-jsi (= 0.61.5) 73 | - React-jsiexecutor (= 0.61.5) 74 | - React-jsinspector (= 0.61.5) 75 | - Yoga 76 | - React-Core/RCTActionSheetHeaders (0.61.5): 77 | - Folly (= 2018.10.22.00) 78 | - glog 79 | - React-Core/Default 80 | - React-cxxreact (= 0.61.5) 81 | - React-jsi (= 0.61.5) 82 | - React-jsiexecutor (= 0.61.5) 83 | - Yoga 84 | - React-Core/RCTAnimationHeaders (0.61.5): 85 | - Folly (= 2018.10.22.00) 86 | - glog 87 | - React-Core/Default 88 | - React-cxxreact (= 0.61.5) 89 | - React-jsi (= 0.61.5) 90 | - React-jsiexecutor (= 0.61.5) 91 | - Yoga 92 | - React-Core/RCTBlobHeaders (0.61.5): 93 | - Folly (= 2018.10.22.00) 94 | - glog 95 | - React-Core/Default 96 | - React-cxxreact (= 0.61.5) 97 | - React-jsi (= 0.61.5) 98 | - React-jsiexecutor (= 0.61.5) 99 | - Yoga 100 | - React-Core/RCTImageHeaders (0.61.5): 101 | - Folly (= 2018.10.22.00) 102 | - glog 103 | - React-Core/Default 104 | - React-cxxreact (= 0.61.5) 105 | - React-jsi (= 0.61.5) 106 | - React-jsiexecutor (= 0.61.5) 107 | - Yoga 108 | - React-Core/RCTLinkingHeaders (0.61.5): 109 | - Folly (= 2018.10.22.00) 110 | - glog 111 | - React-Core/Default 112 | - React-cxxreact (= 0.61.5) 113 | - React-jsi (= 0.61.5) 114 | - React-jsiexecutor (= 0.61.5) 115 | - Yoga 116 | - React-Core/RCTNetworkHeaders (0.61.5): 117 | - Folly (= 2018.10.22.00) 118 | - glog 119 | - React-Core/Default 120 | - React-cxxreact (= 0.61.5) 121 | - React-jsi (= 0.61.5) 122 | - React-jsiexecutor (= 0.61.5) 123 | - Yoga 124 | - React-Core/RCTSettingsHeaders (0.61.5): 125 | - Folly (= 2018.10.22.00) 126 | - glog 127 | - React-Core/Default 128 | - React-cxxreact (= 0.61.5) 129 | - React-jsi (= 0.61.5) 130 | - React-jsiexecutor (= 0.61.5) 131 | - Yoga 132 | - React-Core/RCTTextHeaders (0.61.5): 133 | - Folly (= 2018.10.22.00) 134 | - glog 135 | - React-Core/Default 136 | - React-cxxreact (= 0.61.5) 137 | - React-jsi (= 0.61.5) 138 | - React-jsiexecutor (= 0.61.5) 139 | - Yoga 140 | - React-Core/RCTVibrationHeaders (0.61.5): 141 | - Folly (= 2018.10.22.00) 142 | - glog 143 | - React-Core/Default 144 | - React-cxxreact (= 0.61.5) 145 | - React-jsi (= 0.61.5) 146 | - React-jsiexecutor (= 0.61.5) 147 | - Yoga 148 | - React-Core/RCTWebSocket (0.61.5): 149 | - Folly (= 2018.10.22.00) 150 | - glog 151 | - React-Core/Default (= 0.61.5) 152 | - React-cxxreact (= 0.61.5) 153 | - React-jsi (= 0.61.5) 154 | - React-jsiexecutor (= 0.61.5) 155 | - Yoga 156 | - React-CoreModules (0.61.5): 157 | - FBReactNativeSpec (= 0.61.5) 158 | - Folly (= 2018.10.22.00) 159 | - RCTTypeSafety (= 0.61.5) 160 | - React-Core/CoreModulesHeaders (= 0.61.5) 161 | - React-RCTImage (= 0.61.5) 162 | - ReactCommon/turbomodule/core (= 0.61.5) 163 | - React-cxxreact (0.61.5): 164 | - boost-for-react-native (= 1.63.0) 165 | - DoubleConversion 166 | - Folly (= 2018.10.22.00) 167 | - glog 168 | - React-jsinspector (= 0.61.5) 169 | - React-jsi (0.61.5): 170 | - boost-for-react-native (= 1.63.0) 171 | - DoubleConversion 172 | - Folly (= 2018.10.22.00) 173 | - glog 174 | - React-jsi/Default (= 0.61.5) 175 | - React-jsi/Default (0.61.5): 176 | - boost-for-react-native (= 1.63.0) 177 | - DoubleConversion 178 | - Folly (= 2018.10.22.00) 179 | - glog 180 | - React-jsiexecutor (0.61.5): 181 | - DoubleConversion 182 | - Folly (= 2018.10.22.00) 183 | - glog 184 | - React-cxxreact (= 0.61.5) 185 | - React-jsi (= 0.61.5) 186 | - React-jsinspector (0.61.5) 187 | - react-native-webrtc (1.75.3): 188 | - React 189 | - React-RCTActionSheet (0.61.5): 190 | - React-Core/RCTActionSheetHeaders (= 0.61.5) 191 | - React-RCTAnimation (0.61.5): 192 | - React-Core/RCTAnimationHeaders (= 0.61.5) 193 | - React-RCTBlob (0.61.5): 194 | - React-Core/RCTBlobHeaders (= 0.61.5) 195 | - React-Core/RCTWebSocket (= 0.61.5) 196 | - React-jsi (= 0.61.5) 197 | - React-RCTNetwork (= 0.61.5) 198 | - React-RCTImage (0.61.5): 199 | - React-Core/RCTImageHeaders (= 0.61.5) 200 | - React-RCTNetwork (= 0.61.5) 201 | - React-RCTLinking (0.61.5): 202 | - React-Core/RCTLinkingHeaders (= 0.61.5) 203 | - React-RCTNetwork (0.61.5): 204 | - React-Core/RCTNetworkHeaders (= 0.61.5) 205 | - React-RCTSettings (0.61.5): 206 | - React-Core/RCTSettingsHeaders (= 0.61.5) 207 | - React-RCTText (0.61.5): 208 | - React-Core/RCTTextHeaders (= 0.61.5) 209 | - React-RCTVibration (0.61.5): 210 | - React-Core/RCTVibrationHeaders (= 0.61.5) 211 | - ReactCommon/jscallinvoker (0.61.5): 212 | - DoubleConversion 213 | - Folly (= 2018.10.22.00) 214 | - glog 215 | - React-cxxreact (= 0.61.5) 216 | - ReactCommon/turbomodule/core (0.61.5): 217 | - DoubleConversion 218 | - Folly (= 2018.10.22.00) 219 | - glog 220 | - React-Core (= 0.61.5) 221 | - React-cxxreact (= 0.61.5) 222 | - React-jsi (= 0.61.5) 223 | - ReactCommon/jscallinvoker (= 0.61.5) 224 | - RNCAsyncStorage (1.8.0): 225 | - React 226 | - RNGestureHandler (1.6.0): 227 | - React 228 | - RNWebRTCARSession (0.1.1): 229 | - React 230 | - react-native-webrtc 231 | - Yoga (1.14.0) 232 | 233 | DEPENDENCIES: 234 | - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) 235 | - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) 236 | - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) 237 | - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) 238 | - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) 239 | - RCTARKit (from `../../../node_modules/react-native-arkit/ios`) 240 | - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) 241 | - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) 242 | - React (from `../node_modules/react-native/`) 243 | - React-Core (from `../node_modules/react-native/`) 244 | - React-Core/DevSupport (from `../node_modules/react-native/`) 245 | - React-Core/RCTWebSocket (from `../node_modules/react-native/`) 246 | - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) 247 | - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) 248 | - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) 249 | - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) 250 | - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) 251 | - react-native-webrtc (from `../../../node_modules/react-native-webrtc`) 252 | - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) 253 | - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) 254 | - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) 255 | - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) 256 | - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) 257 | - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) 258 | - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) 259 | - React-RCTText (from `../node_modules/react-native/Libraries/Text`) 260 | - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) 261 | - ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`) 262 | - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) 263 | - "RNCAsyncStorage (from `../../../node_modules/@react-native-community/async-storage`)" 264 | - RNGestureHandler (from `../../../node_modules/react-native-gesture-handler`) 265 | - RNWebRTCARSession (from `../../react-native-webrtc-ar-session/ios`) 266 | - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) 267 | 268 | SPEC REPOS: 269 | trunk: 270 | - boost-for-react-native 271 | 272 | EXTERNAL SOURCES: 273 | DoubleConversion: 274 | :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" 275 | FBLazyVector: 276 | :path: "../node_modules/react-native/Libraries/FBLazyVector" 277 | FBReactNativeSpec: 278 | :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" 279 | Folly: 280 | :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" 281 | glog: 282 | :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" 283 | RCTARKit: 284 | :path: "../../../node_modules/react-native-arkit/ios" 285 | RCTRequired: 286 | :path: "../node_modules/react-native/Libraries/RCTRequired" 287 | RCTTypeSafety: 288 | :path: "../node_modules/react-native/Libraries/TypeSafety" 289 | React: 290 | :path: "../node_modules/react-native/" 291 | React-Core: 292 | :path: "../node_modules/react-native/" 293 | React-CoreModules: 294 | :path: "../node_modules/react-native/React/CoreModules" 295 | React-cxxreact: 296 | :path: "../node_modules/react-native/ReactCommon/cxxreact" 297 | React-jsi: 298 | :path: "../node_modules/react-native/ReactCommon/jsi" 299 | React-jsiexecutor: 300 | :path: "../node_modules/react-native/ReactCommon/jsiexecutor" 301 | React-jsinspector: 302 | :path: "../node_modules/react-native/ReactCommon/jsinspector" 303 | react-native-webrtc: 304 | :path: "../../../node_modules/react-native-webrtc" 305 | React-RCTActionSheet: 306 | :path: "../node_modules/react-native/Libraries/ActionSheetIOS" 307 | React-RCTAnimation: 308 | :path: "../node_modules/react-native/Libraries/NativeAnimation" 309 | React-RCTBlob: 310 | :path: "../node_modules/react-native/Libraries/Blob" 311 | React-RCTImage: 312 | :path: "../node_modules/react-native/Libraries/Image" 313 | React-RCTLinking: 314 | :path: "../node_modules/react-native/Libraries/LinkingIOS" 315 | React-RCTNetwork: 316 | :path: "../node_modules/react-native/Libraries/Network" 317 | React-RCTSettings: 318 | :path: "../node_modules/react-native/Libraries/Settings" 319 | React-RCTText: 320 | :path: "../node_modules/react-native/Libraries/Text" 321 | React-RCTVibration: 322 | :path: "../node_modules/react-native/Libraries/Vibration" 323 | ReactCommon: 324 | :path: "../node_modules/react-native/ReactCommon" 325 | RNCAsyncStorage: 326 | :path: "../../../node_modules/@react-native-community/async-storage" 327 | RNGestureHandler: 328 | :path: "../../../node_modules/react-native-gesture-handler" 329 | RNWebRTCARSession: 330 | :path: "../../react-native-webrtc-ar-session/ios" 331 | Yoga: 332 | :path: "../node_modules/react-native/ReactCommon/yoga" 333 | 334 | SPEC CHECKSUMS: 335 | boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c 336 | DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2 337 | FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f 338 | FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75 339 | Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51 340 | glog: 1f3da668190260b06b429bb211bfbee5cd790c28 341 | RCTARKit: 753094e4dbdd5f7936a8c163df2e37e46a048a43 342 | RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1 343 | RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320 344 | React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78 345 | React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04 346 | React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb 347 | React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7 348 | React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7 349 | React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386 350 | React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0 351 | react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2 352 | React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76 353 | React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360 354 | React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72 355 | React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e 356 | React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5 357 | React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a 358 | React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640 359 | React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe 360 | React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad 361 | ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd 362 | RNCAsyncStorage: 5d83b49070d41fd72906a116c5e7bdac4ea3a814 363 | RNGestureHandler: dde546180bf24af0b5f737c8ad04b6f3fa51609a 364 | RNWebRTCARSession: 0efa95535bf9453b78957d5b1d0fe8661ea43555 365 | Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b 366 | 367 | PODFILE CHECKSUM: bd24e3fcbf53d73ea80743352a105cf508f70f99 368 | 369 | COCOAPODS: 1.8.3 370 | -------------------------------------------------------------------------------- /packages/RNWebRTCARExample/ios/RNWebRTCARExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00E356F31AD99517003FC87E /* RNWebRTCARExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNWebRTCARExampleTests.m */; }; 11 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 12 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 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 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 16 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 17 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 18 | 2DCD954D1E0B4F2C00145EB5 /* RNWebRTCARExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RNWebRTCARExampleTests.m */; }; 19 | 7F53579623FCD62A00634B31 /* PocketSVG.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F53579323FCD60F00634B31 /* PocketSVG.framework */; }; 20 | 7F53579723FCD62A00634B31 /* PocketSVG.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7F53579323FCD60F00634B31 /* PocketSVG.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 21 | 7F6ED7E024074B8E0079A14F /* ExampleARSCNViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F6ED7DF24074B8E0079A14F /* ExampleARSCNViewManager.m */; }; 22 | 7FDD52672400E7A000CC0904 /* art.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = 7FDD52662400E7A000CC0904 /* art.scnassets */; }; 23 | 89B0909A2BE3D812E139EA70 /* libPods-RNWebRTCARExample-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 26B1CAA6CB7697A05C157EE8 /* libPods-RNWebRTCARExample-tvOS.a */; }; 24 | 8ADC3F819262FE7D8BA12992 /* libPods-RNWebRTCARExample-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 075370F613C3C04B90D431A5 /* libPods-RNWebRTCARExample-tvOSTests.a */; }; 25 | A6C6DE6AA026D40769C33255 /* libPods-RNWebRTCARExampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D82F182B322FA60408BB0568 /* libPods-RNWebRTCARExampleTests.a */; }; 26 | FD2624DC72BB74EDC35E59AA /* libPods-RNWebRTCARExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E67D7500562D9E410E956161 /* libPods-RNWebRTCARExample.a */; }; 27 | /* End PBXBuildFile section */ 28 | 29 | /* Begin PBXContainerItemProxy section */ 30 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 31 | isa = PBXContainerItemProxy; 32 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 33 | proxyType = 1; 34 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 35 | remoteInfo = RNWebRTCARExample; 36 | }; 37 | 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { 38 | isa = PBXContainerItemProxy; 39 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 40 | proxyType = 1; 41 | remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; 42 | remoteInfo = "RNWebRTCARExample-tvOS"; 43 | }; 44 | 7F53578B23FCD60F00634B31 /* PBXContainerItemProxy */ = { 45 | isa = PBXContainerItemProxy; 46 | containerPortal = 7F53577C23FCD60F00634B31 /* Demo-iOS.xcodeproj */; 47 | proxyType = 2; 48 | remoteGlobalIDString = B09D90961D6C5E2E00360396; 49 | remoteInfo = "Demo-iOS"; 50 | }; 51 | 7F53578E23FCD60F00634B31 /* PBXContainerItemProxy */ = { 52 | isa = PBXContainerItemProxy; 53 | containerPortal = 7F53578023FCD60F00634B31 /* Demo-macOS.xcodeproj */; 54 | proxyType = 2; 55 | remoteGlobalIDString = B0EEE2261D6CA72100BCAF68; 56 | remoteInfo = "Demo-macOS"; 57 | }; 58 | 7F53579223FCD60F00634B31 /* PBXContainerItemProxy */ = { 59 | isa = PBXContainerItemProxy; 60 | containerPortal = 7F53575D23FCD60F00634B31 /* PocketSVG.xcodeproj */; 61 | proxyType = 2; 62 | remoteGlobalIDString = C79800BB1A21CB5300380860; 63 | remoteInfo = "PocketSVG (iOS)"; 64 | }; 65 | 7F53579423FCD60F00634B31 /* PBXContainerItemProxy */ = { 66 | isa = PBXContainerItemProxy; 67 | containerPortal = 7F53575D23FCD60F00634B31 /* PocketSVG.xcodeproj */; 68 | proxyType = 2; 69 | remoteGlobalIDString = C79800F51A21CDFD00380860; 70 | remoteInfo = "PocketSVG (Mac)"; 71 | }; 72 | /* End PBXContainerItemProxy section */ 73 | 74 | /* Begin PBXCopyFilesBuildPhase section */ 75 | 7F53579823FCD62A00634B31 /* Embed Frameworks */ = { 76 | isa = PBXCopyFilesBuildPhase; 77 | buildActionMask = 2147483647; 78 | dstPath = ""; 79 | dstSubfolderSpec = 10; 80 | files = ( 81 | 7F53579723FCD62A00634B31 /* PocketSVG.framework in Embed Frameworks */, 82 | ); 83 | name = "Embed Frameworks"; 84 | runOnlyForDeploymentPostprocessing = 0; 85 | }; 86 | /* End PBXCopyFilesBuildPhase section */ 87 | 88 | /* Begin PBXFileReference section */ 89 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 90 | 00E356EE1AD99517003FC87E /* RNWebRTCARExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RNWebRTCARExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 91 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92 | 00E356F21AD99517003FC87E /* RNWebRTCARExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RNWebRTCARExampleTests.m; sourceTree = ""; }; 93 | 075370F613C3C04B90D431A5 /* libPods-RNWebRTCARExample-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWebRTCARExample-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 94 | 0DB2DCC3EBF3521BDD4BDB82 /* Pods-RNWebRTCARExampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExampleTests.debug.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExampleTests/Pods-RNWebRTCARExampleTests.debug.xcconfig"; sourceTree = ""; }; 95 | 13B07F961A680F5B00A75B9A /* RNWebRTCARExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RNWebRTCARExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 96 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = RNWebRTCARExample/AppDelegate.h; sourceTree = ""; }; 97 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = RNWebRTCARExample/AppDelegate.m; sourceTree = ""; }; 98 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 99 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = RNWebRTCARExample/Images.xcassets; sourceTree = ""; }; 100 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = RNWebRTCARExample/Info.plist; sourceTree = ""; }; 101 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = RNWebRTCARExample/main.m; sourceTree = ""; }; 102 | 234E0A46F764E4F1B9BE187A /* Pods-RNWebRTCARExampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExampleTests.release.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExampleTests/Pods-RNWebRTCARExampleTests.release.xcconfig"; sourceTree = ""; }; 103 | 26B1CAA6CB7697A05C157EE8 /* libPods-RNWebRTCARExample-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWebRTCARExample-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 104 | 2D02E47B1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RNWebRTCARExample-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 105 | 2D02E4901E0B4A5D006451C7 /* RNWebRTCARExample-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "RNWebRTCARExample-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 106 | 3A84DD9E9374A9DBF5DBB444 /* Pods-RNWebRTCARExample-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample-tvOSTests/Pods-RNWebRTCARExample-tvOSTests.debug.xcconfig"; sourceTree = ""; }; 107 | 3F904BD448919379036D73B2 /* Pods-RNWebRTCARExample-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample-tvOS/Pods-RNWebRTCARExample-tvOS.debug.xcconfig"; sourceTree = ""; }; 108 | 7F53575823FCD60F00634B31 /* PocketSVG.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PocketSVG.h; sourceTree = ""; }; 109 | 7F53575923FCD60F00634B31 /* SVGLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SVGLayer.m; sourceTree = ""; }; 110 | 7F53575A23FCD60F00634B31 /* Framework-Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Framework-Info-iOS.plist"; sourceTree = ""; }; 111 | 7F53575B23FCD60F00634B31 /* SVGImageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SVGImageView.m; sourceTree = ""; }; 112 | 7F53575C23FCD60F00634B31 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 113 | 7F53575D23FCD60F00634B31 /* PocketSVG.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = PocketSVG.xcodeproj; sourceTree = ""; }; 114 | 7F53576023FCD60F00634B31 /* SVGPortability.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPortability.h; sourceTree = ""; }; 115 | 7F53576123FCD60F00634B31 /* SVGBezierPath.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SVGBezierPath.mm; sourceTree = ""; }; 116 | 7F53576223FCD60F00634B31 /* Framework-Info-Mac.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Framework-Info-Mac.plist"; sourceTree = ""; }; 117 | 7F53576323FCD60F00634B31 /* SVGEngine.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = SVGEngine.mm; sourceTree = ""; }; 118 | 7F53576423FCD60F00634B31 /* CONTRIBUTORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = CONTRIBUTORS; sourceTree = ""; }; 119 | 7F53576523FCD60F00634B31 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 120 | 7F53576623FCD60F00634B31 /* SVGLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGLayer.h; sourceTree = ""; }; 121 | 7F53576723FCD60F00634B31 /* issue_template.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = issue_template.md; sourceTree = ""; }; 122 | 7F53576823FCD60F00634B31 /* SVGBezierPath.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGBezierPath.h; sourceTree = ""; }; 123 | 7F53576923FCD60F00634B31 /* SVGImageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGImageView.h; sourceTree = ""; }; 124 | 7F53576A23FCD60F00634B31 /* SVGEngine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGEngine.h; sourceTree = ""; }; 125 | 7F53576B23FCD60F00634B31 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .travis.yml; sourceTree = ""; }; 126 | 7F53576D23FCD60F00634B31 /* Demos.xcworkspace */ = {isa = PBXFileReference; lastKnownFileType = wrapper.workspace; path = Demos.xcworkspace; sourceTree = ""; }; 127 | 7F53576F23FCD60F00634B31 /* Circle.svg */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Circle.svg; sourceTree = ""; }; 128 | 7F53577023FCD60F00634B31 /* tiger.svg */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = tiger.svg; sourceTree = ""; }; 129 | 7F53577123FCD60F00634B31 /* iceland.svg */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = iceland.svg; sourceTree = ""; }; 130 | 7F53577223FCD60F00634B31 /* BezierCurve.svg */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = BezierCurve.svg; sourceTree = ""; }; 131 | 7F53577523FCD60F00634B31 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 132 | 7F53577623FCD60F00634B31 /* IosDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IosDemo.swift; sourceTree = ""; }; 133 | 7F53577823FCD60F00634B31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 134 | 7F53577A23FCD60F00634B31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = "Base.lproj/Launch Screen.storyboard"; sourceTree = ""; }; 135 | 7F53577B23FCD60F00634B31 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 136 | 7F53577C23FCD60F00634B31 /* Demo-iOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "Demo-iOS.xcodeproj"; sourceTree = ""; }; 137 | 7F53578023FCD60F00634B31 /* Demo-macOS.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "Demo-macOS.xcodeproj"; sourceTree = ""; }; 138 | 7F53578423FCD60F00634B31 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 139 | 7F53578623FCD60F00634B31 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 140 | 7F53578723FCD60F00634B31 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 141 | 7F53578823FCD60F00634B31 /* MacDemo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacDemo.swift; sourceTree = ""; }; 142 | 7F53578923FCD60F00634B31 /* PocketSVG.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; path = PocketSVG.podspec; sourceTree = ""; }; 143 | 7F6ED7DE24074B7B0079A14F /* ExampleARSCNViewManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExampleARSCNViewManager.h; sourceTree = ""; }; 144 | 7F6ED7DF24074B8E0079A14F /* ExampleARSCNViewManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExampleARSCNViewManager.m; sourceTree = ""; }; 145 | 7FDD52662400E7A000CC0904 /* art.scnassets */ = {isa = PBXFileReference; lastKnownFileType = wrapper.scnassets; name = art.scnassets; path = RNWebRTCARExample/art.scnassets; sourceTree = ""; }; 146 | A9ACBCDE1E25148D207915D7 /* Pods-RNWebRTCARExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample.debug.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample/Pods-RNWebRTCARExample.debug.xcconfig"; sourceTree = ""; }; 147 | D4924D71DCDD958C08AF9A7C /* Pods-RNWebRTCARExample-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample-tvOS.release.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample-tvOS/Pods-RNWebRTCARExample-tvOS.release.xcconfig"; sourceTree = ""; }; 148 | D82F182B322FA60408BB0568 /* libPods-RNWebRTCARExampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWebRTCARExampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 149 | E67D7500562D9E410E956161 /* libPods-RNWebRTCARExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-RNWebRTCARExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 150 | EC2256051ECC30CFCE078B8E /* Pods-RNWebRTCARExample-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample-tvOSTests/Pods-RNWebRTCARExample-tvOSTests.release.xcconfig"; sourceTree = ""; }; 151 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 152 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; 153 | FABC87FB4840F00351C297E8 /* Pods-RNWebRTCARExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RNWebRTCARExample.release.xcconfig"; path = "Target Support Files/Pods-RNWebRTCARExample/Pods-RNWebRTCARExample.release.xcconfig"; sourceTree = ""; }; 154 | /* End PBXFileReference section */ 155 | 156 | /* Begin PBXFrameworksBuildPhase section */ 157 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 158 | isa = PBXFrameworksBuildPhase; 159 | buildActionMask = 2147483647; 160 | files = ( 161 | A6C6DE6AA026D40769C33255 /* libPods-RNWebRTCARExampleTests.a in Frameworks */, 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | }; 165 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 166 | isa = PBXFrameworksBuildPhase; 167 | buildActionMask = 2147483647; 168 | files = ( 169 | FD2624DC72BB74EDC35E59AA /* libPods-RNWebRTCARExample.a in Frameworks */, 170 | 7F53579623FCD62A00634B31 /* PocketSVG.framework in Frameworks */, 171 | ); 172 | runOnlyForDeploymentPostprocessing = 0; 173 | }; 174 | 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { 175 | isa = PBXFrameworksBuildPhase; 176 | buildActionMask = 2147483647; 177 | files = ( 178 | 89B0909A2BE3D812E139EA70 /* libPods-RNWebRTCARExample-tvOS.a in Frameworks */, 179 | ); 180 | runOnlyForDeploymentPostprocessing = 0; 181 | }; 182 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { 183 | isa = PBXFrameworksBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 8ADC3F819262FE7D8BA12992 /* libPods-RNWebRTCARExample-tvOSTests.a in Frameworks */, 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | }; 190 | /* End PBXFrameworksBuildPhase section */ 191 | 192 | /* Begin PBXGroup section */ 193 | 00E356EF1AD99517003FC87E /* RNWebRTCARExampleTests */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | 00E356F21AD99517003FC87E /* RNWebRTCARExampleTests.m */, 197 | 00E356F01AD99517003FC87E /* Supporting Files */, 198 | ); 199 | path = RNWebRTCARExampleTests; 200 | sourceTree = ""; 201 | }; 202 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 00E356F11AD99517003FC87E /* Info.plist */, 206 | ); 207 | name = "Supporting Files"; 208 | sourceTree = ""; 209 | }; 210 | 13B07FAE1A68108700A75B9A /* RNWebRTCARExample */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 214 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 215 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 216 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 217 | 7FDD52662400E7A000CC0904 /* art.scnassets */, 218 | 13B07FB61A68108700A75B9A /* Info.plist */, 219 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 220 | 13B07FB71A68108700A75B9A /* main.m */, 221 | 7F6ED7DE24074B7B0079A14F /* ExampleARSCNViewManager.h */, 222 | 7F6ED7DF24074B8E0079A14F /* ExampleARSCNViewManager.m */, 223 | ); 224 | name = RNWebRTCARExample; 225 | sourceTree = ""; 226 | }; 227 | 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 7F53575723FCD60F00634B31 /* PocketSVG */, 231 | ED297162215061F000B7C4FE /* JavaScriptCore.framework */, 232 | ED2971642150620600B7C4FE /* JavaScriptCore.framework */, 233 | E67D7500562D9E410E956161 /* libPods-RNWebRTCARExample.a */, 234 | 26B1CAA6CB7697A05C157EE8 /* libPods-RNWebRTCARExample-tvOS.a */, 235 | 075370F613C3C04B90D431A5 /* libPods-RNWebRTCARExample-tvOSTests.a */, 236 | D82F182B322FA60408BB0568 /* libPods-RNWebRTCARExampleTests.a */, 237 | ); 238 | name = Frameworks; 239 | sourceTree = ""; 240 | }; 241 | 5497A130EB320A5FAA58285C /* Pods */ = { 242 | isa = PBXGroup; 243 | children = ( 244 | A9ACBCDE1E25148D207915D7 /* Pods-RNWebRTCARExample.debug.xcconfig */, 245 | FABC87FB4840F00351C297E8 /* Pods-RNWebRTCARExample.release.xcconfig */, 246 | 3F904BD448919379036D73B2 /* Pods-RNWebRTCARExample-tvOS.debug.xcconfig */, 247 | D4924D71DCDD958C08AF9A7C /* Pods-RNWebRTCARExample-tvOS.release.xcconfig */, 248 | 3A84DD9E9374A9DBF5DBB444 /* Pods-RNWebRTCARExample-tvOSTests.debug.xcconfig */, 249 | EC2256051ECC30CFCE078B8E /* Pods-RNWebRTCARExample-tvOSTests.release.xcconfig */, 250 | 0DB2DCC3EBF3521BDD4BDB82 /* Pods-RNWebRTCARExampleTests.debug.xcconfig */, 251 | 234E0A46F764E4F1B9BE187A /* Pods-RNWebRTCARExampleTests.release.xcconfig */, 252 | ); 253 | path = Pods; 254 | sourceTree = ""; 255 | }; 256 | 7F53575723FCD60F00634B31 /* PocketSVG */ = { 257 | isa = PBXGroup; 258 | children = ( 259 | 7F53575823FCD60F00634B31 /* PocketSVG.h */, 260 | 7F53575923FCD60F00634B31 /* SVGLayer.m */, 261 | 7F53575A23FCD60F00634B31 /* Framework-Info-iOS.plist */, 262 | 7F53575B23FCD60F00634B31 /* SVGImageView.m */, 263 | 7F53575C23FCD60F00634B31 /* LICENSE */, 264 | 7F53575D23FCD60F00634B31 /* PocketSVG.xcodeproj */, 265 | 7F53576023FCD60F00634B31 /* SVGPortability.h */, 266 | 7F53576123FCD60F00634B31 /* SVGBezierPath.mm */, 267 | 7F53576223FCD60F00634B31 /* Framework-Info-Mac.plist */, 268 | 7F53576323FCD60F00634B31 /* SVGEngine.mm */, 269 | 7F53576423FCD60F00634B31 /* CONTRIBUTORS */, 270 | 7F53576523FCD60F00634B31 /* README.md */, 271 | 7F53576623FCD60F00634B31 /* SVGLayer.h */, 272 | 7F53576723FCD60F00634B31 /* issue_template.md */, 273 | 7F53576823FCD60F00634B31 /* SVGBezierPath.h */, 274 | 7F53576923FCD60F00634B31 /* SVGImageView.h */, 275 | 7F53576A23FCD60F00634B31 /* SVGEngine.h */, 276 | 7F53576B23FCD60F00634B31 /* .travis.yml */, 277 | 7F53576C23FCD60F00634B31 /* Demos */, 278 | 7F53578923FCD60F00634B31 /* PocketSVG.podspec */, 279 | ); 280 | name = PocketSVG; 281 | path = "../../../node_modules/react-native-arkit/ios/PocketSVG"; 282 | sourceTree = ""; 283 | }; 284 | 7F53575E23FCD60F00634B31 /* Products */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 7F53579323FCD60F00634B31 /* PocketSVG.framework */, 288 | 7F53579523FCD60F00634B31 /* PocketSVG.framework */, 289 | ); 290 | name = Products; 291 | sourceTree = ""; 292 | }; 293 | 7F53576C23FCD60F00634B31 /* Demos */ = { 294 | isa = PBXGroup; 295 | children = ( 296 | 7F53576D23FCD60F00634B31 /* Demos.xcworkspace */, 297 | 7F53576E23FCD60F00634B31 /* Sample SVG Files */, 298 | 7F53577323FCD60F00634B31 /* Demo-iOS */, 299 | 7F53577F23FCD60F00634B31 /* Demo-macOS */, 300 | ); 301 | path = Demos; 302 | sourceTree = ""; 303 | }; 304 | 7F53576E23FCD60F00634B31 /* Sample SVG Files */ = { 305 | isa = PBXGroup; 306 | children = ( 307 | 7F53576F23FCD60F00634B31 /* Circle.svg */, 308 | 7F53577023FCD60F00634B31 /* tiger.svg */, 309 | 7F53577123FCD60F00634B31 /* iceland.svg */, 310 | 7F53577223FCD60F00634B31 /* BezierCurve.svg */, 311 | ); 312 | path = "Sample SVG Files"; 313 | sourceTree = ""; 314 | }; 315 | 7F53577323FCD60F00634B31 /* Demo-iOS */ = { 316 | isa = PBXGroup; 317 | children = ( 318 | 7F53577423FCD60F00634B31 /* Demo-iOS */, 319 | 7F53577C23FCD60F00634B31 /* Demo-iOS.xcodeproj */, 320 | ); 321 | path = "Demo-iOS"; 322 | sourceTree = ""; 323 | }; 324 | 7F53577423FCD60F00634B31 /* Demo-iOS */ = { 325 | isa = PBXGroup; 326 | children = ( 327 | 7F53577523FCD60F00634B31 /* Assets.xcassets */, 328 | 7F53577623FCD60F00634B31 /* IosDemo.swift */, 329 | 7F53577723FCD60F00634B31 /* Main.storyboard */, 330 | 7F53577923FCD60F00634B31 /* Launch Screen.storyboard */, 331 | 7F53577B23FCD60F00634B31 /* Info.plist */, 332 | ); 333 | path = "Demo-iOS"; 334 | sourceTree = ""; 335 | }; 336 | 7F53577D23FCD60F00634B31 /* Products */ = { 337 | isa = PBXGroup; 338 | children = ( 339 | 7F53578C23FCD60F00634B31 /* Demo-iOS.app */, 340 | ); 341 | name = Products; 342 | sourceTree = ""; 343 | }; 344 | 7F53577F23FCD60F00634B31 /* Demo-macOS */ = { 345 | isa = PBXGroup; 346 | children = ( 347 | 7F53578023FCD60F00634B31 /* Demo-macOS.xcodeproj */, 348 | 7F53578323FCD60F00634B31 /* Demo-macOS */, 349 | ); 350 | path = "Demo-macOS"; 351 | sourceTree = ""; 352 | }; 353 | 7F53578123FCD60F00634B31 /* Products */ = { 354 | isa = PBXGroup; 355 | children = ( 356 | 7F53578F23FCD60F00634B31 /* Demo-macOS.app */, 357 | ); 358 | name = Products; 359 | sourceTree = ""; 360 | }; 361 | 7F53578323FCD60F00634B31 /* Demo-macOS */ = { 362 | isa = PBXGroup; 363 | children = ( 364 | 7F53578423FCD60F00634B31 /* Assets.xcassets */, 365 | 7F53578523FCD60F00634B31 /* Main.storyboard */, 366 | 7F53578723FCD60F00634B31 /* Info.plist */, 367 | 7F53578823FCD60F00634B31 /* MacDemo.swift */, 368 | ); 369 | path = "Demo-macOS"; 370 | sourceTree = ""; 371 | }; 372 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 373 | isa = PBXGroup; 374 | children = ( 375 | ); 376 | name = Libraries; 377 | sourceTree = ""; 378 | }; 379 | 83CBB9F61A601CBA00E9B192 = { 380 | isa = PBXGroup; 381 | children = ( 382 | 13B07FAE1A68108700A75B9A /* RNWebRTCARExample */, 383 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 384 | 00E356EF1AD99517003FC87E /* RNWebRTCARExampleTests */, 385 | 83CBBA001A601CBA00E9B192 /* Products */, 386 | 2D16E6871FA4F8E400B85C8A /* Frameworks */, 387 | 5497A130EB320A5FAA58285C /* Pods */, 388 | ); 389 | indentWidth = 2; 390 | sourceTree = ""; 391 | tabWidth = 2; 392 | usesTabs = 0; 393 | }; 394 | 83CBBA001A601CBA00E9B192 /* Products */ = { 395 | isa = PBXGroup; 396 | children = ( 397 | 13B07F961A680F5B00A75B9A /* RNWebRTCARExample.app */, 398 | 00E356EE1AD99517003FC87E /* RNWebRTCARExampleTests.xctest */, 399 | 2D02E47B1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS.app */, 400 | 2D02E4901E0B4A5D006451C7 /* RNWebRTCARExample-tvOSTests.xctest */, 401 | ); 402 | name = Products; 403 | sourceTree = ""; 404 | }; 405 | /* End PBXGroup section */ 406 | 407 | /* Begin PBXNativeTarget section */ 408 | 00E356ED1AD99517003FC87E /* RNWebRTCARExampleTests */ = { 409 | isa = PBXNativeTarget; 410 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNWebRTCARExampleTests" */; 411 | buildPhases = ( 412 | 4DF750777A65CB288BAF61DA /* [CP] Check Pods Manifest.lock */, 413 | 00E356EA1AD99517003FC87E /* Sources */, 414 | 00E356EB1AD99517003FC87E /* Frameworks */, 415 | 00E356EC1AD99517003FC87E /* Resources */, 416 | ); 417 | buildRules = ( 418 | ); 419 | dependencies = ( 420 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 421 | ); 422 | name = RNWebRTCARExampleTests; 423 | productName = RNWebRTCARExampleTests; 424 | productReference = 00E356EE1AD99517003FC87E /* RNWebRTCARExampleTests.xctest */; 425 | productType = "com.apple.product-type.bundle.unit-test"; 426 | }; 427 | 13B07F861A680F5B00A75B9A /* RNWebRTCARExample */ = { 428 | isa = PBXNativeTarget; 429 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNWebRTCARExample" */; 430 | buildPhases = ( 431 | 7896705A0C0D828B429E36AE /* [CP] Check Pods Manifest.lock */, 432 | FD10A7F022414F080027D42C /* Start Packager */, 433 | 13B07F871A680F5B00A75B9A /* Sources */, 434 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 435 | 13B07F8E1A680F5B00A75B9A /* Resources */, 436 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 437 | F43E607112181875CC6C250F /* [CP] Embed Pods Frameworks */, 438 | 7F53579823FCD62A00634B31 /* Embed Frameworks */, 439 | ); 440 | buildRules = ( 441 | ); 442 | dependencies = ( 443 | ); 444 | name = RNWebRTCARExample; 445 | productName = RNWebRTCARExample; 446 | productReference = 13B07F961A680F5B00A75B9A /* RNWebRTCARExample.app */; 447 | productType = "com.apple.product-type.application"; 448 | }; 449 | 2D02E47A1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS */ = { 450 | isa = PBXNativeTarget; 451 | buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNWebRTCARExample-tvOS" */; 452 | buildPhases = ( 453 | A0537F873A07B0EEDFA4A59D /* [CP] Check Pods Manifest.lock */, 454 | FD10A7F122414F3F0027D42C /* Start Packager */, 455 | 2D02E4771E0B4A5D006451C7 /* Sources */, 456 | 2D02E4781E0B4A5D006451C7 /* Frameworks */, 457 | 2D02E4791E0B4A5D006451C7 /* Resources */, 458 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, 459 | ); 460 | buildRules = ( 461 | ); 462 | dependencies = ( 463 | ); 464 | name = "RNWebRTCARExample-tvOS"; 465 | productName = "RNWebRTCARExample-tvOS"; 466 | productReference = 2D02E47B1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS.app */; 467 | productType = "com.apple.product-type.application"; 468 | }; 469 | 2D02E48F1E0B4A5D006451C7 /* RNWebRTCARExample-tvOSTests */ = { 470 | isa = PBXNativeTarget; 471 | buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNWebRTCARExample-tvOSTests" */; 472 | buildPhases = ( 473 | 0A0E9AC584BDC3055BA07989 /* [CP] Check Pods Manifest.lock */, 474 | 2D02E48C1E0B4A5D006451C7 /* Sources */, 475 | 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 476 | 2D02E48E1E0B4A5D006451C7 /* Resources */, 477 | ); 478 | buildRules = ( 479 | ); 480 | dependencies = ( 481 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, 482 | ); 483 | name = "RNWebRTCARExample-tvOSTests"; 484 | productName = "RNWebRTCARExample-tvOSTests"; 485 | productReference = 2D02E4901E0B4A5D006451C7 /* RNWebRTCARExample-tvOSTests.xctest */; 486 | productType = "com.apple.product-type.bundle.unit-test"; 487 | }; 488 | /* End PBXNativeTarget section */ 489 | 490 | /* Begin PBXProject section */ 491 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 492 | isa = PBXProject; 493 | attributes = { 494 | LastUpgradeCheck = 0940; 495 | ORGANIZATIONNAME = Facebook; 496 | TargetAttributes = { 497 | 00E356ED1AD99517003FC87E = { 498 | CreatedOnToolsVersion = 6.2; 499 | DevelopmentTeam = C6EUM5DVB3; 500 | TestTargetID = 13B07F861A680F5B00A75B9A; 501 | }; 502 | 13B07F861A680F5B00A75B9A = { 503 | DevelopmentTeam = C6EUM5DVB3; 504 | }; 505 | 2D02E47A1E0B4A5D006451C7 = { 506 | CreatedOnToolsVersion = 8.2.1; 507 | DevelopmentTeam = C6EUM5DVB3; 508 | ProvisioningStyle = Automatic; 509 | }; 510 | 2D02E48F1E0B4A5D006451C7 = { 511 | CreatedOnToolsVersion = 8.2.1; 512 | DevelopmentTeam = C6EUM5DVB3; 513 | ProvisioningStyle = Automatic; 514 | TestTargetID = 2D02E47A1E0B4A5D006451C7; 515 | }; 516 | }; 517 | }; 518 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNWebRTCARExample" */; 519 | compatibilityVersion = "Xcode 3.2"; 520 | developmentRegion = English; 521 | hasScannedForEncodings = 0; 522 | knownRegions = ( 523 | English, 524 | en, 525 | Base, 526 | ); 527 | mainGroup = 83CBB9F61A601CBA00E9B192; 528 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 529 | projectDirPath = ""; 530 | projectReferences = ( 531 | { 532 | ProductGroup = 7F53577D23FCD60F00634B31 /* Products */; 533 | ProjectRef = 7F53577C23FCD60F00634B31 /* Demo-iOS.xcodeproj */; 534 | }, 535 | { 536 | ProductGroup = 7F53578123FCD60F00634B31 /* Products */; 537 | ProjectRef = 7F53578023FCD60F00634B31 /* Demo-macOS.xcodeproj */; 538 | }, 539 | { 540 | ProductGroup = 7F53575E23FCD60F00634B31 /* Products */; 541 | ProjectRef = 7F53575D23FCD60F00634B31 /* PocketSVG.xcodeproj */; 542 | }, 543 | ); 544 | projectRoot = ""; 545 | targets = ( 546 | 13B07F861A680F5B00A75B9A /* RNWebRTCARExample */, 547 | 00E356ED1AD99517003FC87E /* RNWebRTCARExampleTests */, 548 | 2D02E47A1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS */, 549 | 2D02E48F1E0B4A5D006451C7 /* RNWebRTCARExample-tvOSTests */, 550 | ); 551 | }; 552 | /* End PBXProject section */ 553 | 554 | /* Begin PBXReferenceProxy section */ 555 | 7F53578C23FCD60F00634B31 /* Demo-iOS.app */ = { 556 | isa = PBXReferenceProxy; 557 | fileType = wrapper.application; 558 | path = "Demo-iOS.app"; 559 | remoteRef = 7F53578B23FCD60F00634B31 /* PBXContainerItemProxy */; 560 | sourceTree = BUILT_PRODUCTS_DIR; 561 | }; 562 | 7F53578F23FCD60F00634B31 /* Demo-macOS.app */ = { 563 | isa = PBXReferenceProxy; 564 | fileType = wrapper.application; 565 | path = "Demo-macOS.app"; 566 | remoteRef = 7F53578E23FCD60F00634B31 /* PBXContainerItemProxy */; 567 | sourceTree = BUILT_PRODUCTS_DIR; 568 | }; 569 | 7F53579323FCD60F00634B31 /* PocketSVG.framework */ = { 570 | isa = PBXReferenceProxy; 571 | fileType = wrapper.framework; 572 | path = PocketSVG.framework; 573 | remoteRef = 7F53579223FCD60F00634B31 /* PBXContainerItemProxy */; 574 | sourceTree = BUILT_PRODUCTS_DIR; 575 | }; 576 | 7F53579523FCD60F00634B31 /* PocketSVG.framework */ = { 577 | isa = PBXReferenceProxy; 578 | fileType = wrapper.framework; 579 | path = PocketSVG.framework; 580 | remoteRef = 7F53579423FCD60F00634B31 /* PBXContainerItemProxy */; 581 | sourceTree = BUILT_PRODUCTS_DIR; 582 | }; 583 | /* End PBXReferenceProxy section */ 584 | 585 | /* Begin PBXResourcesBuildPhase section */ 586 | 00E356EC1AD99517003FC87E /* Resources */ = { 587 | isa = PBXResourcesBuildPhase; 588 | buildActionMask = 2147483647; 589 | files = ( 590 | ); 591 | runOnlyForDeploymentPostprocessing = 0; 592 | }; 593 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 594 | isa = PBXResourcesBuildPhase; 595 | buildActionMask = 2147483647; 596 | files = ( 597 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 598 | 7FDD52672400E7A000CC0904 /* art.scnassets in Resources */, 599 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 600 | ); 601 | runOnlyForDeploymentPostprocessing = 0; 602 | }; 603 | 2D02E4791E0B4A5D006451C7 /* Resources */ = { 604 | isa = PBXResourcesBuildPhase; 605 | buildActionMask = 2147483647; 606 | files = ( 607 | 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */, 608 | ); 609 | runOnlyForDeploymentPostprocessing = 0; 610 | }; 611 | 2D02E48E1E0B4A5D006451C7 /* Resources */ = { 612 | isa = PBXResourcesBuildPhase; 613 | buildActionMask = 2147483647; 614 | files = ( 615 | ); 616 | runOnlyForDeploymentPostprocessing = 0; 617 | }; 618 | /* End PBXResourcesBuildPhase section */ 619 | 620 | /* Begin PBXShellScriptBuildPhase section */ 621 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 622 | isa = PBXShellScriptBuildPhase; 623 | buildActionMask = 2147483647; 624 | files = ( 625 | ); 626 | inputPaths = ( 627 | ); 628 | name = "Bundle React Native code and images"; 629 | outputPaths = ( 630 | ); 631 | runOnlyForDeploymentPostprocessing = 0; 632 | shellPath = /bin/sh; 633 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 634 | }; 635 | 0A0E9AC584BDC3055BA07989 /* [CP] Check Pods Manifest.lock */ = { 636 | isa = PBXShellScriptBuildPhase; 637 | buildActionMask = 2147483647; 638 | files = ( 639 | ); 640 | inputFileListPaths = ( 641 | ); 642 | inputPaths = ( 643 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 644 | "${PODS_ROOT}/Manifest.lock", 645 | ); 646 | name = "[CP] Check Pods Manifest.lock"; 647 | outputFileListPaths = ( 648 | ); 649 | outputPaths = ( 650 | "$(DERIVED_FILE_DIR)/Pods-RNWebRTCARExample-tvOSTests-checkManifestLockResult.txt", 651 | ); 652 | runOnlyForDeploymentPostprocessing = 0; 653 | shellPath = /bin/sh; 654 | 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"; 655 | showEnvVarsInLog = 0; 656 | }; 657 | 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = { 658 | isa = PBXShellScriptBuildPhase; 659 | buildActionMask = 2147483647; 660 | files = ( 661 | ); 662 | inputPaths = ( 663 | ); 664 | name = "Bundle React Native Code And Images"; 665 | outputPaths = ( 666 | ); 667 | runOnlyForDeploymentPostprocessing = 0; 668 | shellPath = /bin/sh; 669 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; 670 | }; 671 | 4DF750777A65CB288BAF61DA /* [CP] Check Pods Manifest.lock */ = { 672 | isa = PBXShellScriptBuildPhase; 673 | buildActionMask = 2147483647; 674 | files = ( 675 | ); 676 | inputFileListPaths = ( 677 | ); 678 | inputPaths = ( 679 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 680 | "${PODS_ROOT}/Manifest.lock", 681 | ); 682 | name = "[CP] Check Pods Manifest.lock"; 683 | outputFileListPaths = ( 684 | ); 685 | outputPaths = ( 686 | "$(DERIVED_FILE_DIR)/Pods-RNWebRTCARExampleTests-checkManifestLockResult.txt", 687 | ); 688 | runOnlyForDeploymentPostprocessing = 0; 689 | shellPath = /bin/sh; 690 | 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"; 691 | showEnvVarsInLog = 0; 692 | }; 693 | 7896705A0C0D828B429E36AE /* [CP] Check Pods Manifest.lock */ = { 694 | isa = PBXShellScriptBuildPhase; 695 | buildActionMask = 2147483647; 696 | files = ( 697 | ); 698 | inputFileListPaths = ( 699 | ); 700 | inputPaths = ( 701 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 702 | "${PODS_ROOT}/Manifest.lock", 703 | ); 704 | name = "[CP] Check Pods Manifest.lock"; 705 | outputFileListPaths = ( 706 | ); 707 | outputPaths = ( 708 | "$(DERIVED_FILE_DIR)/Pods-RNWebRTCARExample-checkManifestLockResult.txt", 709 | ); 710 | runOnlyForDeploymentPostprocessing = 0; 711 | shellPath = /bin/sh; 712 | 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"; 713 | showEnvVarsInLog = 0; 714 | }; 715 | A0537F873A07B0EEDFA4A59D /* [CP] Check Pods Manifest.lock */ = { 716 | isa = PBXShellScriptBuildPhase; 717 | buildActionMask = 2147483647; 718 | files = ( 719 | ); 720 | inputFileListPaths = ( 721 | ); 722 | inputPaths = ( 723 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 724 | "${PODS_ROOT}/Manifest.lock", 725 | ); 726 | name = "[CP] Check Pods Manifest.lock"; 727 | outputFileListPaths = ( 728 | ); 729 | outputPaths = ( 730 | "$(DERIVED_FILE_DIR)/Pods-RNWebRTCARExample-tvOS-checkManifestLockResult.txt", 731 | ); 732 | runOnlyForDeploymentPostprocessing = 0; 733 | shellPath = /bin/sh; 734 | 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"; 735 | showEnvVarsInLog = 0; 736 | }; 737 | F43E607112181875CC6C250F /* [CP] Embed Pods Frameworks */ = { 738 | isa = PBXShellScriptBuildPhase; 739 | buildActionMask = 2147483647; 740 | files = ( 741 | ); 742 | inputPaths = ( 743 | "${PODS_ROOT}/Target Support Files/Pods-RNWebRTCARExample/Pods-RNWebRTCARExample-frameworks.sh", 744 | "${PODS_ROOT}/../../../../node_modules/react-native-webrtc/ios/WebRTC.framework", 745 | ); 746 | name = "[CP] Embed Pods Frameworks"; 747 | outputPaths = ( 748 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WebRTC.framework", 749 | ); 750 | runOnlyForDeploymentPostprocessing = 0; 751 | shellPath = /bin/sh; 752 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-RNWebRTCARExample/Pods-RNWebRTCARExample-frameworks.sh\"\n"; 753 | showEnvVarsInLog = 0; 754 | }; 755 | FD10A7F022414F080027D42C /* Start Packager */ = { 756 | isa = PBXShellScriptBuildPhase; 757 | buildActionMask = 2147483647; 758 | files = ( 759 | ); 760 | inputFileListPaths = ( 761 | ); 762 | inputPaths = ( 763 | ); 764 | name = "Start Packager"; 765 | outputFileListPaths = ( 766 | ); 767 | outputPaths = ( 768 | ); 769 | runOnlyForDeploymentPostprocessing = 0; 770 | shellPath = /bin/sh; 771 | shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; 772 | showEnvVarsInLog = 0; 773 | }; 774 | FD10A7F122414F3F0027D42C /* Start Packager */ = { 775 | isa = PBXShellScriptBuildPhase; 776 | buildActionMask = 2147483647; 777 | files = ( 778 | ); 779 | inputFileListPaths = ( 780 | ); 781 | inputPaths = ( 782 | ); 783 | name = "Start Packager"; 784 | outputFileListPaths = ( 785 | ); 786 | outputPaths = ( 787 | ); 788 | runOnlyForDeploymentPostprocessing = 0; 789 | shellPath = /bin/sh; 790 | shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n"; 791 | showEnvVarsInLog = 0; 792 | }; 793 | /* End PBXShellScriptBuildPhase section */ 794 | 795 | /* Begin PBXSourcesBuildPhase section */ 796 | 00E356EA1AD99517003FC87E /* Sources */ = { 797 | isa = PBXSourcesBuildPhase; 798 | buildActionMask = 2147483647; 799 | files = ( 800 | 00E356F31AD99517003FC87E /* RNWebRTCARExampleTests.m in Sources */, 801 | ); 802 | runOnlyForDeploymentPostprocessing = 0; 803 | }; 804 | 13B07F871A680F5B00A75B9A /* Sources */ = { 805 | isa = PBXSourcesBuildPhase; 806 | buildActionMask = 2147483647; 807 | files = ( 808 | 7F6ED7E024074B8E0079A14F /* ExampleARSCNViewManager.m in Sources */, 809 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 810 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 811 | ); 812 | runOnlyForDeploymentPostprocessing = 0; 813 | }; 814 | 2D02E4771E0B4A5D006451C7 /* Sources */ = { 815 | isa = PBXSourcesBuildPhase; 816 | buildActionMask = 2147483647; 817 | files = ( 818 | 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, 819 | 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, 820 | ); 821 | runOnlyForDeploymentPostprocessing = 0; 822 | }; 823 | 2D02E48C1E0B4A5D006451C7 /* Sources */ = { 824 | isa = PBXSourcesBuildPhase; 825 | buildActionMask = 2147483647; 826 | files = ( 827 | 2DCD954D1E0B4F2C00145EB5 /* RNWebRTCARExampleTests.m in Sources */, 828 | ); 829 | runOnlyForDeploymentPostprocessing = 0; 830 | }; 831 | /* End PBXSourcesBuildPhase section */ 832 | 833 | /* Begin PBXTargetDependency section */ 834 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 835 | isa = PBXTargetDependency; 836 | target = 13B07F861A680F5B00A75B9A /* RNWebRTCARExample */; 837 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 838 | }; 839 | 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { 840 | isa = PBXTargetDependency; 841 | target = 2D02E47A1E0B4A5D006451C7 /* RNWebRTCARExample-tvOS */; 842 | targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; 843 | }; 844 | /* End PBXTargetDependency section */ 845 | 846 | /* Begin PBXVariantGroup section */ 847 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 848 | isa = PBXVariantGroup; 849 | children = ( 850 | 13B07FB21A68108700A75B9A /* Base */, 851 | ); 852 | name = LaunchScreen.xib; 853 | path = RNWebRTCARExample; 854 | sourceTree = ""; 855 | }; 856 | 7F53577723FCD60F00634B31 /* Main.storyboard */ = { 857 | isa = PBXVariantGroup; 858 | children = ( 859 | 7F53577823FCD60F00634B31 /* Base */, 860 | ); 861 | name = Main.storyboard; 862 | sourceTree = ""; 863 | }; 864 | 7F53577923FCD60F00634B31 /* Launch Screen.storyboard */ = { 865 | isa = PBXVariantGroup; 866 | children = ( 867 | 7F53577A23FCD60F00634B31 /* Base */, 868 | ); 869 | name = "Launch Screen.storyboard"; 870 | sourceTree = ""; 871 | }; 872 | 7F53578523FCD60F00634B31 /* Main.storyboard */ = { 873 | isa = PBXVariantGroup; 874 | children = ( 875 | 7F53578623FCD60F00634B31 /* Base */, 876 | ); 877 | name = Main.storyboard; 878 | sourceTree = ""; 879 | }; 880 | /* End PBXVariantGroup section */ 881 | 882 | /* Begin XCBuildConfiguration section */ 883 | 00E356F61AD99517003FC87E /* Debug */ = { 884 | isa = XCBuildConfiguration; 885 | baseConfigurationReference = 0DB2DCC3EBF3521BDD4BDB82 /* Pods-RNWebRTCARExampleTests.debug.xcconfig */; 886 | buildSettings = { 887 | BUNDLE_LOADER = "$(TEST_HOST)"; 888 | DEVELOPMENT_TEAM = C6EUM5DVB3; 889 | GCC_PREPROCESSOR_DEFINITIONS = ( 890 | "DEBUG=1", 891 | "$(inherited)", 892 | ); 893 | INFOPLIST_FILE = RNWebRTCARExampleTests/Info.plist; 894 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 895 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 896 | OTHER_LDFLAGS = ( 897 | "-ObjC", 898 | "-lc++", 899 | "$(inherited)", 900 | ); 901 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 902 | PRODUCT_NAME = "$(TARGET_NAME)"; 903 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWebRTCARExample.app/RNWebRTCARExample"; 904 | }; 905 | name = Debug; 906 | }; 907 | 00E356F71AD99517003FC87E /* Release */ = { 908 | isa = XCBuildConfiguration; 909 | baseConfigurationReference = 234E0A46F764E4F1B9BE187A /* Pods-RNWebRTCARExampleTests.release.xcconfig */; 910 | buildSettings = { 911 | BUNDLE_LOADER = "$(TEST_HOST)"; 912 | COPY_PHASE_STRIP = NO; 913 | DEVELOPMENT_TEAM = C6EUM5DVB3; 914 | INFOPLIST_FILE = RNWebRTCARExampleTests/Info.plist; 915 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 916 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 917 | OTHER_LDFLAGS = ( 918 | "-ObjC", 919 | "-lc++", 920 | "$(inherited)", 921 | ); 922 | PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; 923 | PRODUCT_NAME = "$(TARGET_NAME)"; 924 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWebRTCARExample.app/RNWebRTCARExample"; 925 | }; 926 | name = Release; 927 | }; 928 | 13B07F941A680F5B00A75B9A /* Debug */ = { 929 | isa = XCBuildConfiguration; 930 | baseConfigurationReference = A9ACBCDE1E25148D207915D7 /* Pods-RNWebRTCARExample.debug.xcconfig */; 931 | buildSettings = { 932 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 933 | CURRENT_PROJECT_VERSION = 202002270; 934 | DEAD_CODE_STRIPPING = NO; 935 | DEVELOPMENT_TEAM = C6EUM5DVB3; 936 | INFOPLIST_FILE = RNWebRTCARExample/Info.plist; 937 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 938 | OTHER_LDFLAGS = ( 939 | "$(inherited)", 940 | "-ObjC", 941 | "-lc++", 942 | ); 943 | PRODUCT_BUNDLE_IDENTIFIER = com.example.ARKitWebRTC; 944 | PRODUCT_NAME = RNWebRTCARExample; 945 | TARGETED_DEVICE_FAMILY = "1,2"; 946 | VERSIONING_SYSTEM = "apple-generic"; 947 | }; 948 | name = Debug; 949 | }; 950 | 13B07F951A680F5B00A75B9A /* Release */ = { 951 | isa = XCBuildConfiguration; 952 | baseConfigurationReference = FABC87FB4840F00351C297E8 /* Pods-RNWebRTCARExample.release.xcconfig */; 953 | buildSettings = { 954 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 955 | CURRENT_PROJECT_VERSION = 202002270; 956 | DEVELOPMENT_TEAM = C6EUM5DVB3; 957 | INFOPLIST_FILE = RNWebRTCARExample/Info.plist; 958 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 959 | OTHER_LDFLAGS = ( 960 | "$(inherited)", 961 | "-ObjC", 962 | "-lc++", 963 | ); 964 | PRODUCT_BUNDLE_IDENTIFIER = com.example.ARKitWebRTC; 965 | PRODUCT_NAME = RNWebRTCARExample; 966 | TARGETED_DEVICE_FAMILY = "1,2"; 967 | VERSIONING_SYSTEM = "apple-generic"; 968 | }; 969 | name = Release; 970 | }; 971 | 2D02E4971E0B4A5E006451C7 /* Debug */ = { 972 | isa = XCBuildConfiguration; 973 | baseConfigurationReference = 3F904BD448919379036D73B2 /* Pods-RNWebRTCARExample-tvOS.debug.xcconfig */; 974 | buildSettings = { 975 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 976 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 977 | CLANG_ANALYZER_NONNULL = YES; 978 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 979 | CLANG_WARN_INFINITE_RECURSION = YES; 980 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 981 | DEBUG_INFORMATION_FORMAT = dwarf; 982 | DEVELOPMENT_TEAM = C6EUM5DVB3; 983 | ENABLE_TESTABILITY = YES; 984 | GCC_NO_COMMON_BLOCKS = YES; 985 | INFOPLIST_FILE = "RNWebRTCARExample-tvOS/Info.plist"; 986 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 987 | OTHER_LDFLAGS = ( 988 | "$(inherited)", 989 | "-ObjC", 990 | "-lc++", 991 | ); 992 | PRODUCT_BUNDLE_IDENTIFIER = com.example.ARKitWebRTC; 993 | PRODUCT_NAME = "$(TARGET_NAME)"; 994 | SDKROOT = appletvos; 995 | TARGETED_DEVICE_FAMILY = 3; 996 | TVOS_DEPLOYMENT_TARGET = 9.2; 997 | }; 998 | name = Debug; 999 | }; 1000 | 2D02E4981E0B4A5E006451C7 /* Release */ = { 1001 | isa = XCBuildConfiguration; 1002 | baseConfigurationReference = D4924D71DCDD958C08AF9A7C /* Pods-RNWebRTCARExample-tvOS.release.xcconfig */; 1003 | buildSettings = { 1004 | ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; 1005 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 1006 | CLANG_ANALYZER_NONNULL = YES; 1007 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1008 | CLANG_WARN_INFINITE_RECURSION = YES; 1009 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1010 | COPY_PHASE_STRIP = NO; 1011 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1012 | DEVELOPMENT_TEAM = C6EUM5DVB3; 1013 | GCC_NO_COMMON_BLOCKS = YES; 1014 | INFOPLIST_FILE = "RNWebRTCARExample-tvOS/Info.plist"; 1015 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 1016 | OTHER_LDFLAGS = ( 1017 | "$(inherited)", 1018 | "-ObjC", 1019 | "-lc++", 1020 | ); 1021 | PRODUCT_BUNDLE_IDENTIFIER = com.example.ARKitWebRTC; 1022 | PRODUCT_NAME = "$(TARGET_NAME)"; 1023 | SDKROOT = appletvos; 1024 | TARGETED_DEVICE_FAMILY = 3; 1025 | TVOS_DEPLOYMENT_TARGET = 9.2; 1026 | }; 1027 | name = Release; 1028 | }; 1029 | 2D02E4991E0B4A5E006451C7 /* Debug */ = { 1030 | isa = XCBuildConfiguration; 1031 | baseConfigurationReference = 3A84DD9E9374A9DBF5DBB444 /* Pods-RNWebRTCARExample-tvOSTests.debug.xcconfig */; 1032 | buildSettings = { 1033 | BUNDLE_LOADER = "$(TEST_HOST)"; 1034 | CLANG_ANALYZER_NONNULL = YES; 1035 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1036 | CLANG_WARN_INFINITE_RECURSION = YES; 1037 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1038 | DEBUG_INFORMATION_FORMAT = dwarf; 1039 | DEVELOPMENT_TEAM = C6EUM5DVB3; 1040 | ENABLE_TESTABILITY = YES; 1041 | GCC_NO_COMMON_BLOCKS = YES; 1042 | INFOPLIST_FILE = "RNWebRTCARExample-tvOSTests/Info.plist"; 1043 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1044 | OTHER_LDFLAGS = ( 1045 | "$(inherited)", 1046 | "-ObjC", 1047 | "-lc++", 1048 | ); 1049 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNWebRTCARExample-tvOSTests"; 1050 | PRODUCT_NAME = "$(TARGET_NAME)"; 1051 | SDKROOT = appletvos; 1052 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWebRTCARExample-tvOS.app/RNWebRTCARExample-tvOS"; 1053 | TVOS_DEPLOYMENT_TARGET = 10.1; 1054 | }; 1055 | name = Debug; 1056 | }; 1057 | 2D02E49A1E0B4A5E006451C7 /* Release */ = { 1058 | isa = XCBuildConfiguration; 1059 | baseConfigurationReference = EC2256051ECC30CFCE078B8E /* Pods-RNWebRTCARExample-tvOSTests.release.xcconfig */; 1060 | buildSettings = { 1061 | BUNDLE_LOADER = "$(TEST_HOST)"; 1062 | CLANG_ANALYZER_NONNULL = YES; 1063 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 1064 | CLANG_WARN_INFINITE_RECURSION = YES; 1065 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1066 | COPY_PHASE_STRIP = NO; 1067 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 1068 | DEVELOPMENT_TEAM = C6EUM5DVB3; 1069 | GCC_NO_COMMON_BLOCKS = YES; 1070 | INFOPLIST_FILE = "RNWebRTCARExample-tvOSTests/Info.plist"; 1071 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1072 | OTHER_LDFLAGS = ( 1073 | "$(inherited)", 1074 | "-ObjC", 1075 | "-lc++", 1076 | ); 1077 | PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.RNWebRTCARExample-tvOSTests"; 1078 | PRODUCT_NAME = "$(TARGET_NAME)"; 1079 | SDKROOT = appletvos; 1080 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RNWebRTCARExample-tvOS.app/RNWebRTCARExample-tvOS"; 1081 | TVOS_DEPLOYMENT_TARGET = 10.1; 1082 | }; 1083 | name = Release; 1084 | }; 1085 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 1086 | isa = XCBuildConfiguration; 1087 | buildSettings = { 1088 | ALWAYS_SEARCH_USER_PATHS = NO; 1089 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1090 | CLANG_CXX_LIBRARY = "libc++"; 1091 | CLANG_ENABLE_MODULES = YES; 1092 | CLANG_ENABLE_OBJC_ARC = YES; 1093 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1094 | CLANG_WARN_BOOL_CONVERSION = YES; 1095 | CLANG_WARN_COMMA = YES; 1096 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1097 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1098 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1099 | CLANG_WARN_EMPTY_BODY = YES; 1100 | CLANG_WARN_ENUM_CONVERSION = YES; 1101 | CLANG_WARN_INFINITE_RECURSION = YES; 1102 | CLANG_WARN_INT_CONVERSION = YES; 1103 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1104 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1105 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1106 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1107 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1108 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1109 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1110 | CLANG_WARN_UNREACHABLE_CODE = YES; 1111 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1112 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1113 | COPY_PHASE_STRIP = NO; 1114 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1115 | ENABLE_TESTABILITY = YES; 1116 | GCC_C_LANGUAGE_STANDARD = gnu99; 1117 | GCC_DYNAMIC_NO_PIC = NO; 1118 | GCC_NO_COMMON_BLOCKS = YES; 1119 | GCC_OPTIMIZATION_LEVEL = 0; 1120 | GCC_PREPROCESSOR_DEFINITIONS = ( 1121 | "DEBUG=1", 1122 | "$(inherited)", 1123 | ); 1124 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 1125 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1126 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1127 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1128 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1129 | GCC_WARN_UNUSED_FUNCTION = YES; 1130 | GCC_WARN_UNUSED_VARIABLE = YES; 1131 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1132 | MTL_ENABLE_DEBUG_INFO = YES; 1133 | ONLY_ACTIVE_ARCH = YES; 1134 | SDKROOT = iphoneos; 1135 | }; 1136 | name = Debug; 1137 | }; 1138 | 83CBBA211A601CBA00E9B192 /* Release */ = { 1139 | isa = XCBuildConfiguration; 1140 | buildSettings = { 1141 | ALWAYS_SEARCH_USER_PATHS = NO; 1142 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 1143 | CLANG_CXX_LIBRARY = "libc++"; 1144 | CLANG_ENABLE_MODULES = YES; 1145 | CLANG_ENABLE_OBJC_ARC = YES; 1146 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 1147 | CLANG_WARN_BOOL_CONVERSION = YES; 1148 | CLANG_WARN_COMMA = YES; 1149 | CLANG_WARN_CONSTANT_CONVERSION = YES; 1150 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 1151 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 1152 | CLANG_WARN_EMPTY_BODY = YES; 1153 | CLANG_WARN_ENUM_CONVERSION = YES; 1154 | CLANG_WARN_INFINITE_RECURSION = YES; 1155 | CLANG_WARN_INT_CONVERSION = YES; 1156 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 1157 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 1158 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 1159 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 1160 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 1161 | CLANG_WARN_STRICT_PROTOTYPES = YES; 1162 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 1163 | CLANG_WARN_UNREACHABLE_CODE = YES; 1164 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 1165 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 1166 | COPY_PHASE_STRIP = YES; 1167 | ENABLE_NS_ASSERTIONS = NO; 1168 | ENABLE_STRICT_OBJC_MSGSEND = YES; 1169 | GCC_C_LANGUAGE_STANDARD = gnu99; 1170 | GCC_NO_COMMON_BLOCKS = YES; 1171 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 1172 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 1173 | GCC_WARN_UNDECLARED_SELECTOR = YES; 1174 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 1175 | GCC_WARN_UNUSED_FUNCTION = YES; 1176 | GCC_WARN_UNUSED_VARIABLE = YES; 1177 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 1178 | MTL_ENABLE_DEBUG_INFO = NO; 1179 | SDKROOT = iphoneos; 1180 | VALIDATE_PRODUCT = YES; 1181 | }; 1182 | name = Release; 1183 | }; 1184 | /* End XCBuildConfiguration section */ 1185 | 1186 | /* Begin XCConfigurationList section */ 1187 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RNWebRTCARExampleTests" */ = { 1188 | isa = XCConfigurationList; 1189 | buildConfigurations = ( 1190 | 00E356F61AD99517003FC87E /* Debug */, 1191 | 00E356F71AD99517003FC87E /* Release */, 1192 | ); 1193 | defaultConfigurationIsVisible = 0; 1194 | defaultConfigurationName = Release; 1195 | }; 1196 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RNWebRTCARExample" */ = { 1197 | isa = XCConfigurationList; 1198 | buildConfigurations = ( 1199 | 13B07F941A680F5B00A75B9A /* Debug */, 1200 | 13B07F951A680F5B00A75B9A /* Release */, 1201 | ); 1202 | defaultConfigurationIsVisible = 0; 1203 | defaultConfigurationName = Release; 1204 | }; 1205 | 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNWebRTCARExample-tvOS" */ = { 1206 | isa = XCConfigurationList; 1207 | buildConfigurations = ( 1208 | 2D02E4971E0B4A5E006451C7 /* Debug */, 1209 | 2D02E4981E0B4A5E006451C7 /* Release */, 1210 | ); 1211 | defaultConfigurationIsVisible = 0; 1212 | defaultConfigurationName = Release; 1213 | }; 1214 | 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "RNWebRTCARExample-tvOSTests" */ = { 1215 | isa = XCConfigurationList; 1216 | buildConfigurations = ( 1217 | 2D02E4991E0B4A5E006451C7 /* Debug */, 1218 | 2D02E49A1E0B4A5E006451C7 /* Release */, 1219 | ); 1220 | defaultConfigurationIsVisible = 0; 1221 | defaultConfigurationName = Release; 1222 | }; 1223 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RNWebRTCARExample" */ = { 1224 | isa = XCConfigurationList; 1225 | buildConfigurations = ( 1226 | 83CBBA201A601CBA00E9B192 /* Debug */, 1227 | 83CBBA211A601CBA00E9B192 /* Release */, 1228 | ); 1229 | defaultConfigurationIsVisible = 0; 1230 | defaultConfigurationName = Release; 1231 | }; 1232 | /* End XCConfigurationList section */ 1233 | }; 1234 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 1235 | } 1236 | --------------------------------------------------------------------------------