diff --git a/examples/exampletvOS/.bundle/config b/examples/exampletvOS/.bundle/config
new file mode 100644
index 00000000..848943bb
--- /dev/null
+++ b/examples/exampletvOS/.bundle/config
@@ -0,0 +1,2 @@
+BUNDLE_PATH: "vendor/bundle"
+BUNDLE_FORCE_RUBY_PLATFORM: 1
diff --git a/examples/exampletvOS/.eslintrc.js b/examples/exampletvOS/.eslintrc.js
new file mode 100644
index 00000000..40c6dcd0
--- /dev/null
+++ b/examples/exampletvOS/.eslintrc.js
@@ -0,0 +1,4 @@
+module.exports = {
+ root: true,
+ extends: '@react-native-community',
+};
diff --git a/examples/exampletvOS/.gitignore b/examples/exampletvOS/.gitignore
new file mode 100644
index 00000000..16f8c307
--- /dev/null
+++ b/examples/exampletvOS/.gitignore
@@ -0,0 +1,63 @@
+# OSX
+#
+.DS_Store
+
+# Xcode
+#
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+ios/.xcode.env.local
+
+# Android/IntelliJ
+#
+build/
+.idea
+.gradle
+local.properties
+*.iml
+*.hprof
+.cxx/
+*.keystore
+!debug.keystore
+
+# node.js
+#
+node_modules/
+npm-debug.log
+yarn-error.log
+
+# fastlane
+#
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
+# screenshots whenever they are needed.
+# For more information about the recommended setup visit:
+# https://docs.fastlane.tools/best-practices/source-control/
+
+**/fastlane/report.xml
+**/fastlane/Preview.html
+**/fastlane/screenshots
+**/fastlane/test_output
+
+# Bundle artifact
+*.jsbundle
+
+# Ruby / CocoaPods
+/ios/Pods/
+/vendor/bundle/
+
+# Temporary files created by Metro to check the health of the file watcher
+.metro-health-check*
diff --git a/examples/exampletvOS/.node-version b/examples/exampletvOS/.node-version
new file mode 100644
index 00000000..3c032078
--- /dev/null
+++ b/examples/exampletvOS/.node-version
@@ -0,0 +1 @@
+18
diff --git a/examples/exampletvOS/.prettierrc.js b/examples/exampletvOS/.prettierrc.js
new file mode 100644
index 00000000..2b540746
--- /dev/null
+++ b/examples/exampletvOS/.prettierrc.js
@@ -0,0 +1,7 @@
+module.exports = {
+ arrowParens: 'avoid',
+ bracketSameLine: true,
+ bracketSpacing: false,
+ singleQuote: true,
+ trailingComma: 'all',
+};
diff --git a/examples/exampletvOS/.watchmanconfig b/examples/exampletvOS/.watchmanconfig
new file mode 100644
index 00000000..9e26dfee
--- /dev/null
+++ b/examples/exampletvOS/.watchmanconfig
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/examples/exampletvOS/App.tsx b/examples/exampletvOS/App.tsx
new file mode 100644
index 00000000..d151527b
--- /dev/null
+++ b/examples/exampletvOS/App.tsx
@@ -0,0 +1,41 @@
+import React from 'react';
+
+import {ActivityIndicator, StyleSheet} from 'react-native';
+
+import Video from 'react-native-video';
+
+export default function App() {
+ return (
+ <>
+
+
+ >
+ );
+}
+
+const styles = StyleSheet.create({
+ fullScreen: {
+ position: 'absolute',
+ top: 0,
+ left: 0,
+ bottom: 0,
+ right: 0,
+ },
+ activityIndicator: {
+ position: 'absolute',
+ top: 0,
+ bottom: 0,
+ left: 0,
+ right: 0,
+ },
+});
diff --git a/examples/exampletvOS/Gemfile b/examples/exampletvOS/Gemfile
new file mode 100644
index 00000000..1142b1b2
--- /dev/null
+++ b/examples/exampletvOS/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+
+# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
+ruby '>= 2.6.10'
+
+gem 'cocoapods', '>= 1.11.3'
diff --git a/examples/exampletvOS/Gemfile.lock b/examples/exampletvOS/Gemfile.lock
new file mode 100644
index 00000000..402ab002
--- /dev/null
+++ b/examples/exampletvOS/Gemfile.lock
@@ -0,0 +1,98 @@
+GEM
+ remote: https://rubygems.org/
+ specs:
+ CFPropertyList (3.0.6)
+ rexml
+ activesupport (7.0.6)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ i18n (>= 1.6, < 2)
+ minitest (>= 5.1)
+ tzinfo (~> 2.0)
+ addressable (2.8.5)
+ public_suffix (>= 2.0.2, < 6.0)
+ algoliasearch (1.27.5)
+ httpclient (~> 2.8, >= 2.8.3)
+ json (>= 1.5.1)
+ atomos (0.1.3)
+ claide (1.1.0)
+ cocoapods (1.12.1)
+ addressable (~> 2.8)
+ claide (>= 1.0.2, < 2.0)
+ cocoapods-core (= 1.12.1)
+ cocoapods-deintegrate (>= 1.0.3, < 2.0)
+ cocoapods-downloader (>= 1.6.0, < 2.0)
+ cocoapods-plugins (>= 1.0.0, < 2.0)
+ cocoapods-search (>= 1.0.0, < 2.0)
+ cocoapods-trunk (>= 1.6.0, < 2.0)
+ cocoapods-try (>= 1.1.0, < 2.0)
+ colored2 (~> 3.1)
+ escape (~> 0.0.4)
+ fourflusher (>= 2.3.0, < 3.0)
+ gh_inspector (~> 1.0)
+ molinillo (~> 0.8.0)
+ nap (~> 1.0)
+ ruby-macho (>= 2.3.0, < 3.0)
+ xcodeproj (>= 1.21.0, < 2.0)
+ cocoapods-core (1.12.1)
+ activesupport (>= 5.0, < 8)
+ addressable (~> 2.8)
+ algoliasearch (~> 1.0)
+ concurrent-ruby (~> 1.1)
+ fuzzy_match (~> 2.0.4)
+ nap (~> 1.0)
+ netrc (~> 0.11)
+ public_suffix (~> 4.0)
+ typhoeus (~> 1.0)
+ cocoapods-deintegrate (1.0.5)
+ cocoapods-downloader (1.6.3)
+ cocoapods-plugins (1.0.0)
+ nap
+ cocoapods-search (1.0.1)
+ cocoapods-trunk (1.6.0)
+ nap (>= 0.8, < 2.0)
+ netrc (~> 0.11)
+ cocoapods-try (1.2.0)
+ colored2 (3.1.2)
+ concurrent-ruby (1.2.2)
+ escape (0.0.4)
+ ethon (0.16.0)
+ ffi (>= 1.15.0)
+ ffi (1.15.5)
+ fourflusher (2.3.1)
+ fuzzy_match (2.0.4)
+ gh_inspector (1.1.3)
+ httpclient (2.8.3)
+ i18n (1.14.1)
+ concurrent-ruby (~> 1.0)
+ json (2.6.3)
+ minitest (5.19.0)
+ molinillo (0.8.0)
+ nanaimo (0.3.0)
+ nap (1.1.0)
+ netrc (0.11.0)
+ public_suffix (4.0.7)
+ rexml (3.2.6)
+ ruby-macho (2.5.1)
+ typhoeus (1.4.0)
+ ethon (>= 0.9.0)
+ tzinfo (2.0.6)
+ concurrent-ruby (~> 1.0)
+ xcodeproj (1.22.0)
+ CFPropertyList (>= 2.3.3, < 4.0)
+ atomos (~> 0.1.3)
+ claide (>= 1.0.2, < 2.0)
+ colored2 (~> 3.1)
+ nanaimo (~> 0.3.0)
+ rexml (~> 3.2.4)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ cocoapods (>= 1.11.3)
+
+RUBY VERSION
+ ruby 3.2.2p53
+
+BUNDLED WITH
+ 2.4.10
diff --git a/examples/exampletvOS/__tests__/App-test.tsx b/examples/exampletvOS/__tests__/App-test.tsx
new file mode 100644
index 00000000..17847669
--- /dev/null
+++ b/examples/exampletvOS/__tests__/App-test.tsx
@@ -0,0 +1,14 @@
+/**
+ * @format
+ */
+
+import 'react-native';
+import React from 'react';
+import App from '../App';
+
+// Note: test renderer must be required after react-native.
+import renderer from 'react-test-renderer';
+
+it('renders correctly', () => {
+ renderer.create();
+});
diff --git a/examples/exampletvOS/android/app/build.gradle b/examples/exampletvOS/android/app/build.gradle
new file mode 100644
index 00000000..6df079a1
--- /dev/null
+++ b/examples/exampletvOS/android/app/build.gradle
@@ -0,0 +1,176 @@
+apply plugin: "com.android.application"
+apply plugin: "com.facebook.react"
+
+import com.android.build.OutputFile
+import org.apache.tools.ant.taskdefs.condition.Os
+
+/**
+ * This is the configuration block to customize your React Native Android app.
+ * By default you don't need to apply any configuration, just uncomment the lines you need.
+ */
+react {
+ /* Folders */
+ // The root of your project, i.e. where "package.json" lives. Default is '..'
+ // root = file("../")
+ // The folder where the react-native NPM package is. Default is ../node_modules/react-native
+ // reactNativeDir = file("../node_modules/react-native")
+ // The folder where the react-native Codegen package is. Default is ../node_modules/react-native-codegen
+ // codegenDir = file("../node_modules/react-native-codegen")
+ // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js
+ // cliFile = file("../node_modules/react-native/cli.js")
+
+ /* Variants */
+ // The list of variants to that are debuggable. For those we're going to
+ // skip the bundling of the JS bundle and the assets. By default is just 'debug'.
+ // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants.
+ // debuggableVariants = ["liteDebug", "prodDebug"]
+
+ /* Bundling */
+ // A list containing the node command and its flags. Default is just 'node'.
+ // nodeExecutableAndArgs = ["node"]
+ //
+ // The command to run when bundling. By default is 'bundle'
+ // bundleCommand = "ram-bundle"
+ //
+ // The path to the CLI configuration file. Default is empty.
+ // bundleConfig = file(../rn-cli.config.js)
+ //
+ // The name of the generated asset file containing your JS bundle
+ // bundleAssetName = "MyApplication.android.bundle"
+ //
+ // The entry file for bundle generation. Default is 'index.android.js' or 'index.js'
+ // entryFile = file("../js/MyApplication.android.js")
+ //
+ // A list of extra flags to pass to the 'bundle' commands.
+ // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle
+ // extraPackagerArgs = []
+
+ /* Hermes Commands */
+ // The hermes compiler command to run. By default it is 'hermesc'
+ // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc"
+ //
+ // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map"
+ // hermesFlags = ["-O", "-output-source-map"]
+}
+
+/**
+ * Set this to true to create four separate APKs instead of one,
+ * one for each native architecture. This is useful if you don't
+ * use App Bundles (https://developer.android.com/guide/app-bundle/)
+ * and want to have separate APKs to upload to the Play Store.
+ */
+def enableSeparateBuildPerCPUArchitecture = false
+
+/**
+ * Set this to true to Run Proguard on Release builds to minify the Java bytecode.
+ */
+def enableProguardInReleaseBuilds = false
+
+/**
+ * The preferred build flavor of JavaScriptCore (JSC)
+ *
+ * For example, to use the international variant, you can use:
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
+ *
+ * The international variant includes ICU i18n library and necessary data
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
+ * give correct results when using with locales other than en-US. Note that
+ * this variant is about 6MiB larger per architecture than default.
+ */
+def jscFlavor = 'org.webkit:android-jsc:+'
+
+/**
+ * Private function to get the list of Native Architectures you want to build.
+ * This reads the value from reactNativeArchitectures in your gradle.properties
+ * file and works together with the --active-arch-only flag of react-native run-android.
+ */
+def reactNativeArchitectures() {
+ def value = project.getProperties().get("reactNativeArchitectures")
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
+}
+
+android {
+ ndkVersion rootProject.ext.ndkVersion
+
+ compileSdkVersion rootProject.ext.compileSdkVersion
+
+ namespace "com.exampletvos"
+ defaultConfig {
+ applicationId "com.exampletvos"
+ minSdkVersion rootProject.ext.minSdkVersion
+ targetSdkVersion rootProject.ext.targetSdkVersion
+ versionCode 1
+ versionName "1.0"
+ }
+
+ splits {
+ abi {
+ reset()
+ enable enableSeparateBuildPerCPUArchitecture
+ universalApk false // If true, also generate a universal APK
+ include (*reactNativeArchitectures())
+ }
+ }
+ signingConfigs {
+ debug {
+ storeFile file('debug.keystore')
+ storePassword 'android'
+ keyAlias 'androiddebugkey'
+ keyPassword 'android'
+ }
+ }
+ buildTypes {
+ debug {
+ signingConfig signingConfigs.debug
+ }
+ release {
+ // Caution! In production, you need to generate your own keystore file.
+ // see https://reactnative.dev/docs/signed-apk-android.
+ signingConfig signingConfigs.debug
+ minifyEnabled enableProguardInReleaseBuilds
+ proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
+ }
+ }
+
+ // applicationVariants are e.g. debug, release
+ applicationVariants.all { variant ->
+ variant.outputs.each { output ->
+ // For each separate APK per architecture, set a unique version code as described here:
+ // https://developer.android.com/studio/build/configure-apk-splits.html
+ // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
+ def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
+ def abi = output.getFilter(OutputFile.ABI)
+ if (abi != null) { // null for the universal-debug, universal-release variants
+ output.versionCodeOverride =
+ defaultConfig.versionCode * 1000 + versionCodes.get(abi)
+ }
+
+ }
+ }
+}
+
+dependencies {
+ // The version of react-native is set by the React Native Gradle Plugin
+
+ // For the TV repo, the plugin does not set the version correctly, so we add the version
+ // in gradle.properties for now
+ // We also use the io.github.react-native-tvos group for the react-android and hermes-android dependencies
+
+ implementation("io.github.react-native-tvos:react-android")
+
+ implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0")
+
+ debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}")
+ debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
+ exclude group:'com.squareup.okhttp3', module:'okhttp'
+ }
+
+ debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}")
+ if (hermesEnabled.toBoolean()) {
+ implementation("io.github.react-native-tvos:hermes-android")
+ } else {
+ implementation jscFlavor
+ }
+}
+
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
diff --git a/examples/exampletvOS/android/app/debug.keystore b/examples/exampletvOS/android/app/debug.keystore
new file mode 100644
index 00000000..364e105e
Binary files /dev/null and b/examples/exampletvOS/android/app/debug.keystore differ
diff --git a/examples/exampletvOS/android/app/proguard-rules.pro b/examples/exampletvOS/android/app/proguard-rules.pro
new file mode 100644
index 00000000..11b02572
--- /dev/null
+++ b/examples/exampletvOS/android/app/proguard-rules.pro
@@ -0,0 +1,10 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
diff --git a/examples/exampletvOS/android/app/src/debug/AndroidManifest.xml b/examples/exampletvOS/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..4b185bc1
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/android/app/src/debug/java/com/exampletvos/ReactNativeFlipper.java b/examples/exampletvOS/android/app/src/debug/java/com/exampletvos/ReactNativeFlipper.java
new file mode 100644
index 00000000..23041174
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/debug/java/com/exampletvos/ReactNativeFlipper.java
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ *
This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.exampletvos;
+
+import android.content.Context;
+import com.facebook.flipper.android.AndroidFlipperClient;
+import com.facebook.flipper.android.utils.FlipperUtils;
+import com.facebook.flipper.core.FlipperClient;
+import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
+import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
+import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
+import com.facebook.flipper.plugins.inspector.DescriptorMapping;
+import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
+import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
+import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
+import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
+import com.facebook.react.ReactInstanceEventListener;
+import com.facebook.react.ReactInstanceManager;
+import com.facebook.react.bridge.ReactContext;
+import com.facebook.react.modules.network.NetworkingModule;
+import okhttp3.OkHttpClient;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the debug
+ * flavor of it. Here you can add your own plugins and customize the Flipper setup.
+ */
+public class ReactNativeFlipper {
+ public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+ if (FlipperUtils.shouldEnableFlipper(context)) {
+ final FlipperClient client = AndroidFlipperClient.getInstance(context);
+
+ client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
+ client.addPlugin(new DatabasesFlipperPlugin(context));
+ client.addPlugin(new SharedPreferencesFlipperPlugin(context));
+ client.addPlugin(CrashReporterPlugin.getInstance());
+
+ NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
+ NetworkingModule.setCustomClientBuilder(
+ new NetworkingModule.CustomClientBuilder() {
+ @Override
+ public void apply(OkHttpClient.Builder builder) {
+ builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
+ }
+ });
+ client.addPlugin(networkFlipperPlugin);
+ client.start();
+
+ // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
+ // Hence we run if after all native modules have been initialized
+ ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
+ if (reactContext == null) {
+ reactInstanceManager.addReactInstanceEventListener(
+ new ReactInstanceEventListener() {
+ @Override
+ public void onReactContextInitialized(ReactContext reactContext) {
+ reactInstanceManager.removeReactInstanceEventListener(this);
+ reactContext.runOnNativeModulesQueueThread(
+ new Runnable() {
+ @Override
+ public void run() {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ });
+ }
+ });
+ } else {
+ client.addPlugin(new FrescoFlipperPlugin());
+ }
+ }
+ }
+}
diff --git a/examples/exampletvOS/android/app/src/main/AndroidManifest.xml b/examples/exampletvOS/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..712561cb
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainActivity.java b/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainActivity.java
new file mode 100644
index 00000000..fcc3f094
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainActivity.java
@@ -0,0 +1,35 @@
+package com.exampletvos;
+
+import com.facebook.react.ReactActivity;
+import com.facebook.react.ReactActivityDelegate;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactActivityDelegate;
+
+public class MainActivity extends ReactActivity {
+
+ /**
+ * Returns the name of the main component registered from JavaScript. This is used to schedule
+ * rendering of the component.
+ */
+ @Override
+ protected String getMainComponentName() {
+ return "exampletvOS";
+ }
+
+ /**
+ * Returns the instance of the {@link ReactActivityDelegate}. Here we use a util class {@link
+ * DefaultReactActivityDelegate} which allows you to easily enable Fabric and Concurrent React
+ * (aka React 18) with two boolean flags.
+ */
+ @Override
+ protected ReactActivityDelegate createReactActivityDelegate() {
+ return new DefaultReactActivityDelegate(
+ this,
+ getMainComponentName(),
+ // If you opted-in for the New Architecture, we enable the Fabric Renderer.
+ DefaultNewArchitectureEntryPoint.getFabricEnabled(), // fabricEnabled
+ // If you opted-in for the New Architecture, we enable Concurrent React (i.e. React 18).
+ DefaultNewArchitectureEntryPoint.getConcurrentReactEnabled() // concurrentRootEnabled
+ );
+ }
+}
diff --git a/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainApplication.java b/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainApplication.java
new file mode 100644
index 00000000..60ef0842
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/java/com/exampletvos/MainApplication.java
@@ -0,0 +1,64 @@
+package com.exampletvos;
+
+import android.app.Application;
+import com.facebook.react.PackageList;
+import com.facebook.react.ReactApplication;
+import com.facebook.react.ReactNativeHost;
+import com.facebook.react.ReactPackage;
+import com.facebook.react.config.ReactFeatureFlags;
+import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint;
+import com.facebook.react.defaults.DefaultReactNativeHost;
+import com.facebook.soloader.SoLoader;
+import java.util.List;
+
+public class MainApplication extends Application implements ReactApplication {
+
+ private final ReactNativeHost mReactNativeHost =
+ new DefaultReactNativeHost(this) {
+ @Override
+ public boolean getUseDeveloperSupport() {
+ return BuildConfig.DEBUG;
+ }
+
+ @Override
+ protected List getPackages() {
+ @SuppressWarnings("UnnecessaryLocalVariable")
+ List packages = new PackageList(this).getPackages();
+ // Packages that cannot be autolinked yet can be added manually here, for example:
+ // packages.add(new MyReactNativePackage());
+ return packages;
+ }
+
+ @Override
+ protected String getJSMainModuleName() {
+ return "index";
+ }
+
+ @Override
+ protected boolean isNewArchEnabled() {
+ return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
+ }
+
+ @Override
+ protected Boolean isHermesEnabled() {
+ return BuildConfig.IS_HERMES_ENABLED;
+ }
+ };
+
+ @Override
+ public ReactNativeHost getReactNativeHost() {
+ return mReactNativeHost;
+ }
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ SoLoader.init(this, /* native exopackage */ false);
+
+ // Normally we only send key up events in ReactAndroidHWInputDeviceHelper
+ // Change enableKeyDownEvents to true to send both key down and key up events
+ ReactFeatureFlags.enableKeyDownEvents = false;
+
+ ReactNativeFlipper.initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
+ }
+}
diff --git a/examples/exampletvOS/android/app/src/main/res/drawable/rn_edit_text_material.xml b/examples/exampletvOS/android/app/src/main/res/drawable/rn_edit_text_material.xml
new file mode 100644
index 00000000..f35d9962
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/res/drawable/rn_edit_text_material.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/android/app/src/main/res/drawable/tv_banner.png b/examples/exampletvOS/android/app/src/main/res/drawable/tv_banner.png
new file mode 100644
index 00000000..35080c18
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/drawable/tv_banner.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..a2f59082
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..1b523998
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..ff10afd6
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..115a4c76
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..dcd3cd80
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..459ca609
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..8ca12fe0
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..8e19b410
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..b824ebdd
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..4c19a13c
Binary files /dev/null and b/examples/exampletvOS/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/examples/exampletvOS/android/app/src/main/res/values/strings.xml b/examples/exampletvOS/android/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..1c72e563
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ exampletvOS
+
diff --git a/examples/exampletvOS/android/app/src/main/res/values/styles.xml b/examples/exampletvOS/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..7ba83a2a
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/examples/exampletvOS/android/app/src/release/java/com/exampletvos/ReactNativeFlipper.java b/examples/exampletvOS/android/app/src/release/java/com/exampletvos/ReactNativeFlipper.java
new file mode 100644
index 00000000..7db9bde7
--- /dev/null
+++ b/examples/exampletvOS/android/app/src/release/java/com/exampletvos/ReactNativeFlipper.java
@@ -0,0 +1,20 @@
+/**
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
+ *
+ * This source code is licensed under the MIT license found in the LICENSE file in the root
+ * directory of this source tree.
+ */
+package com.exampletvos;
+
+import android.content.Context;
+import com.facebook.react.ReactInstanceManager;
+
+/**
+ * Class responsible of loading Flipper inside your React Native application. This is the release
+ * flavor of it so it's empty as we don't want to load Flipper.
+ */
+public class ReactNativeFlipper {
+ public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
+ // Do nothing as we don't want to initialize Flipper on Release.
+ }
+}
diff --git a/examples/exampletvOS/android/build.gradle b/examples/exampletvOS/android/build.gradle
new file mode 100644
index 00000000..67d887b0
--- /dev/null
+++ b/examples/exampletvOS/android/build.gradle
@@ -0,0 +1,21 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ ext {
+ buildToolsVersion = "33.0.0"
+ minSdkVersion = 21
+ compileSdkVersion = 33
+ targetSdkVersion = 33
+
+ // We use NDK 23 which has both M1 support and is the side-by-side NDK version from AGP.
+ ndkVersion = "23.1.7779620"
+ }
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath("com.android.tools.build:gradle:7.3.1")
+ classpath("com.facebook.react:react-native-gradle-plugin")
+ }
+}
diff --git a/examples/exampletvOS/android/gradle.properties b/examples/exampletvOS/android/gradle.properties
new file mode 100644
index 00000000..aebdb7da
--- /dev/null
+++ b/examples/exampletvOS/android/gradle.properties
@@ -0,0 +1,44 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
+org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
+# Version of flipper SDK to use with React Native
+FLIPPER_VERSION=0.125.0
+
+# Use this property to specify which architecture you want to build.
+# You can also override it from the CLI using
+# ./gradlew -PreactNativeArchitectures=x86_64
+reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64
+
+# Use this property to enable support to the new architecture.
+# This will allow you to use TurboModules and the Fabric render in
+# your application. You should enable this flag either if you want
+# to write custom TurboModules/Fabric components OR use libraries that
+# are providing them.
+newArchEnabled=false
+
+# Use this property to enable or disable the Hermes JS engine.
+# If set to false, you will be using JSC instead.
+hermesEnabled=true
diff --git a/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.jar b/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..41d9927a
Binary files /dev/null and b/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.properties b/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..8fad3f5a
--- /dev/null
+++ b/examples/exampletvOS/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/examples/exampletvOS/android/gradlew b/examples/exampletvOS/android/gradlew
new file mode 100755
index 00000000..1b6c7873
--- /dev/null
+++ b/examples/exampletvOS/android/gradlew
@@ -0,0 +1,234 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
+
+APP_NAME="Gradle"
+APP_BASE_NAME=${0##*/}
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+# Collect all arguments for the java command;
+# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
+# shell script including quotes and variable substitutions, so put them in
+# double quotes to make sure that they get re-expanded; and
+# * put everything else in single quotes, so that it's not re-expanded.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/examples/exampletvOS/android/gradlew.bat b/examples/exampletvOS/android/gradlew.bat
new file mode 100644
index 00000000..107acd32
--- /dev/null
+++ b/examples/exampletvOS/android/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/examples/exampletvOS/android/settings.gradle b/examples/exampletvOS/android/settings.gradle
new file mode 100644
index 00000000..2f29a75e
--- /dev/null
+++ b/examples/exampletvOS/android/settings.gradle
@@ -0,0 +1,4 @@
+rootProject.name = 'exampletvOS'
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
+include ':app'
+includeBuild('../node_modules/react-native-gradle-plugin')
diff --git a/examples/exampletvOS/app.json b/examples/exampletvOS/app.json
new file mode 100644
index 00000000..a8cf81ca
--- /dev/null
+++ b/examples/exampletvOS/app.json
@@ -0,0 +1,4 @@
+{
+ "name": "exampletvOS",
+ "displayName": "exampletvOS"
+}
\ No newline at end of file
diff --git a/examples/exampletvOS/babel.config.js b/examples/exampletvOS/babel.config.js
new file mode 100644
index 00000000..ab98531d
--- /dev/null
+++ b/examples/exampletvOS/babel.config.js
@@ -0,0 +1,17 @@
+const path = require('path');
+const pak = require('../../package.json');
+
+module.exports = {
+ presets: ['module:metro-react-native-babel-preset'],
+ plugins: [
+ [
+ 'module-resolver',
+ {
+ extensions: ['.tsx', '.ts', '.js', '.json'],
+ alias: {
+ [pak.name]: path.join(__dirname, '..', '..', pak.source),
+ },
+ },
+ ],
+ ],
+};
diff --git a/examples/exampletvOS/index.js b/examples/exampletvOS/index.js
new file mode 100644
index 00000000..a850d031
--- /dev/null
+++ b/examples/exampletvOS/index.js
@@ -0,0 +1,9 @@
+/**
+ * @format
+ */
+
+import {AppRegistry} from 'react-native';
+import App from './App';
+import {name as appName} from './app.json';
+
+AppRegistry.registerComponent(appName, () => App);
diff --git a/examples/exampletvOS/ios/.xcode.env b/examples/exampletvOS/ios/.xcode.env
new file mode 100644
index 00000000..3d5782c7
--- /dev/null
+++ b/examples/exampletvOS/ios/.xcode.env
@@ -0,0 +1,11 @@
+# This `.xcode.env` file is versioned and is used to source the environment
+# used when running script phases inside Xcode.
+# To customize your local environment, you can create an `.xcode.env.local`
+# file that is not versioned.
+
+# NODE_BINARY variable contains the PATH to the node executable.
+#
+# Customize the NODE_BINARY variable here.
+# For example, to use nvm with brew, add the following line
+# . "$(brew --prefix nvm)/nvm.sh" --no-use
+export NODE_BINARY=$(command -v node)
diff --git a/examples/exampletvOS/ios/Podfile b/examples/exampletvOS/ios/Podfile
new file mode 100644
index 00000000..23f41302
--- /dev/null
+++ b/examples/exampletvOS/ios/Podfile
@@ -0,0 +1,86 @@
+require_relative '../node_modules/react-native/scripts/react_native_pods'
+require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
+
+source 'https://github.com/react-native-tvos/react-native-tvos-podspecs.git'
+source 'https://cdn.cocoapods.org/'
+prepare_react_native_project!
+
+production = ENV["PRODUCTION"] == "1"
+
+target 'exampletvOS' do
+
+ platform :ios, min_ios_version_supported
+
+ config = use_native_modules!
+
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
+ # If you are using a `react-native-flipper` your iOS build will fail when `NO_FLIPPER=1` is set.
+ # because `react-native-flipper` depends on (FlipperKit,...) that will be excluded
+ #
+ # To fix this you can also exclude `react-native-flipper` using a `react-native.config.js`
+ # ```js
+ # module.exports = {
+ # dependencies: {
+ # ...(process.env.NO_FLIPPER ? { 'react-native-flipper': { platforms: { ios: null } } } : {}),
+ # ```
+ flipper_config = ENV['NO_FLIPPER'] == "1" ? FlipperConfiguration.disabled : FlipperConfiguration.enabled
+
+ use_react_native!(
+ :path => config[:reactNativePath],
+ # Hermes is now enabled by default. Disable by setting this flag to false.
+ # Upcoming versions of React Native may rely on get_default_flags(), but
+ # we make it explicit here to aid in the React Native upgrade process.
+ :hermes_enabled => true,
+ :fabric_enabled => flags[:fabric_enabled],
+ # Enables Flipper.
+ #
+ # Note that if you have use_frameworks! enabled, Flipper will not work and
+ # you should disable the next line.
+ :flipper_configuration => flipper_config,
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
+ )
+
+ target 'exampletvOSTests' do
+ inherit! :complete
+ # Pods for testing
+ end
+end
+
+target 'exampletvOS-tvOS' do
+
+ platform :tvos, min_ios_version_supported
+
+ config = use_native_modules!
+
+ # Flags change depending on the env values.
+ flags = get_default_flags()
+
+ use_react_native!(
+ :path => config[:reactNativePath],
+ # Hermes is now enabled by default. Disable by setting this flag to false.
+ # Upcoming versions of React Native may rely on get_default_flags(), but
+ # we make it explicit here to aid in the React Native upgrade process.
+ :hermes_enabled => true,
+ :fabric_enabled => flags[:fabric_enabled],
+ # An absolute path to your application root.
+ :app_path => "#{Pod::Config.instance.installation_root}/.."
+ )
+
+ target 'exampletvOS-tvOSTests' do
+ inherit! :complete
+ # Pods for testing
+ end
+end
+
+post_install do |installer|
+ react_native_post_install(
+ installer,
+ # Set `mac_catalyst_enabled` to `true` in order to apply patches
+ # necessary for Mac Catalyst builds
+ :mac_catalyst_enabled => false
+ )
+ __apply_Xcode_12_5_M1_post_install_workaround(installer)
+end
diff --git a/examples/exampletvOS/ios/Podfile.lock b/examples/exampletvOS/ios/Podfile.lock
new file mode 100644
index 00000000..4051f0e5
--- /dev/null
+++ b/examples/exampletvOS/ios/Podfile.lock
@@ -0,0 +1,620 @@
+PODS:
+ - boost (1.76.0)
+ - CocoaAsyncSocket (7.6.5)
+ - DoubleConversion (1.1.6)
+ - FBLazyVector (0.71.12-0)
+ - FBReactNativeSpec (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTRequired (= 0.71.12-0)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Core (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - Flipper (0.125.0):
+ - Flipper-Folly (~> 2.6)
+ - Flipper-RSocket (~> 1.4)
+ - Flipper-Boost-iOSX (1.76.0.1.11)
+ - Flipper-DoubleConversion (3.2.0.1)
+ - Flipper-Fmt (7.1.7)
+ - Flipper-Folly (2.6.10):
+ - Flipper-Boost-iOSX
+ - Flipper-DoubleConversion
+ - Flipper-Fmt (= 7.1.7)
+ - Flipper-Glog
+ - libevent (~> 2.1.12)
+ - OpenSSL-Universal (= 1.1.1100)
+ - Flipper-Glog (0.5.0.5)
+ - Flipper-PeerTalk (0.0.4)
+ - Flipper-RSocket (1.4.3):
+ - Flipper-Folly (~> 2.6)
+ - FlipperKit (0.125.0):
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/Core (0.125.0):
+ - Flipper (~> 0.125.0)
+ - FlipperKit/CppBridge
+ - FlipperKit/FBCxxFollyDynamicConvert
+ - FlipperKit/FBDefines
+ - FlipperKit/FKPortForwarding
+ - SocketRocket (~> 0.6.0)
+ - FlipperKit/CppBridge (0.125.0):
+ - Flipper (~> 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (0.125.0):
+ - Flipper-Folly (~> 2.6)
+ - FlipperKit/FBDefines (0.125.0)
+ - FlipperKit/FKPortForwarding (0.125.0):
+ - CocoaAsyncSocket (~> 7.6)
+ - Flipper-PeerTalk (~> 0.0.4)
+ - FlipperKit/FlipperKitHighlightOverlay (0.125.0)
+ - FlipperKit/FlipperKitLayoutHelpers (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitHighlightOverlay
+ - FlipperKit/FlipperKitLayoutTextSearchable
+ - FlipperKit/FlipperKitLayoutIOSDescriptors (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitHighlightOverlay
+ - FlipperKit/FlipperKitLayoutHelpers
+ - YogaKit (~> 1.18)
+ - FlipperKit/FlipperKitLayoutPlugin (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitHighlightOverlay
+ - FlipperKit/FlipperKitLayoutHelpers
+ - FlipperKit/FlipperKitLayoutIOSDescriptors
+ - FlipperKit/FlipperKitLayoutTextSearchable
+ - YogaKit (~> 1.18)
+ - FlipperKit/FlipperKitLayoutTextSearchable (0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitReactPlugin (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitUserDefaultsPlugin (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/SKIOSNetworkPlugin (0.125.0):
+ - FlipperKit/Core
+ - FlipperKit/FlipperKitNetworkPlugin
+ - fmt (7.1.3)
+ - glog (0.3.5)
+ - hermes-engine (0.71.12-0):
+ - hermes-engine/Pre-built (= 0.71.12-0)
+ - hermes-engine/Pre-built (0.71.12-0)
+ - libevent (2.1.12.1)
+ - OpenSSL-Universal (1.1.1100)
+ - PromisesObjC (2.3.1)
+ - PromisesSwift (2.3.1):
+ - PromisesObjC (= 2.3.1)
+ - RCT-Folly (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt
+ - glog
+ - RCT-Folly/Default (= 2021.07.22.00)
+ - RCT-Folly/Default (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt
+ - glog
+ - RCT-Folly/Futures (2021.07.22.00):
+ - boost
+ - DoubleConversion
+ - fmt
+ - glog
+ - libevent
+ - RCTRequired (0.71.12-0)
+ - RCTTypeSafety (0.71.12-0):
+ - FBLazyVector (= 0.71.12-0)
+ - RCTRequired (= 0.71.12-0)
+ - React-Core (= 0.71.12-0)
+ - React (0.71.12-0):
+ - React-Core (= 0.71.12-0)
+ - React-Core/DevSupport (= 0.71.12-0)
+ - React-Core/RCTWebSocket (= 0.71.12-0)
+ - React-RCTAnimation (= 0.71.12-0)
+ - React-RCTBlob (= 0.71.12-0)
+ - React-RCTImage (= 0.71.12-0)
+ - React-RCTLinking (= 0.71.12-0)
+ - React-RCTNetwork (= 0.71.12-0)
+ - React-RCTSettings (= 0.71.12-0)
+ - React-RCTText (= 0.71.12-0)
+ - React-callinvoker (0.71.12-0)
+ - React-Codegen (0.71.12-0):
+ - FBReactNativeSpec
+ - hermes-engine
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - React-jsi
+ - React-jsiexecutor
+ - ReactCommon/turbomodule/bridging
+ - ReactCommon/turbomodule/core
+ - React-Core (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.71.12-0)
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/CoreModulesHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/Default (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/DevSupport (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.71.12-0)
+ - React-Core/RCTWebSocket (= 0.71.12-0)
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-jsinspector (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTActionSheetHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTAnimationHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTBlobHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTImageHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTLinkingHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTNetworkHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTSettingsHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTTextHeaders (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-Core/RCTWebSocket (0.71.12-0):
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Core/Default (= 0.71.12-0)
+ - React-cxxreact (= 0.71.12-0)
+ - React-hermes
+ - React-jsi (= 0.71.12-0)
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - Yoga
+ - React-CoreModules (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/CoreModulesHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-RCTBlob
+ - React-RCTImage (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-cxxreact (0.71.12-0):
+ - boost (= 1.76.0)
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-jsinspector (= 0.71.12-0)
+ - React-logger (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - React-runtimeexecutor (= 0.71.12-0)
+ - React-hermes (0.71.12-0):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - RCT-Folly/Futures (= 2021.07.22.00)
+ - React-cxxreact (= 0.71.12-0)
+ - React-jsi
+ - React-jsiexecutor (= 0.71.12-0)
+ - React-jsinspector (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - React-jsi (0.71.12-0):
+ - boost (= 1.76.0)
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-jsiexecutor (0.71.12-0):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-cxxreact (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - React-jsinspector (0.71.12-0)
+ - React-logger (0.71.12-0):
+ - glog
+ - react-native-video (6.0.0-alpha.7):
+ - React-Core
+ - react-native-video/Video (= 6.0.0-alpha.7)
+ - react-native-video/Video (6.0.0-alpha.7):
+ - PromisesSwift
+ - React-Core
+ - React-perflogger (0.71.12-0)
+ - React-RCTActionSheet (0.71.12-0):
+ - React-Core/RCTActionSheetHeaders (= 0.71.12-0)
+ - React-RCTAnimation (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTAnimationHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTAppDelegate (0.71.12-0):
+ - RCT-Folly
+ - RCTRequired
+ - RCTTypeSafety
+ - React-Core
+ - ReactCommon/turbomodule/core
+ - React-RCTBlob (0.71.12-0):
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTBlobHeaders (= 0.71.12-0)
+ - React-Core/RCTWebSocket (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-RCTNetwork (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTImage (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTImageHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-RCTNetwork (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTLinking (0.71.12-0):
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTLinkingHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTNetwork (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTNetworkHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTSettings (0.71.12-0):
+ - RCT-Folly (= 2021.07.22.00)
+ - RCTTypeSafety (= 0.71.12-0)
+ - React-Codegen (= 0.71.12-0)
+ - React-Core/RCTSettingsHeaders (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (= 0.71.12-0)
+ - React-RCTText (0.71.12-0):
+ - React-Core/RCTTextHeaders (= 0.71.12-0)
+ - React-runtimeexecutor (0.71.12-0):
+ - React-jsi (= 0.71.12-0)
+ - ReactCommon/turbomodule/bridging (0.71.12-0):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.71.12-0)
+ - React-Core (= 0.71.12-0)
+ - React-cxxreact (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-logger (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - ReactCommon/turbomodule/core (0.71.12-0):
+ - DoubleConversion
+ - glog
+ - hermes-engine
+ - RCT-Folly (= 2021.07.22.00)
+ - React-callinvoker (= 0.71.12-0)
+ - React-Core (= 0.71.12-0)
+ - React-cxxreact (= 0.71.12-0)
+ - React-jsi (= 0.71.12-0)
+ - React-logger (= 0.71.12-0)
+ - React-perflogger (= 0.71.12-0)
+ - SocketRocket (0.6.1)
+ - Yoga (1.14.0)
+ - YogaKit (1.18.1):
+ - Yoga
+
+DEPENDENCIES:
+ - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`)
+ - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
+ - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
+ - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
+ - Flipper (= 0.125.0)
+ - Flipper-Boost-iOSX (= 1.76.0.1.11)
+ - Flipper-DoubleConversion (= 3.2.0.1)
+ - Flipper-Fmt (= 7.1.7)
+ - Flipper-Folly (= 2.6.10)
+ - Flipper-Glog (= 0.5.0.5)
+ - Flipper-PeerTalk (= 0.0.4)
+ - Flipper-RSocket (= 1.4.3)
+ - FlipperKit (= 0.125.0)
+ - FlipperKit/Core (= 0.125.0)
+ - FlipperKit/CppBridge (= 0.125.0)
+ - FlipperKit/FBCxxFollyDynamicConvert (= 0.125.0)
+ - FlipperKit/FBDefines (= 0.125.0)
+ - FlipperKit/FKPortForwarding (= 0.125.0)
+ - FlipperKit/FlipperKitHighlightOverlay (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitLayoutTextSearchable (= 0.125.0)
+ - FlipperKit/FlipperKitNetworkPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitReactPlugin (= 0.125.0)
+ - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0)
+ - FlipperKit/SKIOSNetworkPlugin (= 0.125.0)
+ - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`)
+ - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
+ - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`)
+ - libevent (~> 2.1.12)
+ - OpenSSL-Universal (= 1.1.1100)
+ - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`)
+ - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
+ - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
+ - React (from `../node_modules/react-native/`)
+ - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
+ - React-Codegen (from `build/generated/ios`)
+ - React-Core (from `../node_modules/react-native/`)
+ - React-Core/DevSupport (from `../node_modules/react-native/`)
+ - React-Core/RCTWebSocket (from `../node_modules/react-native/`)
+ - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
+ - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
+ - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`)
+ - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
+ - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
+ - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
+ - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
+ - react-native-video (from `../../..`)
+ - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`)
+ - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
+ - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
+ - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`)
+ - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
+ - React-RCTImage (from `../node_modules/react-native/Libraries/Image`)
+ - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`)
+ - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`)
+ - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
+ - React-RCTText (from `../node_modules/react-native/Libraries/Text`)
+ - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`)
+ - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
+ - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
+
+SPEC REPOS:
+ https://github.com/react-native-tvos/react-native-tvos-podspecs.git:
+ - libevent
+ - YogaKit
+ trunk:
+ - CocoaAsyncSocket
+ - Flipper
+ - Flipper-Boost-iOSX
+ - Flipper-DoubleConversion
+ - Flipper-Fmt
+ - Flipper-Folly
+ - Flipper-Glog
+ - Flipper-PeerTalk
+ - Flipper-RSocket
+ - FlipperKit
+ - OpenSSL-Universal
+ - PromisesObjC
+ - PromisesSwift
+ - SocketRocket
+
+EXTERNAL SOURCES:
+ boost:
+ :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec"
+ DoubleConversion:
+ :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
+ FBLazyVector:
+ :path: "../node_modules/react-native/Libraries/FBLazyVector"
+ FBReactNativeSpec:
+ :path: "../node_modules/react-native/React/FBReactNativeSpec"
+ fmt:
+ :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec"
+ glog:
+ :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
+ hermes-engine:
+ :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec"
+ RCT-Folly:
+ :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec"
+ RCTRequired:
+ :path: "../node_modules/react-native/Libraries/RCTRequired"
+ RCTTypeSafety:
+ :path: "../node_modules/react-native/Libraries/TypeSafety"
+ React:
+ :path: "../node_modules/react-native/"
+ React-callinvoker:
+ :path: "../node_modules/react-native/ReactCommon/callinvoker"
+ React-Codegen:
+ :path: build/generated/ios
+ React-Core:
+ :path: "../node_modules/react-native/"
+ React-CoreModules:
+ :path: "../node_modules/react-native/React/CoreModules"
+ React-cxxreact:
+ :path: "../node_modules/react-native/ReactCommon/cxxreact"
+ React-hermes:
+ :path: "../node_modules/react-native/ReactCommon/hermes"
+ React-jsi:
+ :path: "../node_modules/react-native/ReactCommon/jsi"
+ React-jsiexecutor:
+ :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
+ React-jsinspector:
+ :path: "../node_modules/react-native/ReactCommon/jsinspector"
+ React-logger:
+ :path: "../node_modules/react-native/ReactCommon/logger"
+ react-native-video:
+ :path: "../../.."
+ React-perflogger:
+ :path: "../node_modules/react-native/ReactCommon/reactperflogger"
+ React-RCTActionSheet:
+ :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
+ React-RCTAnimation:
+ :path: "../node_modules/react-native/Libraries/NativeAnimation"
+ React-RCTAppDelegate:
+ :path: "../node_modules/react-native/Libraries/AppDelegate"
+ React-RCTBlob:
+ :path: "../node_modules/react-native/Libraries/Blob"
+ React-RCTImage:
+ :path: "../node_modules/react-native/Libraries/Image"
+ React-RCTLinking:
+ :path: "../node_modules/react-native/Libraries/LinkingIOS"
+ React-RCTNetwork:
+ :path: "../node_modules/react-native/Libraries/Network"
+ React-RCTSettings:
+ :path: "../node_modules/react-native/Libraries/Settings"
+ React-RCTText:
+ :path: "../node_modules/react-native/Libraries/Text"
+ React-runtimeexecutor:
+ :path: "../node_modules/react-native/ReactCommon/runtimeexecutor"
+ ReactCommon:
+ :path: "../node_modules/react-native/ReactCommon"
+ Yoga:
+ :path: "../node_modules/react-native/ReactCommon/yoga"
+
+SPEC CHECKSUMS:
+ boost: 0ed1b9a58a27b2f7885dc9f279bc3b341f44512b
+ CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
+ DoubleConversion: 234abba95e31cc2aada0cf3b97cdb11bc5b90575
+ FBLazyVector: 2397364ecb274b21cd73ab7cafca5ed804256f76
+ FBReactNativeSpec: d26e003e048018761d58a7fce16b6de638ab6a1c
+ Flipper: 26fc4b7382499f1281eb8cb921e5c3ad6de91fe0
+ Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c
+ Flipper-DoubleConversion: 2dc99b02f658daf147069aad9dbd29d8feb06d30
+ Flipper-Fmt: 60cbdd92fc254826e61d669a5d87ef7015396a9b
+ Flipper-Folly: 584845625005ff068a6ebf41f857f468decd26b3
+ Flipper-Glog: 70c50ce58ddaf67dc35180db05f191692570f446
+ Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
+ Flipper-RSocket: d9d9ade67cbecf6ac10730304bf5607266dd2541
+ FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86
+ fmt: 135c0c55547979f715b56dfa54037ececa96d07a
+ glog: a2ded9bf28f0cb2fce90ad21eb419299a500ff6c
+ hermes-engine: 3d04f537177e132da926803412639dacd59a0ee9
+ libevent: a6d75fcd7be07cbc5070300ea8dbc8d55dfab88e
+ OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
+ PromisesObjC: c50d2056b5253dadbd6c2bea79b0674bd5a52fa4
+ PromisesSwift: 28dca69a9c40779916ac2d6985a0192a5cb4a265
+ RCT-Folly: 136e9161a833a162fe3e8b647098759aae227036
+ RCTRequired: 0c0d97ba9f1e2b2b70e0522d65992a2993a714cd
+ RCTTypeSafety: 5a484bd8f18408b8918a668ac8bd8b9f9138142b
+ React: b9499a04e0463d1226b96c58d7268263b8624037
+ React-callinvoker: a6c4d83107ede53c5964c3537997e7ae3fc43949
+ React-Codegen: b2321637d64558face5bb5b0a096139f6e2d6349
+ React-Core: 6523f0d1f6580c9de01e50c26dfaf94b292fa223
+ React-CoreModules: 2adf0e599c2236c9b73c6abac836b62129504977
+ React-cxxreact: fe8f5d7b39b1c982e82eb21769559d7d0fbf6e44
+ React-hermes: 6344dd45cf27f2fd9224ad26346740e8ddb6187f
+ React-jsi: d813d42f07d2c3906c908a19a24525e67a445ea9
+ React-jsiexecutor: 0c8c5e8b2171be52295f59097923babf84d1cf66
+ React-jsinspector: f8e6919523047a9bd1270ade75b4eca0108963b4
+ React-logger: 16c56636d4209cc204d06c5ba347cee21b960012
+ react-native-video: 4c8d6b0f82b32a3f02a9fde0287704f455b7211d
+ React-perflogger: 355109dc9d6f34e35bc35dabb32310f8ed2d29a2
+ React-RCTActionSheet: 9d1be4d43972f2aae4b31d9e53ffb030115fa445
+ React-RCTAnimation: aab7e1ecd325db67e1f2a947d85a52adf86594b7
+ React-RCTAppDelegate: eaf8b5d39a0d6670c580e004731d6bfe336c8f4a
+ React-RCTBlob: 344b786aad1297167a80a430e93b2654ed1c89b2
+ React-RCTImage: 32568a74e42ea49a66d18e831843a55dd8b299f4
+ React-RCTLinking: 6cac50234378849f20ce4097fd91fb8b18f9f21d
+ React-RCTNetwork: b83f9f29568cf86fb817dfd9983a3d8fa4d222cc
+ React-RCTSettings: c9fb606b1569c8a4f8d3260d78bd5f7ccd1e48cf
+ React-RCTText: 73a8151c2fc1c6a2b5329ddd569d39051fede43f
+ React-runtimeexecutor: b2df3ae123833935b4b57a3e8638227624800f41
+ ReactCommon: ebabc58ce77fb38274c1659471d6d46549ab69db
+ SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
+ Yoga: 8b8c06e142662150974d1c70b4c5ffb08eb468db
+ YogaKit: 1e22bf2228b3a5ac8cc88965153061ae92c494b5
+
+PODFILE CHECKSUM: 49dad183688257f9360c15d54e77f8de0f8048f7
+
+COCOAPODS: 1.12.1
diff --git a/examples/exampletvOS/ios/exampletvOS-tvOS/Info.plist b/examples/exampletvOS/ios/exampletvOS-tvOS/Info.plist
new file mode 100644
index 00000000..4adc6a42
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS-tvOS/Info.plist
@@ -0,0 +1,53 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+ NSLocationWhenInUseUsageDescription
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS-tvOSTests/Info.plist b/examples/exampletvOS/ios/exampletvOS-tvOSTests/Info.plist
new file mode 100644
index 00000000..07d6a211
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS-tvOSTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
\ No newline at end of file
diff --git a/examples/exampletvOS/ios/exampletvOS.xcodeproj/project.pbxproj b/examples/exampletvOS/ios/exampletvOS.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..3d1d7fa1
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS.xcodeproj/project.pbxproj
@@ -0,0 +1,1096 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00E356F31AD99517003FC87E /* exampletvOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampletvOSTests.m */; };
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 269984920579226908D49904 /* libPods-exampletvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2855AB2CCC04BED0978AE /* libPods-exampletvOS.a */; };
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.mm */; };
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
+ 2DCD954D1E0B4F2C00145EB5 /* exampletvOSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampletvOSTests.m */; };
+ 41BF5F3596F87FEE707DDD11 /* libPods-exampletvOS-exampletvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F21F13455730034D850CD1C /* libPods-exampletvOS-exampletvOSTests.a */; };
+ 47EB63F3390701B2260096C6 /* libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A0216F1136BF7C90703C880F /* libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a */; };
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
+ EE57DEA5314790D63C074D03 /* libPods-exampletvOS-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EA54FCF2086BA3B4678F8237 /* libPods-exampletvOS-tvOS.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
+ remoteInfo = exampletvOS;
+ };
+ 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
+ remoteInfo = "exampletvOS-tvOS";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXFileReference section */
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; };
+ 00E356EE1AD99517003FC87E /* exampletvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampletvOSTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 00E356F21AD99517003FC87E /* exampletvOSTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampletvOSTests.m; sourceTree = ""; };
+ 015BA46D04C1496C29E63456 /* Pods-exampletvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS.debug.xcconfig"; path = "Target Support Files/Pods-exampletvOS/Pods-exampletvOS.debug.xcconfig"; sourceTree = ""; };
+ 13B07F961A680F5B00A75B9A /* exampletvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = exampletvOS.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = exampletvOS/AppDelegate.h; sourceTree = ""; };
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.mm; path = exampletvOS/AppDelegate.mm; sourceTree = ""; };
+ 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = exampletvOS/Images.xcassets; sourceTree = ""; };
+ 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = exampletvOS/Info.plist; sourceTree = ""; };
+ 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = exampletvOS/main.m; sourceTree = ""; };
+ 224D5D4AEB9A0A36B75746AA /* Pods-exampletvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS.release.xcconfig"; path = "Target Support Files/Pods-exampletvOS/Pods-exampletvOS.release.xcconfig"; sourceTree = ""; };
+ 2C329346E04FD437DBF160C6 /* Pods-exampletvOS-exampletvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-exampletvOSTests.release.xcconfig"; path = "Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests.release.xcconfig"; sourceTree = ""; };
+ 2D02E47B1E0B4A5D006451C7 /* exampletvOS-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "exampletvOS-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2D02E4901E0B4A5D006451C7 /* exampletvOS-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "exampletvOS-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 36771B2C8C43AC6099096637 /* Pods-exampletvOS-exampletvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-exampletvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests.debug.xcconfig"; sourceTree = ""; };
+ 388308430DF4BE056B0CEF13 /* Pods-exampletvOS-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-tvOS.release.xcconfig"; path = "Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS.release.xcconfig"; sourceTree = ""; };
+ 3BDF8C4CCF278F944E8C6CBF /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.release.xcconfig"; sourceTree = ""; };
+ 4F21F13455730034D850CD1C /* libPods-exampletvOS-exampletvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exampletvOS-exampletvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = exampletvOS/LaunchScreen.storyboard; sourceTree = ""; };
+ 8DC2855AB2CCC04BED0978AE /* libPods-exampletvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exampletvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A0216F1136BF7C90703C880F /* libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ CCE9A90FED9D09047497AB6D /* Pods-exampletvOS-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS.debug.xcconfig"; sourceTree = ""; };
+ E8891750AE2DFBD87A5BDB74 /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.debug.xcconfig"; sourceTree = ""; };
+ EA54FCF2086BA3B4678F8237 /* libPods-exampletvOS-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exampletvOS-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
+ 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; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 00E356EB1AD99517003FC87E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 41BF5F3596F87FEE707DDD11 /* libPods-exampletvOS-exampletvOSTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 269984920579226908D49904 /* libPods-exampletvOS.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ EE57DEA5314790D63C074D03 /* libPods-exampletvOS-tvOS.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 47EB63F3390701B2260096C6 /* libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 00E356EF1AD99517003FC87E /* exampletvOSTests */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F21AD99517003FC87E /* exampletvOSTests.m */,
+ 00E356F01AD99517003FC87E /* Supporting Files */,
+ );
+ path = exampletvOSTests;
+ sourceTree = "";
+ };
+ 00E356F01AD99517003FC87E /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 00E356F11AD99517003FC87E /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+ 13B07FAE1A68108700A75B9A /* exampletvOS */ = {
+ isa = PBXGroup;
+ children = (
+ 008F07F21AC5B25A0029DE68 /* main.jsbundle */,
+ 13B07FAF1A68108700A75B9A /* AppDelegate.h */,
+ 13B07FB01A68108700A75B9A /* AppDelegate.mm */,
+ 13B07FB51A68108700A75B9A /* Images.xcassets */,
+ 13B07FB61A68108700A75B9A /* Info.plist */,
+ 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
+ 13B07FB71A68108700A75B9A /* main.m */,
+ );
+ name = exampletvOS;
+ sourceTree = "";
+ };
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
+ ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
+ 8DC2855AB2CCC04BED0978AE /* libPods-exampletvOS.a */,
+ 4F21F13455730034D850CD1C /* libPods-exampletvOS-exampletvOSTests.a */,
+ EA54FCF2086BA3B4678F8237 /* libPods-exampletvOS-tvOS.a */,
+ A0216F1136BF7C90703C880F /* libPods-exampletvOS-tvOS-exampletvOS-tvOSTests.a */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 832341AE1AAA6A7D00B99B32 /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Libraries;
+ sourceTree = "";
+ };
+ 83CBB9F61A601CBA00E9B192 = {
+ isa = PBXGroup;
+ children = (
+ 13B07FAE1A68108700A75B9A /* exampletvOS */,
+ 832341AE1AAA6A7D00B99B32 /* Libraries */,
+ 00E356EF1AD99517003FC87E /* exampletvOSTests */,
+ 83CBBA001A601CBA00E9B192 /* Products */,
+ 2D16E6871FA4F8E400B85C8A /* Frameworks */,
+ 9B1644CBAE2FABCCC6E29A69 /* Pods */,
+ );
+ indentWidth = 2;
+ sourceTree = "";
+ tabWidth = 2;
+ usesTabs = 0;
+ };
+ 83CBBA001A601CBA00E9B192 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 13B07F961A680F5B00A75B9A /* exampletvOS.app */,
+ 00E356EE1AD99517003FC87E /* exampletvOSTests.xctest */,
+ 2D02E47B1E0B4A5D006451C7 /* exampletvOS-tvOS.app */,
+ 2D02E4901E0B4A5D006451C7 /* exampletvOS-tvOSTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 9B1644CBAE2FABCCC6E29A69 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 015BA46D04C1496C29E63456 /* Pods-exampletvOS.debug.xcconfig */,
+ 224D5D4AEB9A0A36B75746AA /* Pods-exampletvOS.release.xcconfig */,
+ 36771B2C8C43AC6099096637 /* Pods-exampletvOS-exampletvOSTests.debug.xcconfig */,
+ 2C329346E04FD437DBF160C6 /* Pods-exampletvOS-exampletvOSTests.release.xcconfig */,
+ CCE9A90FED9D09047497AB6D /* Pods-exampletvOS-tvOS.debug.xcconfig */,
+ 388308430DF4BE056B0CEF13 /* Pods-exampletvOS-tvOS.release.xcconfig */,
+ E8891750AE2DFBD87A5BDB74 /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.debug.xcconfig */,
+ 3BDF8C4CCF278F944E8C6CBF /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 00E356ED1AD99517003FC87E /* exampletvOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampletvOSTests" */;
+ buildPhases = (
+ BC8CB606DF6125BE2BCE6F48 /* [CP] Check Pods Manifest.lock */,
+ 00E356EA1AD99517003FC87E /* Sources */,
+ 00E356EB1AD99517003FC87E /* Frameworks */,
+ 00E356EC1AD99517003FC87E /* Resources */,
+ D9B6B751E2AEDF3F7AB29F2D /* [CP] Copy Pods Resources */,
+ A7BC8AD5F38E060ECF380790 /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */,
+ );
+ name = exampletvOSTests;
+ productName = exampletvOSTests;
+ productReference = 00E356EE1AD99517003FC87E /* exampletvOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 13B07F861A680F5B00A75B9A /* exampletvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "exampletvOS" */;
+ buildPhases = (
+ 5227897DA0E4608219DEAFFA /* [CP] Check Pods Manifest.lock */,
+ FD10A7F022414F080027D42C /* Start Packager */,
+ 13B07F871A680F5B00A75B9A /* Sources */,
+ 13B07F8C1A680F5B00A75B9A /* Frameworks */,
+ 13B07F8E1A680F5B00A75B9A /* Resources */,
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
+ 0D7507D506130F6246FD97BE /* [CP] Copy Pods Resources */,
+ 2D0FE9B0618B7653931FB828 /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = exampletvOS;
+ productName = exampletvOS;
+ productReference = 13B07F961A680F5B00A75B9A /* exampletvOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E47A1E0B4A5D006451C7 /* exampletvOS-tvOS */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "exampletvOS-tvOS" */;
+ buildPhases = (
+ 966D472419EA4A89F6874B5E /* [CP] Check Pods Manifest.lock */,
+ FD10A7F122414F3F0027D42C /* Start Packager */,
+ 2D02E4771E0B4A5D006451C7 /* Sources */,
+ 2D02E4781E0B4A5D006451C7 /* Frameworks */,
+ 2D02E4791E0B4A5D006451C7 /* Resources */,
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
+ 42686649B799B0EA1ADB4648 /* [CP] Copy Pods Resources */,
+ ED633C06123B38C012707698 /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "exampletvOS-tvOS";
+ productName = "exampletvOS-tvOS";
+ productReference = 2D02E47B1E0B4A5D006451C7 /* exampletvOS-tvOS.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 2D02E48F1E0B4A5D006451C7 /* exampletvOS-tvOSTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "exampletvOS-tvOSTests" */;
+ buildPhases = (
+ C021C441AB5F12C78313DC25 /* [CP] Check Pods Manifest.lock */,
+ 2D02E48C1E0B4A5D006451C7 /* Sources */,
+ 2D02E48D1E0B4A5D006451C7 /* Frameworks */,
+ 2D02E48E1E0B4A5D006451C7 /* Resources */,
+ 84F93B44286727BF8D357577 /* [CP] Copy Pods Resources */,
+ D8B17B456BDCF3F3A01CF942 /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
+ );
+ name = "exampletvOS-tvOSTests";
+ productName = "exampletvOS-tvOSTests";
+ productReference = 2D02E4901E0B4A5D006451C7 /* exampletvOS-tvOSTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83CBB9F71A601CBA00E9B192 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1130;
+ TargetAttributes = {
+ 00E356ED1AD99517003FC87E = {
+ CreatedOnToolsVersion = 6.2;
+ TestTargetID = 13B07F861A680F5B00A75B9A;
+ };
+ 13B07F861A680F5B00A75B9A = {
+ LastSwiftMigration = 1120;
+ };
+ 2D02E47A1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ ProvisioningStyle = Automatic;
+ };
+ 2D02E48F1E0B4A5D006451C7 = {
+ CreatedOnToolsVersion = 8.2.1;
+ ProvisioningStyle = Automatic;
+ TestTargetID = 2D02E47A1E0B4A5D006451C7;
+ };
+ };
+ };
+ buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "exampletvOS" */;
+ compatibilityVersion = "Xcode 12.0";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 83CBB9F61A601CBA00E9B192;
+ productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 13B07F861A680F5B00A75B9A /* exampletvOS */,
+ 00E356ED1AD99517003FC87E /* exampletvOSTests */,
+ 2D02E47A1E0B4A5D006451C7 /* exampletvOS-tvOS */,
+ 2D02E48F1E0B4A5D006451C7 /* exampletvOS-tvOSTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 00E356EC1AD99517003FC87E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F8E1A680F5B00A75B9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
+ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4791E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48E1E0B4A5D006451C7 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "$(SRCROOT)/.xcode.env.local",
+ "$(SRCROOT)/.xcode.env",
+ );
+ name = "Bundle React Native code and images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
+ };
+ 0D7507D506130F6246FD97BE /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Bundle React Native Code And Images";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
+ };
+ 2D0FE9B0618B7653931FB828 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS/Pods-exampletvOS-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 42686649B799B0EA1ADB4648 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 5227897DA0E4608219DEAFFA /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-exampletvOS-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+ 84F93B44286727BF8D357577 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 966D472419EA4A89F6874B5E /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-exampletvOS-tvOS-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+ A7BC8AD5F38E060ECF380790 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ BC8CB606DF6125BE2BCE6F48 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-exampletvOS-exampletvOSTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+ C021C441AB5F12C78313DC25 /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+ D8B17B456BDCF3F3A01CF942 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests/Pods-exampletvOS-tvOS-exampletvOS-tvOSTests-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ D9B6B751E2AEDF3F7AB29F2D /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-exampletvOSTests/Pods-exampletvOS-exampletvOSTests-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ ED633C06123B38C012707698 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-exampletvOS-tvOS/Pods-exampletvOS-tvOS-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F022414F080027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+ FD10A7F122414F3F0027D42C /* Start Packager */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Start Packager";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ 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";
+ showEnvVarsInLog = 0;
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 00E356EA1AD99517003FC87E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 00E356F31AD99517003FC87E /* exampletvOSTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 13B07F871A680F5B00A75B9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 13B07FBC1A68108700A75B9A /* AppDelegate.mm in Sources */,
+ 13B07FC11A68108700A75B9A /* main.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E4771E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
+ 2D02E4BC1E0B4A80006451C7 /* AppDelegate.mm in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2D02E48C1E0B4A5D006451C7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 2DCD954D1E0B4F2C00145EB5 /* exampletvOSTests.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 13B07F861A680F5B00A75B9A /* exampletvOS */;
+ targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
+ };
+ 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 2D02E47A1E0B4A5D006451C7 /* exampletvOS-tvOS */;
+ targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 00E356F61AD99517003FC87E /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 36771B2C8C43AC6099096637 /* Pods-exampletvOS-exampletvOSTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ INFOPLIST_FILE = exampletvOSTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/exampletvOS.app/exampletvOS";
+ };
+ name = Debug;
+ };
+ 00E356F71AD99517003FC87E /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 2C329346E04FD437DBF160C6 /* Pods-exampletvOS-exampletvOSTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ COPY_PHASE_STRIP = NO;
+ INFOPLIST_FILE = exampletvOSTests/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "-ObjC",
+ "-lc++",
+ "$(inherited)",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/exampletvOS.app/exampletvOS";
+ };
+ name = Release;
+ };
+ 13B07F941A680F5B00A75B9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 015BA46D04C1496C29E63456 /* Pods-exampletvOS.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ ENABLE_BITCODE = NO;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "$(inherited)",
+ "COCOAPODS=1",
+ );
+ INFOPLIST_FILE = exampletvOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = exampletvOS;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 13B07F951A680F5B00A75B9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 224D5D4AEB9A0A36B75746AA /* Pods-exampletvOS.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = 1;
+ INFOPLIST_FILE = exampletvOS/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
+ PRODUCT_NAME = exampletvOS;
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 2D02E4971E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = CCE9A90FED9D09047497AB6D /* Pods-exampletvOS-tvOS.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_BITCODE = NO;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "exampletvOS-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.exampletvOS-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 12.4;
+ };
+ name = Debug;
+ };
+ 2D02E4981E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 388308430DF4BE056B0CEF13 /* Pods-exampletvOS-tvOS.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
+ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_BITCODE = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "exampletvOS-tvOS/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ MARKETING_VERSION = 1.0;
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.exampletvOS-tvOS";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 3;
+ TVOS_DEPLOYMENT_TARGET = 12.4;
+ };
+ name = Release;
+ };
+ 2D02E4991E0B4A5E006451C7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = E8891750AE2DFBD87A5BDB74 /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_TESTABILITY = YES;
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "exampletvOS-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.exampletvOS-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/exampletvOS-tvOS.app/exampletvOS-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 12.4;
+ };
+ name = Debug;
+ };
+ 2D02E49A1E0B4A5E006451C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 3BDF8C4CCF278F944E8C6CBF /* Pods-exampletvOS-tvOS-exampletvOS-tvOSTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_NO_COMMON_BLOCKS = YES;
+ INFOPLIST_FILE = "exampletvOS-tvOSTests/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-ObjC",
+ "-lc++",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.exampletvOS-tvOSTests";
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SDKROOT = appletvos;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/exampletvOS-tvOS.app/exampletvOS-tvOS";
+ TVOS_DEPLOYMENT_TARGET = 12.4;
+ };
+ name = Release;
+ };
+ 83CBBA201A601CBA00E9B192 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ "EXCLUDED_ARCHS[sdk=appletvsimulator*]" = i386;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "$(SDKROOT)/usr/lib/swift",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ 83CBBA211A601CBA00E9B192 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "c++17";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ "EXCLUDED_ARCHS[sdk=appletvsimulator*]" = i386;
+ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.4;
+ LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
+ LIBRARY_SEARCH_PATHS = (
+ "$(SDKROOT)/usr/lib/swift",
+ "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
+ "\"$(inherited)\"",
+ );
+ MTL_ENABLE_DEBUG_INFO = NO;
+ REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampletvOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 00E356F61AD99517003FC87E /* Debug */,
+ 00E356F71AD99517003FC87E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "exampletvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B07F941A680F5B00A75B9A /* Debug */,
+ 13B07F951A680F5B00A75B9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "exampletvOS-tvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4971E0B4A5E006451C7 /* Debug */,
+ 2D02E4981E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "exampletvOS-tvOSTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 2D02E4991E0B4A5E006451C7 /* Debug */,
+ 2D02E49A1E0B4A5E006451C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "exampletvOS" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83CBBA201A601CBA00E9B192 /* Debug */,
+ 83CBBA211A601CBA00E9B192 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
+}
diff --git a/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS-tvOS.xcscheme b/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS-tvOS.xcscheme
new file mode 100644
index 00000000..003c3b4c
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS-tvOS.xcscheme
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS.xcscheme b/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS.xcscheme
new file mode 100644
index 00000000..020370bb
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS.xcodeproj/xcshareddata/xcschemes/exampletvOS.xcscheme
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS.xcworkspace/contents.xcworkspacedata b/examples/exampletvOS/ios/exampletvOS.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..11c1b534
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/examples/exampletvOS/ios/exampletvOS.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS/AppDelegate.h b/examples/exampletvOS/ios/exampletvOS/AppDelegate.h
new file mode 100644
index 00000000..5d280825
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/AppDelegate.h
@@ -0,0 +1,6 @@
+#import
+#import
+
+@interface AppDelegate : RCTAppDelegate
+
+@end
diff --git a/examples/exampletvOS/ios/exampletvOS/AppDelegate.mm b/examples/exampletvOS/ios/exampletvOS/AppDelegate.mm
new file mode 100644
index 00000000..c5ace664
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/AppDelegate.mm
@@ -0,0 +1,36 @@
+#import "AppDelegate.h"
+
+#import
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
+{
+ self.moduleName = @"exampletvOS";
+ // You can add your custom initial props in the dictionary below.
+ // They will be passed down to the ViewController used by React Native.
+ self.initialProps = @{};
+
+ return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
+{
+#if DEBUG
+ return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
+#else
+ return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
+#endif
+}
+
+/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off.
+///
+/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html
+/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture).
+/// @return: `true` if the `concurrentRoot` feature is enabled. Otherwise, it returns `false`.
+- (BOOL)concurrentRootEnabled
+{
+ return true;
+}
+
+@end
diff --git a/examples/exampletvOS/ios/exampletvOS/Images.xcassets/AppIcon.appiconset/Contents.json b/examples/exampletvOS/ios/exampletvOS/Images.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..81213230
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/Images.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,53 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/examples/exampletvOS/ios/exampletvOS/Images.xcassets/Contents.json b/examples/exampletvOS/ios/exampletvOS/Images.xcassets/Contents.json
new file mode 100644
index 00000000..2d92bd53
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/Images.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/examples/exampletvOS/ios/exampletvOS/Info.plist b/examples/exampletvOS/ios/exampletvOS/Info.plist
new file mode 100644
index 00000000..8d4e3c15
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/Info.plist
@@ -0,0 +1,55 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleDisplayName
+ exampletvOS
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSExceptionDomains
+
+ localhost
+
+ NSExceptionAllowsInsecureHTTPLoads
+
+
+
+
+ NSLocationWhenInUseUsageDescription
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ arm64
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS/LaunchScreen.storyboard b/examples/exampletvOS/ios/exampletvOS/LaunchScreen.storyboard
new file mode 100644
index 00000000..5b754d6b
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/LaunchScreen.storyboard
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/exampletvOS/ios/exampletvOS/main.m b/examples/exampletvOS/ios/exampletvOS/main.m
new file mode 100644
index 00000000..d645c724
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOS/main.m
@@ -0,0 +1,10 @@
+#import
+
+#import "AppDelegate.h"
+
+int main(int argc, char *argv[])
+{
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/examples/exampletvOS/ios/exampletvOSTests/Info.plist b/examples/exampletvOS/ios/exampletvOSTests/Info.plist
new file mode 100644
index 00000000..ba72822e
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOSTests/Info.plist
@@ -0,0 +1,24 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1
+
+
diff --git a/examples/exampletvOS/ios/exampletvOSTests/exampletvOSTests.m b/examples/exampletvOS/ios/exampletvOSTests/exampletvOSTests.m
new file mode 100644
index 00000000..0c8f4d85
--- /dev/null
+++ b/examples/exampletvOS/ios/exampletvOSTests/exampletvOSTests.m
@@ -0,0 +1,66 @@
+#import
+#import
+
+#import
+#import
+
+#define TIMEOUT_SECONDS 600
+#define TEXT_TO_LOOK_FOR @"Welcome to React"
+
+@interface exampletvOSTests : XCTestCase
+
+@end
+
+@implementation exampletvOSTests
+
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test
+{
+ if (test(view)) {
+ return YES;
+ }
+ for (UIView *subview in [view subviews]) {
+ if ([self findSubviewInView:subview matching:test]) {
+ return YES;
+ }
+ }
+ return NO;
+}
+
+- (void)testRendersWelcomeScreen
+{
+ UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
+ NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
+ BOOL foundElement = NO;
+
+ __block NSString *redboxError = nil;
+#ifdef DEBUG
+ RCTSetLogFunction(
+ ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
+ if (level >= RCTLogLevelError) {
+ redboxError = message;
+ }
+ });
+#endif
+
+ while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
+ [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+ [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
+
+ foundElement = [self findSubviewInView:vc.view
+ matching:^BOOL(UIView *view) {
+ if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
+ return YES;
+ }
+ return NO;
+ }];
+ }
+
+#ifdef DEBUG
+ RCTSetLogFunction(RCTDefaultLogFunction);
+#endif
+
+ XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
+ XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
+}
+
+@end
diff --git a/examples/exampletvOS/metro.config.js b/examples/exampletvOS/metro.config.js
new file mode 100644
index 00000000..8ced7ae9
--- /dev/null
+++ b/examples/exampletvOS/metro.config.js
@@ -0,0 +1,39 @@
+const path = require('path');
+const escape = require('escape-string-regexp');
+const exclusionList = require('metro-config/src/defaults/exclusionList');
+const pak = require('../../package.json');
+
+const root = path.resolve(__dirname, '..', '..');
+
+const modules = Object.keys({
+ ...pak.peerDependencies,
+});
+
+module.exports = {
+ projectRoot: __dirname,
+ watchFolders: [root],
+
+ // We need to make sure that only one version is loaded for peerDependencies
+ // So we block them at the root, and alias them to the versions in example's node_modules
+ resolver: {
+ blacklistRE: exclusionList(
+ modules.map(
+ m => new RegExp(`^${escape(path.join(root, 'node_modules', m))}\\/.*$`),
+ ),
+ ),
+
+ extraNodeModules: modules.reduce((acc, name) => {
+ acc[name] = path.join(__dirname, 'node_modules', name);
+ return acc;
+ }, {}),
+ },
+
+ transformer: {
+ getTransformOptions: async () => ({
+ transform: {
+ experimentalImportSupport: false,
+ inlineRequires: true,
+ },
+ }),
+ },
+};
diff --git a/examples/exampletvOS/package.json b/examples/exampletvOS/package.json
new file mode 100644
index 00000000..ba112ab9
--- /dev/null
+++ b/examples/exampletvOS/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "exampletvOS",
+ "version": "0.0.1",
+ "private": true,
+ "scripts": {
+ "android": "react-native run-android",
+ "ios": "react-native run-ios",
+ "iosTV": "yarn ios --simulator=\"Apple TV 4K (3rd generation) (at 1080p)\" --scheme=\"exampletvOS-tvOS\"",
+ "lint": "eslint .",
+ "start": "react-native start",
+ "test": "jest"
+ },
+ "dependencies": {
+ "react": "18.2.0",
+ "react-native": "npm:react-native-tvos@0.71.12-0"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.20.0",
+ "@babel/preset-env": "^7.20.0",
+ "@babel/runtime": "^7.20.0",
+ "@react-native-community/eslint-config": "^3.2.0",
+ "@tsconfig/react-native": "^2.0.2",
+ "@types/jest": "^29.2.1",
+ "@types/react": "^18.0.24",
+ "@types/react-test-renderer": "^18.0.0",
+ "babel-jest": "^29.2.1",
+ "eslint": "^8.19.0",
+ "jest": "^29.2.1",
+ "metro-react-native-babel-preset": "0.73.10",
+ "babel-plugin-module-resolver": "^4.1.0",
+ "prettier": "^2.4.1",
+ "react-test-renderer": "18.2.0",
+ "typescript": "4.8.4"
+ },
+ "jest": {
+ "preset": "react-native"
+ }
+}
diff --git a/examples/exampletvOS/react-native.config.js b/examples/exampletvOS/react-native.config.js
new file mode 100644
index 00000000..fcfacfe0
--- /dev/null
+++ b/examples/exampletvOS/react-native.config.js
@@ -0,0 +1,10 @@
+const path = require('path');
+const pak = require('../../package.json');
+
+module.exports = {
+ dependencies: {
+ [pak.name]: {
+ root: path.join(__dirname, '..', '..'),
+ },
+ },
+};
diff --git a/examples/exampletvOS/tsconfig.json b/examples/exampletvOS/tsconfig.json
new file mode 100644
index 00000000..45a6c707
--- /dev/null
+++ b/examples/exampletvOS/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "@tsconfig/react-native/tsconfig.json"
+}