Repository: tunm1228/react-native-play-video-flatlist Branch: main Commit: 343a7282dc32 Files: 72 Total size: 147.1 KB Directory structure: gitextract_k17ceu36/ ├── .buckconfig ├── .eslintrc.js ├── .flowconfig ├── .gitattributes ├── .gitignore ├── .prettierrc.js ├── .watchmanconfig ├── App.js ├── README.md ├── __tests__/ │ └── App-test.js ├── android/ │ ├── app/ │ │ ├── _BUCK │ │ ├── build.gradle │ │ ├── build_defs.bzl │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ └── src/ │ │ ├── debug/ │ │ │ ├── AndroidManifest.xml │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── autovideo/ │ │ │ └── ReactNativeFlipper.java │ │ └── main/ │ │ ├── AndroidManifest.xml │ │ ├── java/ │ │ │ └── com/ │ │ │ └── autovideo/ │ │ │ ├── MainActivity.java │ │ │ └── MainApplication.java │ │ └── res/ │ │ └── values/ │ │ ├── strings.xml │ │ └── styles.xml │ ├── build.gradle │ ├── gradle/ │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── index.js ├── ios/ │ ├── Podfile │ ├── autovideo/ │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Images.xcassets/ │ │ │ ├── AppIcon.appiconset/ │ │ │ │ └── Contents.json │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── main.m │ ├── autovideo-tvOS/ │ │ └── Info.plist │ ├── autovideo-tvOSTests/ │ │ └── Info.plist │ ├── autovideo.xcodeproj/ │ │ ├── project.pbxproj │ │ └── xcshareddata/ │ │ └── xcschemes/ │ │ ├── autovideo-tvOS.xcscheme │ │ └── autovideo.xcscheme │ ├── autovideo.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── autovideoTests/ │ ├── Info.plist │ └── autovideoTests.m ├── metro.config.js ├── package.json └── src/ ├── components/ │ ├── BottomTabNavigator/ │ │ ├── index.js │ │ └── styles.js │ ├── Likeds/ │ │ ├── index.js │ │ └── styles.js │ ├── Posts/ │ │ └── index.js │ └── Privates/ │ └── index.js ├── routes/ │ ├── index.js │ └── styles.js ├── screens/ │ ├── Discover/ │ │ ├── index.js │ │ └── styles.js │ ├── Home/ │ │ ├── index.js │ │ └── styles.js │ ├── Inbox/ │ │ ├── index.js │ │ └── styles.js │ ├── Photo/ │ │ ├── index.js │ │ └── styles.js │ ├── Profile/ │ │ ├── index.js │ │ └── styles.js │ └── User/ │ ├── index.js │ └── styles.js └── utils/ └── randomize.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .buckconfig ================================================ [android] target = Google Inc.:Google APIs:23 [maven_repositories] central = https://repo1.maven.org/maven2 ================================================ FILE: .eslintrc.js ================================================ module.exports = { root: true, extends: '@react-native-community', }; ================================================ FILE: .flowconfig ================================================ [ignore] ; We fork some components by platform .*/*[.]android.js ; Ignore "BUCK" generated dirs /\.buckd/ ; Ignore polyfills node_modules/react-native/Libraries/polyfills/.* ; These should not be required directly ; require from fbjs/lib instead: require('fbjs/lib/warning') node_modules/warning/.* ; Flow doesn't support platforms .*/Libraries/Utilities/LoadingView.js [untyped] .*/node_modules/@react-native-community/cli/.*/.* [include] [libs] node_modules/react-native/interface.js node_modules/react-native/flow/ [options] emoji=true esproposal.optional_chaining=enable esproposal.nullish_coalescing=enable module.file_ext=.js module.file_ext=.json module.file_ext=.ios.js munge_underscores=true module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' module.name_mapper='^@?[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FlowFixMeProps suppress_type=$FlowFixMeState suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError [lints] sketchy-null-number=warn sketchy-null-mixed=warn sketchy-number=warn untyped-type-import=warn nonstrict-import=warn deprecated-type=warn unsafe-getters-setters=warn unnecessary-invariant=warn signature-verification-failure=warn deprecated-utility=error [strict] deprecated-type nonstrict-import sketchy-null unclear-type unsafe-getters-setters untyped-import untyped-type-import [version] ^0.122.0 ================================================ FILE: .gitattributes ================================================ *.pbxproj -text ================================================ FILE: .gitignore ================================================ # 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 # Android/IntelliJ # build/ .idea .gradle local.properties *.iml # node.js # node_modules/ npm-debug.log yarn-error.log # BUCK buck-out/ \.buckd/ *.keystore !debug.keystore # 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 # Bundle artifact *.jsbundle # CocoaPods /ios/Pods/ ================================================ FILE: .prettierrc.js ================================================ module.exports = { bracketSpacing: false, jsxBracketSameLine: true, singleQuote: true, trailingComma: 'all', }; ================================================ FILE: .watchmanconfig ================================================ {} ================================================ FILE: App.js ================================================ /** * Sample React Native App * https://github.com/facebook/react-native * * @format * @flow strict-local */ import React from 'react'; import { View, } from 'react-native'; import Routes from './src/routes'; const App: () => React$Node = () => { return ( ); }; export default App; ================================================ FILE: README.md ================================================ # react-native-play-video-flatlist TikTok clone made with React Native for iOS and Android ## Demo ![iOS](https://github.com/tunm1228/react-native-play-video-flatlist/blob/main/demo.gif) ## Usage react-native-video ### Support Buy Me A Coffee ================================================ FILE: __tests__/App-test.js ================================================ /** * @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(); }); ================================================ FILE: android/app/_BUCK ================================================ # To learn about Buck see [Docs](https://buckbuild.com/). # To run your application with Buck: # - install Buck # - `npm start` - to start the packager # - `cd android` # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck # - `buck install -r android/app` - compile, install and run application # load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") lib_deps = [] create_aar_targets(glob(["libs/*.aar"])) create_jar_targets(glob(["libs/*.jar"])) android_library( name = "all-libs", exported_deps = lib_deps, ) android_library( name = "app-code", srcs = glob([ "src/main/java/**/*.java", ]), deps = [ ":all-libs", ":build_config", ":res", ], ) android_build_config( name = "build_config", package = "com.autovideo", ) android_resource( name = "res", package = "com.autovideo", res = "src/main/res", ) android_binary( name = "app", keystore = "//android/keystores:debug", manifest = "src/main/AndroidManifest.xml", package_type = "debug", deps = [ ":app-code", ], ) ================================================ FILE: android/app/build.gradle ================================================ apply plugin: "com.android.application" import com.android.build.OutputFile /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets * and bundleReleaseJsAndAssets). * These basically call `react-native bundle` with the correct arguments during the Android build * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the * bundle directly from the development server. Below you can see all the possible configurations * and their defaults. If you decide to add a configuration block, make sure to add it before the * `apply from: "../../node_modules/react-native/react.gradle"` line. * * project.ext.react = [ * // the name of the generated asset file containing your JS bundle * bundleAssetName: "index.android.bundle", * * // the entry file for bundle generation. If none specified and * // "index.android.js" exists, it will be used. Otherwise "index.js" is * // default. Can be overridden with ENTRY_FILE environment variable. * entryFile: "index.android.js", * * // https://reactnative.dev/docs/performance#enable-the-ram-format * bundleCommand: "ram-bundle", * * // whether to bundle JS and assets in debug mode * bundleInDebug: false, * * // whether to bundle JS and assets in release mode * bundleInRelease: true, * * // whether to bundle JS and assets in another build variant (if configured). * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants * // The configuration property can be in the following formats * // 'bundleIn${productFlavor}${buildType}' * // 'bundleIn${buildType}' * // bundleInFreeDebug: true, * // bundleInPaidRelease: true, * // bundleInBeta: true, * * // whether to disable dev mode in custom build variants (by default only disabled in release) * // for example: to disable dev mode in the staging build type (if configured) * devDisabledInStaging: true, * // The configuration property can be in the following formats * // 'devDisabledIn${productFlavor}${buildType}' * // 'devDisabledIn${buildType}' * * // the root of your project, i.e. where "package.json" lives * root: "../../", * * // where to put the JS bundle asset in debug mode * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", * * // where to put the JS bundle asset in release mode * jsBundleDirRelease: "$buildDir/intermediates/assets/release", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in debug mode * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", * * // where to put drawable resources / React Native assets, e.g. the ones you use via * // require('./image.png')), in release mode * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", * * // by default the gradle tasks are skipped if none of the JS files or assets change; this means * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to * // date; if you have any other folders that you want to ignore for performance reasons (gradle * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ * // for example, you might want to remove it from here. * inputExcludes: ["android/**", "ios/**"], * * // override which node gets called and with what additional arguments * nodeExecutableAndArgs: ["node"], * * // supply additional arguments to the packager * extraPackagerArgs: [] * ] */ project.ext.react = [ enableHermes: false, // clean and rebuild if changing ] apply from: "../../node_modules/react-native/react.gradle" /** * Set this to true to create two separate APKs instead of one: * - An APK that only works on ARM devices * - An APK that only works on x86 devices * The advantage is the size of the APK is reduced by about 4MB. * Upload all the APKs to the Play Store and people will download * the correct one based on the CPU architecture of their device. */ def enableSeparateBuildPerCPUArchitecture = false /** * Run Proguard to shrink the Java bytecode in release builds. */ def enableProguardInReleaseBuilds = false /** * The preferred build flavor of JavaScriptCore. * * 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:+' /** * Whether to enable the Hermes VM. * * This should be set on project.ext.react and mirrored here. If it is not set * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode * and the benefits of using Hermes will therefore be sharply reduced. */ def enableHermes = project.ext.react.get("enableHermes", false); android { compileSdkVersion rootProject.ext.compileSdkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } defaultConfig { applicationId "com.autovideo" 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 "armeabi-v7a", "x86", "arm64-v8a", "x86_64" } } 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 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 = versionCodes.get(abi) * 1048576 + defaultConfig.versionCode } } } } dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { exclude group:'com.facebook.fbjni' } debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") { exclude group:'com.facebook.flipper' exclude group:'com.squareup.okhttp3', module:'okhttp' } debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") { exclude group:'com.facebook.flipper' } if (enableHermes) { def hermesPath = "../../node_modules/hermes-engine/android/"; debugImplementation files(hermesPath + "hermes-debug.aar") releaseImplementation files(hermesPath + "hermes-release.aar") } else { implementation jscFlavor } } // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { from configurations.compile into 'libs' } apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) ================================================ FILE: android/app/build_defs.bzl ================================================ """Helper definitions to glob .aar and .jar targets""" def create_aar_targets(aarfiles): for aarfile in aarfiles: name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] lib_deps.append(":" + name) android_prebuilt_aar( name = name, aar = aarfile, ) def create_jar_targets(jarfiles): for jarfile in jarfiles: name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] lib_deps.append(":" + name) prebuilt_jar( name = name, binary_jar = jarfile, ) ================================================ FILE: android/app/proguard-rules.pro ================================================ # 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: ================================================ FILE: android/app/src/debug/AndroidManifest.xml ================================================ ================================================ FILE: android/app/src/debug/java/com/autovideo/ReactNativeFlipper.java ================================================ /** * Copyright (c) Facebook, Inc. and its 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.autovideo; 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.react.ReactFlipperPlugin; import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; import com.facebook.react.ReactInstanceManager; import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.network.NetworkingModule; import okhttp3.OkHttpClient; 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 ReactFlipperPlugin()); 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 ReactInstanceManager.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()); } } } } ================================================ FILE: android/app/src/main/AndroidManifest.xml ================================================ ================================================ FILE: android/app/src/main/java/com/autovideo/MainActivity.java ================================================ package com.autovideo; import com.facebook.react.ReactActivity; 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 "autovideo"; } } ================================================ FILE: android/app/src/main/java/com/autovideo/MainApplication.java ================================================ package com.autovideo; import android.app.Application; import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; import com.facebook.soloader.SoLoader; import java.lang.reflect.InvocationTargetException; import java.util.List; public class MainApplication extends Application implements ReactApplication { private final ReactNativeHost mReactNativeHost = new ReactNativeHost(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 public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } @Override public void onCreate() { super.onCreate(); SoLoader.init(this, /* native exopackage */ false); initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); } /** * Loads Flipper in React Native templates. Call this in the onCreate method with something like * initializeFlipper(this, getReactNativeHost().getReactInstanceManager()); * * @param context * @param reactInstanceManager */ private static void initializeFlipper( Context context, ReactInstanceManager reactInstanceManager) { if (BuildConfig.DEBUG) { try { /* We use reflection here to pick up the class that initializes Flipper, since Flipper library is not available in release mode */ Class aClass = Class.forName("com.autovideo.ReactNativeFlipper"); aClass .getMethod("initializeFlipper", Context.class, ReactInstanceManager.class) .invoke(null, context, reactInstanceManager); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } } ================================================ FILE: android/app/src/main/res/values/strings.xml ================================================ autovideo ================================================ FILE: android/app/src/main/res/values/styles.xml ================================================ ================================================ FILE: android/build.gradle ================================================ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { buildToolsVersion = "29.0.2" minSdkVersion = 16 compileSdkVersion = 29 targetSdkVersion = 29 } repositories { google() jcenter() } dependencies { classpath("com.android.tools.build:gradle:3.5.3") // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm url("$rootDir/../node_modules/react-native/android") } maven { // Android JSC is installed from npm url("$rootDir/../node_modules/jsc-android/dist") } google() jcenter() maven { url 'https://www.jitpack.io' } } } ================================================ FILE: android/gradle/wrapper/gradle-wrapper.properties ================================================ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists ================================================ FILE: android/gradle.properties ================================================ # 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: -Xmx10248m -XX:MaxPermSize=256m # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 # 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.54.0 ================================================ FILE: android/gradlew ================================================ #!/usr/bin/env sh # # Copyright 2015 the original author or 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 UN*X ## ############################################################################## # Attempt to set APP_HOME # Resolve links: $0 may be a link PRG="$0" # Need this for relative symlinks. while [ -h "$PRG" ] ; do ls=`ls -ld "$PRG"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '/.*' > /dev/null; then PRG="$link" else PRG=`dirname "$PRG"`"/$link" fi done SAVED="`pwd`" cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME="`pwd -P`" cd "$SAVED" >/dev/null APP_NAME="Gradle" APP_BASE_NAME=`basename "$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 "$*" } die () { echo echo "$*" echo exit 1 } # 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 ;; 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" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD="$MAX_FD_LIMIT" fi ulimit -n $MAX_FD if [ $? -ne 0 ] ; then warn "Could not set maximum file descriptor limit: $MAX_FD" fi else warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" fi fi # For Darwin, add options to specify how the application appears in the dock if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi # For Cygwin or MSYS, switch paths to Windows format before running java if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` SEP="" for dir in $ROOTDIRSRAW ; do ROOTDIRS="$ROOTDIRS$SEP$dir" SEP="|" done OURCYGPATTERN="(^($ROOTDIRS))" # Add a user-defined pattern to the cygpath arguments if [ "$GRADLE_CYGPATTERN" != "" ] ; then OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" fi # Now convert the arguments - kludge to limit ourselves to /bin/sh i=0 for arg in "$@" ; do CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` else eval `echo args$i`="\"$arg\"" fi i=`expr $i + 1` done case $i in 0) set -- ;; 1) set -- "$args0" ;; 2) set -- "$args0" "$args1" ;; 3) set -- "$args0" "$args1" "$args2" ;; 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi # Escape application args save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" ================================================ FILE: android/gradlew.bat ================================================ @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 init 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 init 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 :init @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args :win9xME_args @rem Slurp the command line arguments. set CMD_LINE_ARGS= set _SKIP=2 :win9xME_args_slurp if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* :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 %CMD_LINE_ARGS% :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 ================================================ FILE: android/settings.gradle ================================================ rootProject.name = 'autovideo' apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) include ':app' ================================================ FILE: app.json ================================================ { "name": "autovideo", "displayName": "autovideo" } ================================================ FILE: babel.config.js ================================================ module.exports = { presets: ['module:metro-react-native-babel-preset'], }; ================================================ FILE: index.js ================================================ /** * @format */ import {AppRegistry} from 'react-native'; import App from './App'; import {name as appName} from './app.json'; AppRegistry.registerComponent(appName, () => App); ================================================ FILE: ios/Podfile ================================================ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' platform :ios, '10.0' target 'autovideo' do config = use_native_modules! use_react_native!(:path => config["reactNativePath"]) target 'autovideoTests' do inherit! :complete # Pods for testing end # Enables Flipper. # # Note that if you have use_frameworks! enabled, Flipper will not work and # you should disable these next few lines. use_flipper! post_install do |installer| flipper_post_install(installer) end end target 'autovideo-tvOS' do # Pods for autovideo-tvOS target 'autovideo-tvOSTests' do inherit! :search_paths # Pods for testing end end ================================================ FILE: ios/autovideo/AppDelegate.h ================================================ #import #import @interface AppDelegate : UIResponder @property (nonatomic, strong) UIWindow *window; @end ================================================ FILE: ios/autovideo/AppDelegate.m ================================================ #import "AppDelegate.h" #import #import #import #ifdef FB_SONARKIT_ENABLED #import #import #import #import #import #import static void InitializeFlipper(UIApplication *application) { FlipperClient *client = [FlipperClient sharedClient]; SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults]; [client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]]; [client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]]; [client addPlugin:[FlipperKitReactPlugin new]]; [client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]]; [client start]; } #endif @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef FB_SONARKIT_ENABLED InitializeFlipper(application); #endif RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge moduleName:@"autovideo" initialProperties:nil]; rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; UIViewController *rootViewController = [UIViewController new]; rootViewController.view = rootView; self.window.rootViewController = rootViewController; [self.window makeKeyAndVisible]; return YES; } - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge { #if DEBUG return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; #else return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; #endif } @end ================================================ FILE: ios/autovideo/Images.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: ios/autovideo/Images.xcassets/Contents.json ================================================ { "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: ios/autovideo/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleDisplayName autovideo CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS NSAppTransportSecurity NSAllowsArbitraryLoads NSExceptionDomains localhost NSExceptionAllowsInsecureHTTPLoads NSLocationWhenInUseUsageDescription UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: ios/autovideo/LaunchScreen.storyboard ================================================ ================================================ FILE: ios/autovideo/main.m ================================================ #import #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: ios/autovideo-tvOS/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 LSRequiresIPhoneOS NSAppTransportSecurity NSExceptionDomains localhost NSExceptionAllowsInsecureHTTPLoads NSLocationWhenInUseUsageDescription UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance ================================================ FILE: ios/autovideo-tvOSTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: ios/autovideo.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 00E356F31AD99517003FC87E /* autovideoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* autovideoTests.m */; }; 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2CD18A0D3719AA357DDD3063 /* libPods-autovideo-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CE674023E2D65E04A7DCAE5 /* libPods-autovideo-tvOSTests.a */; }; 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* autovideoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* autovideoTests.m */; }; 660F49EF125F3846BE4B693A /* libPods-autovideo-autovideoTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FE36A9C1BB0DE9491B740A2 /* libPods-autovideo-autovideoTests.a */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; 82556DC19DE6288D9066A3A9 /* libPods-autovideo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC1FDF048141BB4F611F061C /* libPods-autovideo.a */; }; CC00507A768C4228C7E368A0 /* libPods-autovideo-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D34C9B3243C965DCC28CDF21 /* libPods-autovideo-tvOS.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 13B07F861A680F5B00A75B9A; remoteInfo = autovideo; }; 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; proxyType = 1; remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7; remoteInfo = "autovideo-tvOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 00E356EE1AD99517003FC87E /* autovideoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = autovideoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 00E356F21AD99517003FC87E /* autovideoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = autovideoTests.m; sourceTree = ""; }; 01F3AE88CA17CACF3ED6EE24 /* Pods-autovideo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo.release.xcconfig"; path = "Target Support Files/Pods-autovideo/Pods-autovideo.release.xcconfig"; sourceTree = ""; }; 03BBEACDC6A20027EE8C5EF1 /* Pods-autovideo-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-autovideo-tvOSTests/Pods-autovideo-tvOSTests.debug.xcconfig"; sourceTree = ""; }; 13B07F961A680F5B00A75B9A /* autovideo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = autovideo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = autovideo/AppDelegate.h; sourceTree = ""; }; 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = autovideo/AppDelegate.m; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = autovideo/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = autovideo/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = autovideo/main.m; sourceTree = ""; }; 2D02E47B1E0B4A5D006451C7 /* autovideo-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "autovideo-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* autovideo-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "autovideo-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 31EDBFE43C335C37657ADA92 /* Pods-autovideo-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-tvOS.release.xcconfig"; path = "Target Support Files/Pods-autovideo-tvOS/Pods-autovideo-tvOS.release.xcconfig"; sourceTree = ""; }; 47E1B8F6477B97804AA3797A /* Pods-autovideo-autovideoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-autovideoTests.release.xcconfig"; path = "Target Support Files/Pods-autovideo-autovideoTests/Pods-autovideo-autovideoTests.release.xcconfig"; sourceTree = ""; }; 4C6A0E7AC6B0393D622D0DDB /* Pods-autovideo-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-autovideo-tvOS/Pods-autovideo-tvOS.debug.xcconfig"; sourceTree = ""; }; 6FE36A9C1BB0DE9491B740A2 /* libPods-autovideo-autovideoTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-autovideo-autovideoTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 7CE674023E2D65E04A7DCAE5 /* libPods-autovideo-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-autovideo-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = autovideo/LaunchScreen.storyboard; sourceTree = ""; }; 8C1176970509EA77C64F1288 /* Pods-autovideo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo.debug.xcconfig"; path = "Target Support Files/Pods-autovideo/Pods-autovideo.debug.xcconfig"; sourceTree = ""; }; BD69013915456BF126F18680 /* Pods-autovideo-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-autovideo-tvOSTests/Pods-autovideo-tvOSTests.release.xcconfig"; sourceTree = ""; }; D34C9B3243C965DCC28CDF21 /* libPods-autovideo-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-autovideo-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DC1FDF048141BB4F611F061C /* libPods-autovideo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-autovideo.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; }; F905C873FCB0CC92FD37F1EA /* Pods-autovideo-autovideoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-autovideo-autovideoTests.debug.xcconfig"; path = "Target Support Files/Pods-autovideo-autovideoTests/Pods-autovideo-autovideoTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 00E356EB1AD99517003FC87E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 660F49EF125F3846BE4B693A /* libPods-autovideo-autovideoTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 82556DC19DE6288D9066A3A9 /* libPods-autovideo.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D02E4781E0B4A5D006451C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( CC00507A768C4228C7E368A0 /* libPods-autovideo-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D02E48D1E0B4A5D006451C7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 2CD18A0D3719AA357DDD3063 /* libPods-autovideo-tvOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 00E356EF1AD99517003FC87E /* autovideoTests */ = { isa = PBXGroup; children = ( 00E356F21AD99517003FC87E /* autovideoTests.m */, 00E356F01AD99517003FC87E /* Supporting Files */, ); path = autovideoTests; sourceTree = ""; }; 00E356F01AD99517003FC87E /* Supporting Files */ = { isa = PBXGroup; children = ( 00E356F11AD99517003FC87E /* Info.plist */, ); name = "Supporting Files"; sourceTree = ""; }; 13B07FAE1A68108700A75B9A /* autovideo */ = { isa = PBXGroup; children = ( 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 13B07FB01A68108700A75B9A /* AppDelegate.m */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, 13B07FB71A68108700A75B9A /* main.m */, ); name = autovideo; sourceTree = ""; }; 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, DC1FDF048141BB4F611F061C /* libPods-autovideo.a */, 6FE36A9C1BB0DE9491B740A2 /* libPods-autovideo-autovideoTests.a */, D34C9B3243C965DCC28CDF21 /* libPods-autovideo-tvOS.a */, 7CE674023E2D65E04A7DCAE5 /* libPods-autovideo-tvOSTests.a */, ); name = Frameworks; sourceTree = ""; }; 46556C8D061747DC45F09F32 /* Pods */ = { isa = PBXGroup; children = ( 8C1176970509EA77C64F1288 /* Pods-autovideo.debug.xcconfig */, 01F3AE88CA17CACF3ED6EE24 /* Pods-autovideo.release.xcconfig */, F905C873FCB0CC92FD37F1EA /* Pods-autovideo-autovideoTests.debug.xcconfig */, 47E1B8F6477B97804AA3797A /* Pods-autovideo-autovideoTests.release.xcconfig */, 4C6A0E7AC6B0393D622D0DDB /* Pods-autovideo-tvOS.debug.xcconfig */, 31EDBFE43C335C37657ADA92 /* Pods-autovideo-tvOS.release.xcconfig */, 03BBEACDC6A20027EE8C5EF1 /* Pods-autovideo-tvOSTests.debug.xcconfig */, BD69013915456BF126F18680 /* Pods-autovideo-tvOSTests.release.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; 832341AE1AAA6A7D00B99B32 /* Libraries */ = { isa = PBXGroup; children = ( ); name = Libraries; sourceTree = ""; }; 83CBB9F61A601CBA00E9B192 = { isa = PBXGroup; children = ( 13B07FAE1A68108700A75B9A /* autovideo */, 832341AE1AAA6A7D00B99B32 /* Libraries */, 00E356EF1AD99517003FC87E /* autovideoTests */, 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, 46556C8D061747DC45F09F32 /* Pods */, ); indentWidth = 2; sourceTree = ""; tabWidth = 2; usesTabs = 0; }; 83CBBA001A601CBA00E9B192 /* Products */ = { isa = PBXGroup; children = ( 13B07F961A680F5B00A75B9A /* autovideo.app */, 00E356EE1AD99517003FC87E /* autovideoTests.xctest */, 2D02E47B1E0B4A5D006451C7 /* autovideo-tvOS.app */, 2D02E4901E0B4A5D006451C7 /* autovideo-tvOSTests.xctest */, ); name = Products; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ 00E356ED1AD99517003FC87E /* autovideoTests */ = { isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "autovideoTests" */; buildPhases = ( 8DF72D793BDC5146FF5D8872 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, 588C7CC9D835BE983E950F40 /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( 00E356F51AD99517003FC87E /* PBXTargetDependency */, ); name = autovideoTests; productName = autovideoTests; productReference = 00E356EE1AD99517003FC87E /* autovideoTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; 13B07F861A680F5B00A75B9A /* autovideo */ = { isa = PBXNativeTarget; buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "autovideo" */; buildPhases = ( 19EC08B149D3C10E303A90EA /* [CP] Check Pods Manifest.lock */, FD10A7F022414F080027D42C /* Start Packager */, 13B07F871A680F5B00A75B9A /* Sources */, 13B07F8C1A680F5B00A75B9A /* Frameworks */, 13B07F8E1A680F5B00A75B9A /* Resources */, 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, F61394F5FBDA074E3B571D4E /* [CP] Copy Pods Resources */, ); buildRules = ( ); dependencies = ( ); name = autovideo; productName = autovideo; productReference = 13B07F961A680F5B00A75B9A /* autovideo.app */; productType = "com.apple.product-type.application"; }; 2D02E47A1E0B4A5D006451C7 /* autovideo-tvOS */ = { isa = PBXNativeTarget; buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "autovideo-tvOS" */; buildPhases = ( A745E466DB75A6EFD5FEF12B /* [CP] Check Pods Manifest.lock */, FD10A7F122414F3F0027D42C /* Start Packager */, 2D02E4771E0B4A5D006451C7 /* Sources */, 2D02E4781E0B4A5D006451C7 /* Frameworks */, 2D02E4791E0B4A5D006451C7 /* Resources */, 2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */, ); buildRules = ( ); dependencies = ( ); name = "autovideo-tvOS"; productName = "autovideo-tvOS"; productReference = 2D02E47B1E0B4A5D006451C7 /* autovideo-tvOS.app */; productType = "com.apple.product-type.application"; }; 2D02E48F1E0B4A5D006451C7 /* autovideo-tvOSTests */ = { isa = PBXNativeTarget; buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "autovideo-tvOSTests" */; buildPhases = ( C08992171FBAAE8273C4B2CE /* [CP] Check Pods Manifest.lock */, 2D02E48C1E0B4A5D006451C7 /* Sources */, 2D02E48D1E0B4A5D006451C7 /* Frameworks */, 2D02E48E1E0B4A5D006451C7 /* Resources */, ); buildRules = ( ); dependencies = ( 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */, ); name = "autovideo-tvOSTests"; productName = "autovideo-tvOSTests"; productReference = 2D02E4901E0B4A5D006451C7 /* autovideo-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 "autovideo" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 83CBB9F61A601CBA00E9B192; productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 13B07F861A680F5B00A75B9A /* autovideo */, 00E356ED1AD99517003FC87E /* autovideoTests */, 2D02E47A1E0B4A5D006451C7 /* autovideo-tvOS */, 2D02E48F1E0B4A5D006451C7 /* autovideo-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 = ( ); 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"; }; 19EC08B149D3C10E303A90EA /* [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-autovideo-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; }; 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"; }; 588C7CC9D835BE983E950F40 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-autovideo-autovideoTests/Pods-autovideo-autovideoTests-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-autovideo-autovideoTests/Pods-autovideo-autovideoTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; 8DF72D793BDC5146FF5D8872 /* [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-autovideo-autovideoTests-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; }; A745E466DB75A6EFD5FEF12B /* [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-autovideo-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; }; C08992171FBAAE8273C4B2CE /* [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-autovideo-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; }; F61394F5FBDA074E3B571D4E /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-autovideo/Pods-autovideo-resources.sh", "${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle", ); name = "[CP] Copy Pods Resources"; outputPaths = ( "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-autovideo/Pods-autovideo-resources.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 /* autovideoTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 13B07F871A680F5B00A75B9A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 13B07FC11A68108700A75B9A /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D02E4771E0B4A5D006451C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2D02E48C1E0B4A5D006451C7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2DCD954D1E0B4F2C00145EB5 /* autovideoTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 13B07F861A680F5B00A75B9A /* autovideo */; targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; }; 2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 2D02E47A1E0B4A5D006451C7 /* autovideo-tvOS */; targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = F905C873FCB0CC92FD37F1EA /* Pods-autovideo-autovideoTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = autovideoTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; 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)/autovideo.app/autovideo"; }; name = Debug; }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 47E1B8F6477B97804AA3797A /* Pods-autovideo-autovideoTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; COPY_PHASE_STRIP = NO; INFOPLIST_FILE = autovideoTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 10.0; 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)/autovideo.app/autovideo"; }; name = Release; }; 13B07F941A680F5B00A75B9A /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 8C1176970509EA77C64F1288 /* Pods-autovideo.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; ENABLE_BITCODE = NO; INFOPLIST_FILE = autovideo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = autovideo; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Debug; }; 13B07F951A680F5B00A75B9A /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 01F3AE88CA17CACF3ED6EE24 /* Pods-autovideo.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; INFOPLIST_FILE = autovideo/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = autovideo; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; }; name = Release; }; 2D02E4971E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4C6A0E7AC6B0393D622D0DDB /* Pods-autovideo-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_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "autovideo-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.autovideo-tvOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; 2D02E4981E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 31EDBFE43C335C37657ADA92 /* Pods-autovideo-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"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "autovideo-tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-lc++", ); PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.autovideo-tvOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; 2D02E4991E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 03BBEACDC6A20027EE8C5EF1 /* Pods-autovideo-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 = "autovideo-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.autovideo-tvOSTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/autovideo-tvOS.app/autovideo-tvOS"; TVOS_DEPLOYMENT_TARGET = 10.1; }; name = Debug; }; 2D02E49A1E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = BD69013915456BF126F18680 /* Pods-autovideo-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 = "autovideo-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.autovideo-tvOSTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/autovideo-tvOS.app/autovideo-tvOS"; TVOS_DEPLOYMENT_TARGET = 10.1; }; name = Release; }; 83CBBA201A601CBA00E9B192 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 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; 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 = 10.0; LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = ( "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; 83CBBA211A601CBA00E9B192 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 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; 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 = 10.0; LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)"; LIBRARY_SEARCH_PATHS = ( "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", "\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"", "\"$(inherited)\"", ); MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "autovideoTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 00E356F61AD99517003FC87E /* Debug */, 00E356F71AD99517003FC87E /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "autovideo" */ = { isa = XCConfigurationList; buildConfigurations = ( 13B07F941A680F5B00A75B9A /* Debug */, 13B07F951A680F5B00A75B9A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "autovideo-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D02E4971E0B4A5E006451C7 /* Debug */, 2D02E4981E0B4A5E006451C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "autovideo-tvOSTests" */ = { isa = XCConfigurationList; buildConfigurations = ( 2D02E4991E0B4A5E006451C7 /* Debug */, 2D02E49A1E0B4A5E006451C7 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "autovideo" */ = { isa = XCConfigurationList; buildConfigurations = ( 83CBBA201A601CBA00E9B192 /* Debug */, 83CBBA211A601CBA00E9B192 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; } ================================================ FILE: ios/autovideo.xcodeproj/xcshareddata/xcschemes/autovideo-tvOS.xcscheme ================================================ ================================================ FILE: ios/autovideo.xcodeproj/xcshareddata/xcschemes/autovideo.xcscheme ================================================ ================================================ FILE: ios/autovideo.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: ios/autovideo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: ios/autovideoTests/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1 ================================================ FILE: ios/autovideoTests/autovideoTests.m ================================================ #import #import #import #import #define TIMEOUT_SECONDS 600 #define TEXT_TO_LOOK_FOR @"Welcome to React" @interface autovideoTests : XCTestCase @end @implementation autovideoTests - (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 ================================================ FILE: metro.config.js ================================================ /** * Metro configuration for React Native * https://github.com/facebook/react-native * * @format */ module.exports = { transformer: { getTransformOptions: async () => ({ transform: { experimentalImportSupport: false, inlineRequires: false, }, }), }, }; ================================================ FILE: package.json ================================================ { "name": "autovideo", "version": "0.0.1", "private": true, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", "test": "jest", "lint": "eslint ." }, "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.32", "@fortawesome/free-solid-svg-icons": "^5.15.1", "@fortawesome/react-native-fontawesome": "^0.2.6", "@react-native-community/masked-view": "^0.1.10", "@react-navigation/bottom-tabs": "^5.11.2", "@react-navigation/native": "^5.8.10", "@react-navigation/stack": "^5.12.8", "react": "16.13.1", "react-native": "0.63.3", "react-native-gesture-handler": "^1.9.0", "react-native-reanimated": "^1.13.2", "react-native-safe-area-context": "^3.1.9", "react-native-screens": "^2.15.0", "react-native-svg": "^12.1.0", "react-native-tab-view": "^2.15.2", "react-native-video": "^5.1.0-alpha8", "styled-components": "^5.2.1" }, "devDependencies": { "@babel/core": "^7.8.4", "@babel/runtime": "^7.8.4", "@react-native-community/eslint-config": "^1.1.0", "babel-jest": "^25.1.0", "eslint": "^6.5.1", "jest": "^25.1.0", "metro-react-native-babel-preset": "^0.59.0", "react-test-renderer": "16.13.1" }, "jest": { "preset": "react-native" } } ================================================ FILE: src/components/BottomTabNavigator/index.js ================================================ import React from 'react'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faHome, faSearch, faInbox, faUser, faPlus } from '@fortawesome/free-solid-svg-icons'; import { Tab, Button, Title, Add } from './styles'; export default function BottomTabNavigator({ navigation, background, colorTitle, colorIcon }) { return ( ) } ================================================ FILE: src/components/BottomTabNavigator/styles.js ================================================ import styled from 'styled-components/native'; export const Tab = styled.View` position: absolute; bottom: 0; height: 60px; display: flex; flex-direction: row; align-items: center; justify-content: space-between; border-top-width: 1px; border-top-color: #CCC; background: ${props => props.background} `; export const Button = styled.TouchableOpacity` width: 20%; height: 100px; display: flex; flex-direction: column; align-items: center; justify-content: center; `; export const Title = styled.Text` font-size: 10px; `; export const Add = styled.View` width: 70%; padding: 5px; display: flex; flex-direction: row; align-items: center; justify-content: center; border-left-width: 4px; border-right-width: 4px; border-radius: 10px; border-left-color: #69C9D0; border-right-color: #EE1D52; background: #FFF; `; ================================================ FILE: src/components/Likeds/index.js ================================================ import React from 'react'; import { View, TouchableWithoutFeedback, Text } from 'react-native'; import styles from './styles'; export default likeds = () => ( Only you can see which videos you liked You can change this in Privacy settings ); ================================================ FILE: src/components/Likeds/styles.js ================================================ import { StyleSheet, Dimensions } from "react-native"; const styles = StyleSheet.create({ content: { width: Dimensions.get("window").width, backgroundColor: '#FFF', height: '100%', alignItems: 'center', paddingTop: 25, paddingHorizontal: 10 }, textBold: { color: '#010101', fontWeight: 'bold', fontSize: 18 }, text: { color: '#444' }, textPrivacySettings: { color: '#EE1D52' }, }); ================================================ FILE: src/components/Posts/index.js ================================================ import React from 'react'; import { View } from 'react-native'; import styles from '../Likeds/styles'; export default posts = () => ================================================ FILE: src/components/Privates/index.js ================================================ import React from 'react'; import { View, Text } from 'react-native'; import styles from '../Likeds/styles'; export default privates = () => ( Your private videos To make your video visible only to yourself, self it do "Private" in the video's privacy settings ); ================================================ FILE: src/routes/index.js ================================================ import React from 'react'; import { Dimensions, StatusBar, TouchableOpacity, TextInput, Text } from 'react-native'; import { NavigationContainer } from '@react-navigation/native'; import { createStackNavigator } from '@react-navigation/stack'; import { createBottomTabNavigator } from '@react-navigation/bottom-tabs'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faUserPlus, faEllipsisH, faChevronLeft, faPaperPlane } from '@fortawesome/free-solid-svg-icons'; import Home from '../screens/Home'; import Discover from '../screens/Discover'; import Photo from '../screens/Photo'; import Inbox from '../screens/Inbox'; import Profile from '../screens/Profile'; import User from '../screens/User'; const Stack = createStackNavigator(); const Tab = createBottomTabNavigator(); StatusBar.setHidden(true); const Routes = () => ( state.index == 0 ? StatusBar.setHidden(true) : StatusBar.setHidden(false)}> null, }} /> , headerLeft: () => null, headerRight: () => null, }} /> null, }} /> All activity, headerLeft: () => null, headerRight: () => , }} /> user3782787686134324234324, headerLeft: () => , headerRight: () => , }} /> ({ headerTitle: () => {route.params.user.name.replace("@", "")}, headerLeft: () => navigation.goBack()} style={{ marginLeft: 10 }}>, headerRight: () => , })} /> ) export default Routes; ================================================ FILE: src/routes/styles.js ================================================ import styled from 'styled-components/native'; export const TabStyle = styled.View` position: absolute; bottom: 0; height: 60px; display: flex; flex-direction: row; align-items: center; justify-content: space-between; border-top-width: 1px; border-top-color: #CCC; background: ${props => props.background} `; export const Button = styled.TouchableOpacity` width: 20%; height: 100px; display: flex; flex-direction: column; align-items: center; justify-content: center; `; export const Title = styled.Text` font-size: 10px; `; export const Add = styled.View` width: 70%; padding: 5px; display: flex; flex-direction: row; align-items: center; justify-content: center; border-left-width: 4px; border-right-width: 4px; border-radius: 10px; border-left-color: #69C9D0; border-right-color: #EE1D52; background: #FFF; `; ================================================ FILE: src/screens/Discover/index.js ================================================ import React from 'react'; import { ScrollView, Image, View, Text, StyleSheet } from 'react-native'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faHashtag, faChevronRight } from '@fortawesome/free-solid-svg-icons'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { Container } from './styles'; import randomize from '../../utils/randomize'; export default function Discover({ navigation }) { const videos = [ { url: "https://i.pinimg.com/564x/27/b4/5c/27b45cfadb28dbd857ebd662fe3cc1fe.jpg" }, { url: "https://i.pinimg.com/236x/61/69/67/61696742e1b2d8b0d3ed70efaa1b0f89.jpg" }, { url: "https://cdn.mensagenscomamor.com/content/images/m000518052.jpg?v=1&w=600&h=941" }, { url: "https://66.media.tumblr.com/2170b24c045a368996ed3d0b84e74c4e/tumblr_pjn69mp52s1tbym8o_1280.jpg" }, { url: "https://i.pinimg.com/564x/27/b4/5c/27b45cfadb28dbd857ebd662fe3cc1fe.jpg" }, ] const categories = [ { name: "selfcomemoji", description: "Trending" }, { name: "amoréamor", description: "Trending" }, { name: "athomewith", description: "Trending" }, { name: "errodeportugues", description: "Trending" }, { name: "horadopenalti", description: "Trending" }, ] return ( {categories.map((categorie, k) => ( {categorie.name} {categorie.description} {randomize(videos).map((video, key) => ( ))} ))} ) } ================================================ FILE: src/screens/Discover/styles.js ================================================ import styled from 'styled-components/native'; export const Container = styled.SafeAreaView` flex: 1; align-items: center; background: #FFF; `; ================================================ FILE: src/screens/Home/index.js ================================================ import React, { Component } from 'react'; import { View, Text, FlatList, StyleSheet, Dimensions, Platform, TouchableOpacity, Image } from 'react-native'; import Video from 'react-native-video'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { styles, NewsByFollowing, NewsByFollowingText, NewsByFollowingTextBold, ContentRight, ContentRightUser, ContentRightUserImage, ContentRightUserPlus, ContentRightHeart, ContentRightComment, ContentRightWhatsApp, ContentRightWhatsAppImage, ContentRightText, ContentLeftBottom, ContentLeftBottomNameUser, ContentLeftBottomNameUserText, ContentLeftBottomDescription, ContentLeftBottomMusic } from './styles'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faPlus, faHeart, faCommentDots, faPlay } from '@fortawesome/free-solid-svg-icons'; const videos = [ { id: 1, url: require('../../assets/mother.mp4'), // url: "https://v19.tiktokcdn.com/ec97a92e6ba0f9fd7bc6b8b38b102973/5ec4acfd/video/tos/useast2a/tos-useast2a-pve-0068/35f8c0a1d6294d5cb914a69f103689e1/?a=1233&br=1798&bt=899&cr=0&cs=0&dr=0&ds=3&er=&l=2020051922065501018907221607A9BE96&lr=tiktok_m&qs=0&rc=M3dtZDc0a2RmdDMzNjczM0ApOzZnNzxnZGUzNzM1PGRkNmdtamwtLW5ebXNfLS1eMTZzc18zNDMyNS0xLmExNDNjMzY6Yw%3D%3D&vl=&vr=", user: { name: "Vídeo", following: 12121, followers: 4564, likes: 3243, image: "https://i.pinimg.com/originals/7b/8f/49/7b8f492529fd236dc59baf184faf8488.jpg" // image: "https://p16-va-default.akamaized.net/img/musically-maliva-obj/1606484041765893~c5_720x720.jpeg" }, countLikes: 172, countComments: 111, countWhatsApp: 112, description: "No litoral da região de Marlborough, diversos fiordes, ou “sounds” como definidos na Nova Zelândia.", music: "Relaxante & Musica Ambiental Clube" }, { id: 2, url: require('../../assets/lindo.mp4'), // url: "https://v19.tiktokcdn.com/ec97a92e6ba0f9fd7bc6b8b38b102973/5ec4acfd/video/tos/useast2a/tos-useast2a-pve-0068/35f8c0a1d6294d5cb914a69f103689e1/?a=1233&br=1798&bt=899&cr=0&cs=0&dr=0&ds=3&er=&l=2020051922065501018907221607A9BE96&lr=tiktok_m&qs=0&rc=M3dtZDc0a2RmdDMzNjczM0ApOzZnNzxnZGUzNzM1PGRkNmdtamwtLW5ebXNfLS1eMTZzc18zNDMyNS0xLmExNDNjMzY6Yw%3D%3D&vl=&vr=", user: { name: "Vídeo", following: 12121, followers: 4564, likes: 3243, image: "https://i.pinimg.com/originals/7b/8f/49/7b8f492529fd236dc59baf184faf8488.jpg" // image: "https://p16-va-default.akamaized.net/img/musically-maliva-obj/1606484041765893~c5_720x720.jpeg" }, countLikes: 172, countComments: 111, countWhatsApp: 112, description: "No litoral da região de Marlborough, diversos fiordes, ou “sounds” como definidos na Nova Zelândia.", music: "Relaxante & Musica Ambiental Clube" }, { id: 3, url: require('../../assets/lights.mp4'), // url: "https://v19.tiktokcdn.com/ec97a92e6ba0f9fd7bc6b8b38b102973/5ec4acfd/video/tos/useast2a/tos-useast2a-pve-0068/35f8c0a1d6294d5cb914a69f103689e1/?a=1233&br=1798&bt=899&cr=0&cs=0&dr=0&ds=3&er=&l=2020051922065501018907221607A9BE96&lr=tiktok_m&qs=0&rc=M3dtZDc0a2RmdDMzNjczM0ApOzZnNzxnZGUzNzM1PGRkNmdtamwtLW5ebXNfLS1eMTZzc18zNDMyNS0xLmExNDNjMzY6Yw%3D%3D&vl=&vr=", user: { name: "Vídeo", following: 12121, followers: 4564, likes: 3243, image: "https://i.pinimg.com/originals/7b/8f/49/7b8f492529fd236dc59baf184faf8488.jpg" // image: "https://p16-va-default.akamaized.net/img/musically-maliva-obj/1606484041765893~c5_720x720.jpeg" }, countLikes: 172, countComments: 111, countWhatsApp: 112, description: "No litoral da região de Marlborough, diversos fiordes, ou “sounds” como definidos na Nova Zelândia.", music: "Relaxante & Musica Ambiental Clube" }, { id: 4, url: require('../../assets/mother.mp4'), // url: "https://v19.tiktokcdn.com/ec97a92e6ba0f9fd7bc6b8b38b102973/5ec4acfd/video/tos/useast2a/tos-useast2a-pve-0068/35f8c0a1d6294d5cb914a69f103689e1/?a=1233&br=1798&bt=899&cr=0&cs=0&dr=0&ds=3&er=&l=2020051922065501018907221607A9BE96&lr=tiktok_m&qs=0&rc=M3dtZDc0a2RmdDMzNjczM0ApOzZnNzxnZGUzNzM1PGRkNmdtamwtLW5ebXNfLS1eMTZzc18zNDMyNS0xLmExNDNjMzY6Yw%3D%3D&vl=&vr=", user: { name: "Vídeo", following: 12121, followers: 4564, likes: 3243, image: "https://i.pinimg.com/originals/7b/8f/49/7b8f492529fd236dc59baf184faf8488.jpg" // image: "https://p16-va-default.akamaized.net/img/musically-maliva-obj/1606484041765893~c5_720x720.jpeg" }, countLikes: 172, countComments: 111, countWhatsApp: 112, description: "No litoral da região de Marlborough, diversos fiordes, ou “sounds” como definidos na Nova Zelândia.", music: "Relaxante & Musica Ambiental Clube" }, ] const { height, width } = Dimensions.get('window'); class Home extends Component { constructor(props) { super(props); this.state = { currentVisibleIndex: null, isPause: true }; this.viewabilityConfig = { viewAreaCoveragePercentThreshold: 70 }; this.index = 0; } _onViewableItemsChanged = (props) => { const changed = props.changed; const viewableItems = props.viewableItems; if (viewableItems && viewableItems.length > 0) { this.setState({ currentVisibleIndex: viewableItems[0].index }); } }; isLegitIndex(index, length) { if (index < 0 || index >= length) return false; return true; } pagination = (velocity) => { let nextIndex; if (Platform.OS == "ios") nextIndex = velocity >= 0 ? this.index + 1 : (this.index > 1 ? this.index - 1 : 0); else nextIndex = velocity < 0 ? this.index : this.index + 1; if (this.isLegitIndex(nextIndex, videos.length)) { this.index = nextIndex; } this.setState({ isPause: true }) this.flatListRef.scrollToIndex({ index: this.index, animated: true }); } render() { let { navigation } = this.props; let { currentVisibleIndex, isPause } = this.state; return ( `${index}`} renderItem={({ item, index }) => { return ( this.setState({ isPause: !isPause })} activeOpacity={0.9} style={{ height: height, backgroundColor: '#cacaca', justifyContent: 'center', alignItems: 'center' }}> ) }} ref={(ref) => { this.flatListRef = ref }} onScrollEndDrag={(e) => { this.pagination( e.nativeEvent.velocity.y, ); }} viewabilityConfig={this.viewabilityConfig} onViewableItemsChanged={this._onViewableItemsChanged} /> ); } } export default Home; ================================================ FILE: src/screens/Home/styles.js ================================================ import styled from 'styled-components/native'; import { StyleSheet, Dimensions } from "react-native"; export const styles = StyleSheet.create({ backgroundVideo: { alignItems: "stretch", position: "absolute", height: Dimensions.get("window").height, left: 0, top: 0, right: 0, bottom: 0, } }); export const Container = styled.SafeAreaView` flex: 1; align-items: center; justify-content: center; background: red; `; export const NewsByFollowing = styled.View` position: absolute; left: 10%; right: 10%; top: 5%; z-index: 99; flex: 1; display: flex; align-items: center; justify-content: center; `; export const NewsByFollowingText = styled.Text` color: #FFF; `; export const NewsByFollowingTextBold = styled.Text` font-weight: bold; font-size: 15px; color: #FFF; `; export const ContentRight = styled.View` position: absolute; padding: 10px; right: 5px; top: 30%; bottom: 30%; z-index: 99; flex: 1; display: flex; align-items: center; justify-content: center; `; export const ContentRightUser = styled.TouchableOpacity` width: 40px; height: 40px; border-radius: 25px; background: red; margin-top: 10px; display: flex; align-items: center; justify-content: center; background: #555; `; export const ContentRightUserImage = styled.Image` width: 40px; height: 40px; border-radius: 25px; `; export const ContentRightUserPlus = styled.View` top: -10px; width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; border-radius: 25px; background: #F00; `; export const ContentRightHeart = styled.TouchableOpacity` margin-top: 10px; margin-bottom: 10px; flex: 1; display: flex; align-items: center; justify-content: center; `; export const ContentRightComment = styled.TouchableOpacity` margin-top: 10px; margin-bottom: 10px; flex: 1; display: flex; align-items: center; justify-content: center; `; export const ContentRightWhatsApp = styled.TouchableOpacity` margin-top: 10px; margin-bottom: 10px; flex: 1; display: flex; align-items: center; justify-content: center; `; export const ContentRightWhatsAppImage = styled.Image` width: 30px; height: 30px; `; export const ContentRightText = styled.Text` margin-top: 10px; font-weight: bold; color: #FFF; `; export const ContentLeftBottom = styled.View` position: absolute; padding: 10px; left: 5px; bottom: 10%; z-index: 99; width: 75%; display: flex; align-items: flex-start; justify-content: center; `; export const ContentLeftBottomNameUser = styled.TouchableOpacity` `; export const ContentLeftBottomNameUserText = styled.Text` color: #FFF; font-weight: bold; `; export const ContentLeftBottomDescription = styled.Text` margin-top: 10px; color: #FFF; `; export const ContentLeftBottomMusic = styled.Text` margin-top: 10px; color: #FFF; overflow: scroll; `; ================================================ FILE: src/screens/Inbox/index.js ================================================ import React from 'react'; import { ScrollView, View, Image, Text, TouchableOpacity, StyleSheet } from 'react-native'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faChevronRight } from '@fortawesome/free-solid-svg-icons'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { Container } from './styles'; export default function Inbox({ navigation }) { const activitys = [ { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "A @user17387827981 está em live agora!", live: true }, { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "started following you", live: false }, { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "started following you", live: false }, { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "started following you", live: false }, { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "started following you", live: false }, { img: "https://www.pngitem.com/pimgs/m/505-5059897_tik-tok-png-clipart-logo-tiktok-png-transparent.png", user: "TikTok", message: "started following you", live: false }, ] return ( This month {activitys.map((activity, key) => ( {activity.user} {activity.message} {activity.live ? ( ) : ( Friends )} ))} ) } ================================================ FILE: src/screens/Inbox/styles.js ================================================ import styled from 'styled-components/native'; export const Container = styled.SafeAreaView` flex: 1; background: #FFF; `; ================================================ FILE: src/screens/Photo/index.js ================================================ import React from 'react'; import { View, Text } from 'react-native'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { Container } from './styles'; export default function Photo({ navigation }) { return ( Photo ) } ================================================ FILE: src/screens/Photo/styles.js ================================================ import styled from 'styled-components/native'; export const Container = styled.SafeAreaView` flex: 1; align-items: center; justify-content: center; `; ================================================ FILE: src/screens/Profile/index.js ================================================ import React, { useState } from 'react'; import { View, Dimensions, ScrollView } from 'react-native'; import { TabView, SceneMap } from 'react-native-tab-view'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faBookmark, faBars, faLock, faHeart } from '@fortawesome/free-solid-svg-icons'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { Container, UserImage, UserName, UserFollowers, UserFollowersText, UserFollowersTextNumber, UserFollowersTextDesc, EditProfile, ButtonEditProfile, ButtonEditProfileText, ButtonFavorites, ButtonAddBio, ButtonAddBioText, Tabs, Tab } from './styles'; import Posts from '../../components/Posts'; import Likeds from '../../components/Likeds'; import Privates from '../../components/Privates'; export default function Profile({ navigation }) { const [index, setIndex] = useState(0); const [routes] = useState([ { key: 'posts', title: 'posts' }, { key: 'likeds', title: 'likeds' }, { key: 'privates', title: 'privates' }, ]); const renderScene = SceneMap({ posts: Posts, likeds: Likeds, privates: Privates, }); return ( @tiktok 0 Following 9876003 Followers 197867 Likes Edit profile Tap to add bio ( {props.navigationState.routes.map((tab, key) => ( props.jumpTo(tab.key)}> {tab.key == "posts" && } {tab.key == "likeds" && } {tab.key == "privates" && } ))} )} style={{ width: Dimensions.get("window").width }} navigationState={{ index, routes }} renderScene={renderScene} onIndexChange={setIndex} initialLayout={{ width: Dimensions.get("window").width, height: 200 }} /> ) } ================================================ FILE: src/screens/Profile/styles.js ================================================ import styled from 'styled-components/native'; import { StyleSheet } from 'react-native'; export const Container = styled.SafeAreaView` flex: 1; align-items: center; background: #FFF; `; export const UserImage = styled.Image` align-self: center; margin-top: 15px; width: 100px; height: 100px; border-radius: 50px; border-width: 1px; border-color: #E5E5E5; align-items: center; justify-content: center; `; export const UserName = styled.Text` margin-top: 20px; font-weight: bold; align-self: center; `; export const UserFollowers = styled.View` margin-top: 20px; display: flex; flex-direction: row; align-items: center; justify-content: space-between; `; export const UserFollowersText = styled.View` width: 30%; flex-direction: column; align-items: center; justify-content: center; `; export const UserFollowersTextNumber = styled.Text` color: #010101; font-weight: bold; `; export const UserFollowersTextDesc = styled.Text` margin-top: 10px; color: #333; `; export const EditProfile = styled.View` margin-top: 20px; width: 100%; display: flex; flex-direction: row; align-items: center; justify-content: center; `; export const ButtonEditProfile = styled.TouchableOpacity` width: 200px; height: 52px; display: flex; flex-direction: row; align-items: center; justify-content: center; border: solid 1px #333; padding: 15px; `; export const ButtonEditProfileText = styled.Text` color: #333; `; export const ButtonFavorites = styled.TouchableOpacity` margin-left: 10px; display: flex; height: 52px; flex-direction: row; align-items: center; justify-content: center; border: solid 1px #333; padding: 15px; `; export const ButtonAddBio = styled.TouchableOpacity` margin-left: 10px; display: flex; height: 52px; flex-direction: row; align-items: center; justify-content: center; padding: 15px; `; export const ButtonAddBioText = styled.Text` color: #333; `; export const Tabs = styled.View` display: flex; flex-direction: row; justify-content: space-between; border-top-width: ${StyleSheet.hairlineWidth}px; border-top-color: #E5E5E5; border-bottom-width: ${StyleSheet.hairlineWidth}px; border-bottom-color: #E5E5E5; `; export const Tab = styled.TouchableOpacity` width: 33%; height: 50px; align-items: center; justify-content: center; `; ================================================ FILE: src/screens/User/index.js ================================================ import React, { useState } from 'react'; import { View, Dimensions, ScrollView } from 'react-native'; import { TabView, SceneMap } from 'react-native-tab-view'; import { FontAwesomeIcon } from '@fortawesome/react-native-fontawesome'; import { faBookmark, faBars, faLock, faHeart } from '@fortawesome/free-solid-svg-icons'; import BottomTabNavigator from '../../components/BottomTabNavigator'; import { Container, UserImage, UserName, UserFollowers, UserFollowersText, UserFollowersTextNumber, UserFollowersTextDesc, EditProfile, ButtonEditProfile, ButtonEditProfileText, ButtonFavorites, ButtonAddBio, ButtonAddBioText, Tabs, Tab } from './styles'; import Posts from '../../components/Posts'; import Likeds from '../../components/Likeds'; import Privates from '../../components/Privates'; export default function User({ navigation, route }) { const { user: { name, following, followers, likes, image } } = route.params; console.log(route.params.user); const [index, setIndex] = useState(0); const [routes] = useState([ { key: 'posts', title: 'posts' }, { key: 'likeds', title: 'likeds' }, { key: 'privates', title: 'privates' }, ]); const renderScene = SceneMap({ posts: Posts, likeds: Likeds, privates: Privates, }); return ( {name} {following} Following {followers} Followers {likes} Likes Edit profile Tap to add bio ( {props.navigationState.routes.map((tab, key) => ( props.jumpTo(tab.key)}> {tab.key == "posts" && } {tab.key == "likeds" && } {tab.key == "privates" && } ))} )} style={{ width: Dimensions.get("window").width }} navigationState={{ index, routes }} renderScene={renderScene} onIndexChange={setIndex} initialLayout={{ width: Dimensions.get("window").width, height: 200 }} /> ) } ================================================ FILE: src/screens/User/styles.js ================================================ import styled from 'styled-components/native'; import { StyleSheet } from 'react-native'; export const Container = styled.SafeAreaView` flex: 1; align-items: center; background: #FFF; `; export const UserImage = styled.Image` align-self: center; margin-top: 15px; width: 100px; height: 100px; border-radius: 50px; border-width: 1px; border-color: #E5E5E5; align-items: center; justify-content: center; `; export const UserName = styled.Text` margin-top: 20px; font-weight: bold; align-self: center; `; export const UserFollowers = styled.View` margin-top: 20px; display: flex; flex-direction: row; align-items: center; justify-content: space-between; `; export const UserFollowersText = styled.View` width: 30%; flex-direction: column; align-items: center; justify-content: center; `; export const UserFollowersTextNumber = styled.Text` color: #010101; font-weight: bold; `; export const UserFollowersTextDesc = styled.Text` margin-top: 10px; color: #333; `; export const EditProfile = styled.View` margin-top: 20px; width: 100%; display: flex; flex-direction: row; align-items: center; justify-content: center; `; export const ButtonEditProfile = styled.TouchableOpacity` width: 200px; height: 52px; display: flex; flex-direction: row; align-items: center; justify-content: center; border: solid 1px #333; padding: 15px; `; export const ButtonEditProfileText = styled.Text` color: #333; `; export const ButtonFavorites = styled.TouchableOpacity` margin-left: 10px; display: flex; height: 52px; flex-direction: row; align-items: center; justify-content: center; border: solid 1px #333; padding: 15px; `; export const ButtonAddBio = styled.TouchableOpacity` margin-left: 10px; display: flex; height: 52px; flex-direction: row; align-items: center; justify-content: center; padding: 15px; `; export const ButtonAddBioText = styled.Text` color: #333; `; export const Tabs = styled.View` display: flex; flex-direction: row; justify-content: space-between; border-top-width: ${StyleSheet.hairlineWidth}px; border-top-color: #E5E5E5; border-bottom-width: ${StyleSheet.hairlineWidth}px; border-bottom-color: #E5E5E5; `; export const Tab = styled.TouchableOpacity` width: 33%; height: 50px; align-items: center; justify-content: center; `; ================================================ FILE: src/utils/randomize.js ================================================ export default function randomize(array) { var currentIndex = array.length, temporaryValue, randomIndex; while (currentIndex !== 0) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; }