Browse Source

Merge remote-tracking branch 'rnc/master' into tomun/example

Tom Underhill 4 years ago
parent
commit
02582ed118
50 changed files with 7950 additions and 531 deletions
  1. 4
    1
      README.md
  2. 1
    0
      example/.gitattributes
  3. 64
    0
      example/.gitignore
  4. 6
    0
      example/.prettierrc.js
  5. 1
    0
      example/.watchmanconfig
  6. 17
    0
      example/App.tsx
  7. 55
    0
      example/android/app/_BUCK
  8. 49
    38
      example/android/app/build.gradle
  9. BIN
      example/android/app/debug.keystore
  10. 0
    7
      example/android/app/proguard-rules.pro
  11. 4
    5
      example/android/app/src/debug/AndroidManifest.xml
  12. 1
    1
      example/android/app/src/main/AndroidManifest.xml
  13. 15
    0
      example/android/app/src/main/java/com/example/MainActivity.java
  14. 74
    0
      example/android/app/src/main/java/com/example/MainApplication.java
  15. 1
    1
      example/android/app/src/main/res/values/strings.xml
  16. 1
    0
      example/android/app/src/main/res/values/styles.xml
  17. 12
    12
      example/android/build.gradle
  18. 0
    6
      example/android/gradle.properties
  19. 1
    2
      example/android/gradle/wrapper/gradle-wrapper.properties
  20. 17
    1
      example/android/gradlew
  21. 100
    84
      example/android/gradlew.bat
  22. 2
    6
      example/android/settings.gradle
  23. 2
    2
      example/app.json
  24. 3
    0
      example/babel.config.js
  25. 1
    7
      example/index.js
  26. 56
    0
      example/ios/Podfile
  27. 344
    0
      example/ios/Podfile.lock
  28. 53
    0
      example/ios/example-tvOS/Info.plist
  29. 24
    0
      example/ios/example-tvOSTests/Info.plist
  30. 925
    0
      example/ios/example.xcodeproj/project.pbxproj
  31. 129
    0
      example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme
  32. 129
    0
      example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme
  33. 10
    0
      example/ios/example.xcworkspace/contents.xcworkspacedata
  34. 8
    0
      example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  35. 15
    0
      example/ios/example/AppDelegate.h
  36. 42
    0
      example/ios/example/AppDelegate.m
  37. 42
    0
      example/ios/example/Base.lproj/LaunchScreen.xib
  38. 38
    0
      example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json
  39. 6
    0
      example/ios/example/Images.xcassets/Contents.json
  40. 57
    0
      example/ios/example/Info.plist
  41. 16
    0
      example/ios/example/main.m
  42. 24
    0
      example/ios/exampleTests/Info.plist
  43. 72
    0
      example/ios/exampleTests/exampleTests.m
  44. 62
    0
      example/tsconfig.json
  45. 4944
    0
      example/yarn.lock
  46. 138
    132
      ios/RNCWebView.m
  47. 6
    8
      package.json
  48. 10
    4
      src/WebViewShared.tsx
  49. 80
    8
      src/__tests__/WebViewShared-test.js
  50. 289
    206
      yarn.lock

+ 4
- 1
README.md View File

@@ -4,7 +4,8 @@
4 4
 [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
5 5
 [![All Contributors](https://img.shields.io/badge/all_contributors-16-orange.svg?style=flat-square)](#contributors)
6 6
 [![Known Vulnerabilities](https://snyk.io/test/github/react-native-community/react-native-webview/badge.svg?style=flat-square)](https://snyk.io/test/github/react-native-community/react-native-webview)
7
-<a href="https://www.npmjs.com/package/react-native-webview"><img src="https://img.shields.io/npm/v/react-native-webview.svg"></a>
7
+[![NPM Version](https://img.shields.io/npm/v/react-native-webview.svg?style=flat-square)](https://www.npmjs.com/package/react-native-webview)
8
+[![Lean Core Extracted](https://img.shields.io/badge/Lean%20Core-Extracted-brightgreen.svg?style=flat-square)][lean-core-issue]
8 9
 
9 10
 **React Native WebView** is a modern, well-supported, and cross-platform WebView for React Native. It is intended to be a replacement for the built-in WebView (which will be [removed from core](https://github.com/react-native-community/discussions-and-proposals/pull/3)).
10 11
 
@@ -101,3 +102,5 @@ MIT
101 102
 This readme is available in:
102 103
 
103 104
 - [Brazilian portuguese](docs/README.portuguese.md)
105
+
106
+[lean-core-issue]: https://github.com/facebook/react-native/issues/23313

+ 1
- 0
example/.gitattributes View File

@@ -0,0 +1 @@
1
+*.pbxproj -text

+ 64
- 0
example/.gitignore View File

@@ -0,0 +1,64 @@
1
+# OSX
2
+#
3
+.DS_Store
4
+
5
+# Xcode
6
+#
7
+build/
8
+*.pbxuser
9
+!default.pbxuser
10
+*.mode1v3
11
+!default.mode1v3
12
+*.mode2v3
13
+!default.mode2v3
14
+*.perspectivev3
15
+!default.perspectivev3
16
+xcuserdata
17
+*.xccheckout
18
+*.moved-aside
19
+DerivedData
20
+*.hmap
21
+*.ipa
22
+*.xcuserstate
23
+project.xcworkspace
24
+
25
+# Android/IntelliJ
26
+#
27
+build/
28
+.idea
29
+.gradle
30
+local.properties
31
+*.iml
32
+
33
+# Visual Studio Code
34
+#
35
+.vscode/
36
+
37
+# node.js
38
+#
39
+node_modules/
40
+npm-debug.log
41
+yarn-error.log
42
+
43
+# BUCK
44
+buck-out/
45
+\.buckd/
46
+*.keystore
47
+!debug.keystore
48
+
49
+# fastlane
50
+#
51
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
52
+# screenshots whenever they are needed.
53
+# For more information about the recommended setup visit:
54
+# https://docs.fastlane.tools/best-practices/source-control/
55
+
56
+*/fastlane/report.xml
57
+*/fastlane/Preview.html
58
+*/fastlane/screenshots
59
+
60
+# Bundle artifact
61
+*.jsbundle
62
+
63
+# CocoaPods
64
+/ios/Pods/

+ 6
- 0
example/.prettierrc.js View File

@@ -0,0 +1,6 @@
1
+module.exports = {
2
+  bracketSpacing: false,
3
+  jsxBracketSameLine: true,
4
+  singleQuote: true,
5
+  trailingComma: 'all',
6
+};

+ 1
- 0
example/.watchmanconfig View File

@@ -0,0 +1 @@
1
+{}

+ 17
- 0
example/App.tsx View File

@@ -0,0 +1,17 @@
1
+import React from 'react';
2
+import {SafeAreaView, StyleSheet} from 'react-native';
3
+import {WebView} from 'react-native-webview';
4
+
5
+const styles = StyleSheet.create({
6
+  container: {flex: 1, backgroundColor: '#20232a'},
7
+});
8
+
9
+const App = () => {
10
+  return (
11
+    <SafeAreaView style={styles.container}>
12
+      <WebView source={{uri: 'https://facebook.github.io/react-native/'}} />
13
+    </SafeAreaView>
14
+  );
15
+};
16
+
17
+export default App;

+ 55
- 0
example/android/app/_BUCK View File

@@ -0,0 +1,55 @@
1
+# To learn about Buck see [Docs](https://buckbuild.com/).
2
+# To run your application with Buck:
3
+# - install Buck
4
+# - `npm start` - to start the packager
5
+# - `cd android`
6
+# - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"`
7
+# - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck
8
+# - `buck install -r android/app` - compile, install and run application
9
+#
10
+
11
+load(":build_defs.bzl", "create_aar_targets", "create_jar_targets")
12
+
13
+lib_deps = []
14
+
15
+create_aar_targets(glob(["libs/*.aar"]))
16
+
17
+create_jar_targets(glob(["libs/*.jar"]))
18
+
19
+android_library(
20
+    name = "all-libs",
21
+    exported_deps = lib_deps,
22
+)
23
+
24
+android_library(
25
+    name = "app-code",
26
+    srcs = glob([
27
+        "src/main/java/**/*.java",
28
+    ]),
29
+    deps = [
30
+        ":all-libs",
31
+        ":build_config",
32
+        ":res",
33
+    ],
34
+)
35
+
36
+android_build_config(
37
+    name = "build_config",
38
+    package = "com.example",
39
+)
40
+
41
+android_resource(
42
+    name = "res",
43
+    package = "com.example",
44
+    res = "src/main/res",
45
+)
46
+
47
+android_binary(
48
+    name = "app",
49
+    keystore = "//android/keystores:debug",
50
+    manifest = "src/main/AndroidManifest.xml",
51
+    package_type = "debug",
52
+    deps = [
53
+        ":app-code",
54
+    ],
55
+)

+ 49
- 38
example/android/app/build.gradle View File

@@ -18,6 +18,9 @@ import com.android.build.OutputFile
18 18
  *   // the entry file for bundle generation
19 19
  *   entryFile: "index.android.js",
20 20
  *
21
+ *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
22
+ *   bundleCommand: "ram-bundle",
23
+ *
21 24
  *   // whether to bundle JS and assets in debug mode
22 25
  *   bundleInDebug: false,
23 26
  *
@@ -72,17 +75,12 @@ import com.android.build.OutputFile
72 75
  * ]
73 76
  */
74 77
 
75
-
76 78
 project.ext.react = [
77
-        cliPath: "./node_modules/react-native/local-cli/cli.js",
78
-        enableHermes: false,
79
-        entryFile: "./example/index.js",
80
-        root: "../../../"
79
+    entryFile: "index.js",
80
+    enableHermes: false,  // clean and rebuild if changing
81 81
 ]
82 82
 
83
-
84
-apply from: "./scripts/CI.gradle"
85
-apply from: "../../../node_modules/react-native/react.gradle"
83
+apply from: "../../node_modules/react-native/react.gradle"
86 84
 
87 85
 /**
88 86
  * Set this to true to create two separate APKs instead of one:
@@ -99,6 +97,28 @@ def enableSeparateBuildPerCPUArchitecture = false
99 97
  */
100 98
 def enableProguardInReleaseBuilds = false
101 99
 
100
+/**
101
+ * The preferred build flavor of JavaScriptCore.
102
+ *
103
+ * For example, to use the international variant, you can use:
104
+ * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
105
+ *
106
+ * The international variant includes ICU i18n library and necessary data
107
+ * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
108
+ * give correct results when using with locales other than en-US.  Note that
109
+ * this variant is about 6MiB larger per architecture than default.
110
+ */
111
+def jscFlavor = 'org.webkit:android-jsc:+'
112
+
113
+/**
114
+ * Whether to enable the Hermes VM.
115
+ *
116
+ * This should be set on project.ext.react and mirrored here.  If it is not set
117
+ * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
118
+ * and the benefits of using Hermes will therefore be sharply reduced.
119
+ */
120
+def enableHermes = project.ext.react.get("enableHermes", false);
121
+
102 122
 android {
103 123
     compileSdkVersion rootProject.ext.compileSdkVersion
104 124
 
@@ -107,23 +127,12 @@ android {
107 127
         targetCompatibility JavaVersion.VERSION_1_8
108 128
     }
109 129
 
110
-    signingConfigs {
111
-        release {
112
-            storeFile file("exampleWebView.keystore")
113
-            keyAlias "webview"
114
-            keyPassword "webview"
115
-            storePassword "webview"
116
-        }
117
-    }
118
-
119 130
     defaultConfig {
120
-        applicationId "com.webviewexample"
131
+        applicationId "com.example"
121 132
         minSdkVersion rootProject.ext.minSdkVersion
122 133
         targetSdkVersion rootProject.ext.targetSdkVersion
123 134
         versionCode 1
124 135
         versionName "1.0"
125
-        testBuildType System.getProperty('testBuildType', 'debug')
126
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
127 136
     }
128 137
     splits {
129 138
         abi {
@@ -133,48 +142,48 @@ android {
133 142
             include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
134 143
         }
135 144
     }
145
+    signingConfigs {
146
+        debug {
147
+            storeFile file('debug.keystore')
148
+            storePassword 'android'
149
+            keyAlias 'androiddebugkey'
150
+            keyPassword 'android'
151
+        }
152
+    }
136 153
     buildTypes {
154
+        debug {
155
+            signingConfig signingConfigs.debug
156
+        }
137 157
         release {
158
+            // Caution! In production, you need to generate your own keystore file.
159
+            // see https://facebook.github.io/react-native/docs/signed-apk-android.
160
+            signingConfig signingConfigs.debug
138 161
             minifyEnabled enableProguardInReleaseBuilds
139 162
             proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
140
-            proguardFile "${rootProject.projectDir}/../node_modules/detox/android/detox/proguard-rules-app.pro"
141
-            signingConfig signingConfigs.release
142
-            matchingFallbacks = ['release']
143 163
         }
144 164
     }
145 165
     // applicationVariants are e.g. debug, release
146 166
     applicationVariants.all { variant ->
147 167
         variant.outputs.each { output ->
148 168
             // For each separate APK per architecture, set a unique version code as described here:
149
-            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
150
-            def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4]
169
+            // https://developer.android.com/studio/build/configure-apk-splits.html
170
+            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
151 171
             def abi = output.getFilter(OutputFile.ABI)
152 172
             if (abi != null) {  // null for the universal-debug, universal-release variants
153 173
                 output.versionCodeOverride =
154 174
                         versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
155 175
             }
176
+
156 177
         }
157 178
     }
158 179
 }
159 180
 
160
-def jscFlavor = 'org.webkit:android-jsc:+'
161
-
162
-def enableHermes = project.ext.react.get("enableHermes", false);
163
-
164 181
 dependencies {
165
-    implementation project(':ReactNativeWebView')
166
-    implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
167 182
     implementation fileTree(dir: "libs", include: ["*.jar"])
168 183
     implementation "com.facebook.react:react-native:+"  // From node_modules
169 184
 
170
-    // tests
171
-    androidTestImplementation ('com.wix:detox:+') { transitive = true }
172
-    androidTestImplementation 'junit:junit:4.12'
173
-
174 185
     if (enableHermes) {
175
-        // For RN 0.60.x
176
-        def hermesPath = "${rootProject.projectDir}/../node_modules/hermesvm/android/"
177
-
186
+        def hermesPath = "../../node_modules/hermes-engine/android/";
178 187
         debugImplementation files(hermesPath + "hermes-debug.aar")
179 188
         releaseImplementation files(hermesPath + "hermes-release.aar")
180 189
     } else {
@@ -188,3 +197,5 @@ task copyDownloadableDepsToLibs(type: Copy) {
188 197
     from configurations.compile
189 198
     into 'libs'
190 199
 }
200
+
201
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

BIN
example/android/app/debug.keystore View File


+ 0
- 7
example/android/app/proguard-rules.pro View File

@@ -8,10 +8,3 @@
8 8
 #   http://developer.android.com/guide/developing/tools/proguard.html
9 9
 
10 10
 # Add any project specific keep options here:
11
-
12
-# If your project uses WebView with JS, uncomment the following
13
-# and specify the fully qualified class name to the JavaScript interface
14
-# class:
15
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16
-#   public *;
17
-#}

+ 4
- 5
example/android/app/src/debug/AndroidManifest.xml View File

@@ -1,9 +1,8 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2 2
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
3
-          xmlns:tools="http://schemas.android.com/tools">
3
+    xmlns:tools="http://schemas.android.com/tools">
4
+
4 5
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
5
-    <application
6
-    	android:usesCleartextTraffic="true"
7
-    	tools:targetApi="28"
8
-    	tools:ignore="GoogleAppIndexingWarning"/>
6
+
7
+    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
9 8
 </manifest>

+ 1
- 1
example/android/app/src/main/AndroidManifest.xml View File

@@ -1,5 +1,5 @@
1 1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
-    package="com.webviewexample">
2
+  package="com.example">
3 3
 
4 4
     <uses-permission android:name="android.permission.INTERNET" />
5 5
 

+ 15
- 0
example/android/app/src/main/java/com/example/MainActivity.java View File

@@ -0,0 +1,15 @@
1
+package com.example;
2
+
3
+import com.facebook.react.ReactActivity;
4
+
5
+public class MainActivity extends ReactActivity {
6
+
7
+  /**
8
+   * Returns the name of the main component registered from JavaScript. This is used to schedule
9
+   * rendering of the component.
10
+   */
11
+  @Override
12
+  protected String getMainComponentName() {
13
+    return "example";
14
+  }
15
+}

+ 74
- 0
example/android/app/src/main/java/com/example/MainApplication.java View File

@@ -0,0 +1,74 @@
1
+package com.example;
2
+
3
+import android.app.Application;
4
+import android.content.Context;
5
+import com.facebook.react.PackageList;
6
+import com.facebook.react.ReactApplication;
7
+import com.facebook.react.ReactNativeHost;
8
+import com.facebook.react.ReactPackage;
9
+import com.facebook.soloader.SoLoader;
10
+import java.lang.reflect.InvocationTargetException;
11
+import java.util.List;
12
+
13
+public class MainApplication extends Application implements ReactApplication {
14
+
15
+  private final ReactNativeHost mReactNativeHost =
16
+      new ReactNativeHost(this) {
17
+        @Override
18
+        public boolean getUseDeveloperSupport() {
19
+          return BuildConfig.DEBUG;
20
+        }
21
+
22
+        @Override
23
+        protected List<ReactPackage> getPackages() {
24
+          @SuppressWarnings("UnnecessaryLocalVariable")
25
+          List<ReactPackage> packages = new PackageList(this).getPackages();
26
+          // Packages that cannot be autolinked yet can be added manually here, for example:
27
+          // packages.add(new MyReactNativePackage());
28
+          return packages;
29
+        }
30
+
31
+        @Override
32
+        protected String getJSMainModuleName() {
33
+          return "index";
34
+        }
35
+      };
36
+
37
+  @Override
38
+  public ReactNativeHost getReactNativeHost() {
39
+    return mReactNativeHost;
40
+  }
41
+
42
+  @Override
43
+  public void onCreate() {
44
+    super.onCreate();
45
+    SoLoader.init(this, /* native exopackage */ false);
46
+    initializeFlipper(this); // Remove this line if you don't want Flipper enabled
47
+  }
48
+
49
+  /**
50
+   * Loads Flipper in React Native templates.
51
+   *
52
+   * @param context
53
+   */
54
+  private static void initializeFlipper(Context context) {
55
+    if (BuildConfig.DEBUG) {
56
+      try {
57
+        /*
58
+         We use reflection here to pick up the class that initializes Flipper,
59
+        since Flipper library is not available in release mode
60
+        */
61
+        Class<?> aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper");
62
+        aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
63
+      } catch (ClassNotFoundException e) {
64
+        e.printStackTrace();
65
+      } catch (NoSuchMethodException e) {
66
+        e.printStackTrace();
67
+      } catch (IllegalAccessException e) {
68
+        e.printStackTrace();
69
+      } catch (InvocationTargetException e) {
70
+        e.printStackTrace();
71
+      }
72
+    }
73
+  }
74
+}

+ 1
- 1
example/android/app/src/main/res/values/strings.xml View File

@@ -1,3 +1,3 @@
1 1
 <resources>
2
-    <string name="app_name">WebViewExample</string>
2
+    <string name="app_name">example</string>
3 3
 </resources>

+ 1
- 0
example/android/app/src/main/res/values/styles.xml View File

@@ -3,6 +3,7 @@
3 3
     <!-- Base application theme. -->
4 4
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
5 5
         <!-- Customize your theme here. -->
6
+        <item name="android:textColor">#000000</item>
6 7
     </style>
7 8
 
8 9
 </resources>

+ 12
- 12
example/android/build.gradle View File

@@ -2,37 +2,37 @@
2 2
 
3 3
 buildscript {
4 4
     ext {
5
-        kotlinVersion = '1.3.10'
6 5
         buildToolsVersion = "28.0.3"
7
-        minSdkVersion = 19
6
+        minSdkVersion = 16
8 7
         compileSdkVersion = 28
9 8
         targetSdkVersion = 28
10
-        supportLibVersion = "28.0.0"
11
-        detoxKotlinVersion = kotlinVersion
12 9
     }
13 10
     repositories {
14 11
         google()
15 12
         jcenter()
16 13
     }
17 14
     dependencies {
18
-        classpath 'com.android.tools.build:gradle:3.4.1'
19
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
15
+        classpath("com.android.tools.build:gradle:3.4.2")
16
+
17
+        // NOTE: Do not place your application dependencies here; they belong
18
+        // in the individual module build.gradle files
20 19
     }
21 20
 }
22 21
 
23 22
 allprojects {
24 23
     repositories {
25 24
         mavenLocal()
26
-        google()
27
-        jcenter()
28 25
         maven {
29 26
             // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
30
-            url "$rootDir/../../node_modules/react-native/android"
31
-            }
27
+            url("$rootDir/../node_modules/react-native/android")
28
+        }
32 29
         maven {
33 30
             // Android JSC is installed from npm
34
-            url "$rootDir/../../node_modules/jsc-android/dist"
31
+            url("$rootDir/../node_modules/jsc-android/dist")
35 32
         }
36
-        maven { url "$rootDir/../../node_modules/detox/Detox-android" }
33
+
34
+        google()
35
+        jcenter()
36
+        maven { url 'https://jitpack.io' }
37 37
     }
38 38
 }

+ 0
- 6
example/android/gradle.properties View File

@@ -17,11 +17,5 @@
17 17
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 18
 # org.gradle.parallel=true
19 19
 
20
-# This is an example of how you can change default DB size (6MB) to 10MB
21
-# WebView_db_size_in_MB=10
22
-
23
-# Enable dedicated thread pool executor
24
-WebView_dedicatedExecutor=true
25 20
 android.useAndroidX=true
26 21
 android.enableJetifier=true
27
-

+ 1
- 2
example/android/gradle/wrapper/gradle-wrapper.properties View File

@@ -1,6 +1,5 @@
1 1
 distributionBase=GRADLE_USER_HOME
2 2
 distributionPath=wrapper/dists
3
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
3 4
 zipStoreBase=GRADLE_USER_HOME
4 5
 zipStorePath=wrapper/dists
5
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
6
-

+ 17
- 1
example/android/gradlew View File

@@ -1,5 +1,21 @@
1 1
 #!/usr/bin/env sh
2 2
 
3
+#
4
+# Copyright 2015 the original author or authors.
5
+#
6
+# Licensed under the Apache License, Version 2.0 (the "License");
7
+# you may not use this file except in compliance with the License.
8
+# You may obtain a copy of the License at
9
+#
10
+#      http://www.apache.org/licenses/LICENSE-2.0
11
+#
12
+# Unless required by applicable law or agreed to in writing, software
13
+# distributed under the License is distributed on an "AS IS" BASIS,
14
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+# See the License for the specific language governing permissions and
16
+# limitations under the License.
17
+#
18
+
3 19
 ##############################################################################
4 20
 ##
5 21
 ##  Gradle start up script for UN*X
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
28 44
 APP_BASE_NAME=`basename "$0"`
29 45
 
30 46
 # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31
-DEFAULT_JVM_OPTS=""
47
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
32 48
 
33 49
 # Use the maximum available, or set MAX_FD != -1 to use that value.
34 50
 MAX_FD="maximum"

+ 100
- 84
example/android/gradlew.bat View File

@@ -1,84 +1,100 @@
1
-@if "%DEBUG%" == "" @echo off
2
-@rem ##########################################################################
3
-@rem
4
-@rem  Gradle startup script for Windows
5
-@rem
6
-@rem ##########################################################################
7
-
8
-@rem Set local scope for the variables with windows NT shell
9
-if "%OS%"=="Windows_NT" setlocal
10
-
11
-set DIRNAME=%~dp0
12
-if "%DIRNAME%" == "" set DIRNAME=.
13
-set APP_BASE_NAME=%~n0
14
-set APP_HOME=%DIRNAME%
15
-
16
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17
-set DEFAULT_JVM_OPTS=
18
-
19
-@rem Find java.exe
20
-if defined JAVA_HOME goto findJavaFromJavaHome
21
-
22
-set JAVA_EXE=java.exe
23
-%JAVA_EXE% -version >NUL 2>&1
24
-if "%ERRORLEVEL%" == "0" goto init
25
-
26
-echo.
27
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28
-echo.
29
-echo Please set the JAVA_HOME variable in your environment to match the
30
-echo location of your Java installation.
31
-
32
-goto fail
33
-
34
-:findJavaFromJavaHome
35
-set JAVA_HOME=%JAVA_HOME:"=%
36
-set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37
-
38
-if exist "%JAVA_EXE%" goto init
39
-
40
-echo.
41
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42
-echo.
43
-echo Please set the JAVA_HOME variable in your environment to match the
44
-echo location of your Java installation.
45
-
46
-goto fail
47
-
48
-:init
49
-@rem Get command-line arguments, handling Windows variants
50
-
51
-if not "%OS%" == "Windows_NT" goto win9xME_args
52
-
53
-:win9xME_args
54
-@rem Slurp the command line arguments.
55
-set CMD_LINE_ARGS=
56
-set _SKIP=2
57
-
58
-:win9xME_args_slurp
59
-if "x%~1" == "x" goto execute
60
-
61
-set CMD_LINE_ARGS=%*
62
-
63
-:execute
64
-@rem Setup the command line
65
-
66
-set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67
-
68
-@rem Execute Gradle
69
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70
-
71
-:end
72
-@rem End local scope for the variables with windows NT shell
73
-if "%ERRORLEVEL%"=="0" goto mainEnd
74
-
75
-:fail
76
-rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77
-rem the _cmd.exe /c_ return code!
78
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79
-exit /b 1
80
-
81
-:mainEnd
82
-if "%OS%"=="Windows_NT" endlocal
83
-
84
-:omega
1
+@rem
2
+@rem Copyright 2015 the original author or authors.
3
+@rem
4
+@rem Licensed under the Apache License, Version 2.0 (the "License");
5
+@rem you may not use this file except in compliance with the License.
6
+@rem You may obtain a copy of the License at
7
+@rem
8
+@rem      http://www.apache.org/licenses/LICENSE-2.0
9
+@rem
10
+@rem Unless required by applicable law or agreed to in writing, software
11
+@rem distributed under the License is distributed on an "AS IS" BASIS,
12
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+@rem See the License for the specific language governing permissions and
14
+@rem limitations under the License.
15
+@rem
16
+
17
+@if "%DEBUG%" == "" @echo off
18
+@rem ##########################################################################
19
+@rem
20
+@rem  Gradle startup script for Windows
21
+@rem
22
+@rem ##########################################################################
23
+
24
+@rem Set local scope for the variables with windows NT shell
25
+if "%OS%"=="Windows_NT" setlocal
26
+
27
+set DIRNAME=%~dp0
28
+if "%DIRNAME%" == "" set DIRNAME=.
29
+set APP_BASE_NAME=%~n0
30
+set APP_HOME=%DIRNAME%
31
+
32
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
33
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
34
+
35
+@rem Find java.exe
36
+if defined JAVA_HOME goto findJavaFromJavaHome
37
+
38
+set JAVA_EXE=java.exe
39
+%JAVA_EXE% -version >NUL 2>&1
40
+if "%ERRORLEVEL%" == "0" goto init
41
+
42
+echo.
43
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
44
+echo.
45
+echo Please set the JAVA_HOME variable in your environment to match the
46
+echo location of your Java installation.
47
+
48
+goto fail
49
+
50
+:findJavaFromJavaHome
51
+set JAVA_HOME=%JAVA_HOME:"=%
52
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
53
+
54
+if exist "%JAVA_EXE%" goto init
55
+
56
+echo.
57
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
58
+echo.
59
+echo Please set the JAVA_HOME variable in your environment to match the
60
+echo location of your Java installation.
61
+
62
+goto fail
63
+
64
+:init
65
+@rem Get command-line arguments, handling Windows variants
66
+
67
+if not "%OS%" == "Windows_NT" goto win9xME_args
68
+
69
+:win9xME_args
70
+@rem Slurp the command line arguments.
71
+set CMD_LINE_ARGS=
72
+set _SKIP=2
73
+
74
+:win9xME_args_slurp
75
+if "x%~1" == "x" goto execute
76
+
77
+set CMD_LINE_ARGS=%*
78
+
79
+:execute
80
+@rem Setup the command line
81
+
82
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
83
+
84
+@rem Execute Gradle
85
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
86
+
87
+:end
88
+@rem End local scope for the variables with windows NT shell
89
+if "%ERRORLEVEL%"=="0" goto mainEnd
90
+
91
+:fail
92
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
93
+rem the _cmd.exe /c_ return code!
94
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
95
+exit /b 1
96
+
97
+:mainEnd
98
+if "%OS%"=="Windows_NT" endlocal
99
+
100
+:omega

+ 2
- 6
example/android/settings.gradle View File

@@ -1,7 +1,3 @@
1
-rootProject.name = 'WebViewExample'
2
-
1
+rootProject.name = 'example'
2
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3 3
 include ':app'
4
-include ':ReactNativeWebView'
5
-
6
-
7
-project(':ReactNativeWebView').projectDir = new File(rootProject.projectDir, '../../android')

+ 2
- 2
example/app.json View File

@@ -1,4 +1,4 @@
1 1
 {
2
-  "name": "RNCWebViewExample",
3
-  "displayName": "RNCWebViewExample"
2
+  "name": "example",
3
+  "displayName": "example"
4 4
 }

+ 3
- 0
example/babel.config.js View File

@@ -0,0 +1,3 @@
1
+module.exports = {
2
+  presets: ['module:metro-react-native-babel-preset'],
3
+};

+ 1
- 7
example/index.js View File

@@ -1,15 +1,9 @@
1 1
 /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7 2
  * @format
8
- * @flow
9 3
  */
10 4
 
11 5
 import {AppRegistry} from 'react-native';
12 6
 import App from './App';
13 7
 import {name as appName} from './app.json';
14 8
 
15
-AppRegistry.registerComponent(appName, () => App);
9
+AppRegistry.registerComponent(appName, () => App);

+ 56
- 0
example/ios/Podfile View File

@@ -0,0 +1,56 @@
1
+platform :ios, '9.0'
2
+require_relative '../../node_modules/@react-native-community/cli-platform-ios/native_modules'
3
+
4
+project './example.xcodeproj'
5
+
6
+target 'example' do
7
+  # Pods for example
8
+  pod 'react-native-webview', :path => "../.."
9
+  pod 'FBLazyVector', :path => "../../node_modules/react-native/Libraries/FBLazyVector"
10
+  pod 'FBReactNativeSpec', :path => "../../node_modules/react-native/Libraries/FBReactNativeSpec"
11
+  pod 'RCTRequired', :path => "../../node_modules/react-native/Libraries/RCTRequired"
12
+  pod 'RCTTypeSafety', :path => "../../node_modules/react-native/Libraries/TypeSafety"
13
+  pod 'React', :path => '../../node_modules/react-native/'
14
+  pod 'React-Core', :path => '../../node_modules/react-native/'
15
+  pod 'React-CoreModules', :path => '../../node_modules/react-native/React/CoreModules'
16
+  pod 'React-Core/DevSupport', :path => '../../node_modules/react-native/'
17
+  pod 'React-RCTActionSheet', :path => '../../node_modules/react-native/Libraries/ActionSheetIOS'
18
+  pod 'React-RCTAnimation', :path => '../../node_modules/react-native/Libraries/NativeAnimation'
19
+  pod 'React-RCTBlob', :path => '../../node_modules/react-native/Libraries/Blob'
20
+  pod 'React-RCTImage', :path => '../../node_modules/react-native/Libraries/Image'
21
+  pod 'React-RCTLinking', :path => '../../node_modules/react-native/Libraries/LinkingIOS'
22
+  pod 'React-RCTNetwork', :path => '../../node_modules/react-native/Libraries/Network'
23
+  pod 'React-RCTSettings', :path => '../../node_modules/react-native/Libraries/Settings'
24
+  pod 'React-RCTText', :path => '../../node_modules/react-native/Libraries/Text'
25
+  pod 'React-RCTVibration', :path => '../../node_modules/react-native/Libraries/Vibration'
26
+  pod 'React-Core/RCTWebSocket', :path => '../../node_modules/react-native/'
27
+
28
+  pod 'React-cxxreact', :path => '../../node_modules/react-native/ReactCommon/cxxreact'
29
+  pod 'React-jsi', :path => '../../node_modules/react-native/ReactCommon/jsi'
30
+  pod 'React-jsiexecutor', :path => '../../node_modules/react-native/ReactCommon/jsiexecutor'
31
+  pod 'React-jsinspector', :path => '../../node_modules/react-native/ReactCommon/jsinspector'
32
+  pod 'ReactCommon/jscallinvoker', :path => "../../node_modules/react-native/ReactCommon"
33
+  pod 'ReactCommon/turbomodule/core', :path => "../../node_modules/react-native/ReactCommon"
34
+  pod 'Yoga', :path => '../../node_modules/react-native/ReactCommon/yoga'
35
+
36
+  pod 'DoubleConversion', :podspec => '../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
37
+  pod 'glog', :podspec => '../../node_modules/react-native/third-party-podspecs/glog.podspec'
38
+  pod 'Folly', :podspec => '../../node_modules/react-native/third-party-podspecs/Folly.podspec'
39
+
40
+  target 'exampleTests' do
41
+    inherit! :search_paths
42
+    # Pods for testing
43
+  end
44
+
45
+  use_native_modules!
46
+end
47
+
48
+target 'example-tvOS' do
49
+  # Pods for example-tvOS
50
+
51
+  target 'example-tvOSTests' do
52
+    inherit! :search_paths
53
+    # Pods for testing
54
+  end
55
+
56
+end

+ 344
- 0
example/ios/Podfile.lock View File

@@ -0,0 +1,344 @@
1
+PODS:
2
+  - boost-for-react-native (1.63.0)
3
+  - DoubleConversion (1.1.6)
4
+  - FBLazyVector (0.61.5)
5
+  - FBReactNativeSpec (0.61.5):
6
+    - Folly (= 2018.10.22.00)
7
+    - RCTRequired (= 0.61.5)
8
+    - RCTTypeSafety (= 0.61.5)
9
+    - React-Core (= 0.61.5)
10
+    - React-jsi (= 0.61.5)
11
+    - ReactCommon/turbomodule/core (= 0.61.5)
12
+  - Folly (2018.10.22.00):
13
+    - boost-for-react-native
14
+    - DoubleConversion
15
+    - Folly/Default (= 2018.10.22.00)
16
+    - glog
17
+  - Folly/Default (2018.10.22.00):
18
+    - boost-for-react-native
19
+    - DoubleConversion
20
+    - glog
21
+  - glog (0.3.5)
22
+  - RCTRequired (0.61.5)
23
+  - RCTTypeSafety (0.61.5):
24
+    - FBLazyVector (= 0.61.5)
25
+    - Folly (= 2018.10.22.00)
26
+    - RCTRequired (= 0.61.5)
27
+    - React-Core (= 0.61.5)
28
+  - React (0.61.5):
29
+    - React-Core (= 0.61.5)
30
+    - React-Core/DevSupport (= 0.61.5)
31
+    - React-Core/RCTWebSocket (= 0.61.5)
32
+    - React-RCTActionSheet (= 0.61.5)
33
+    - React-RCTAnimation (= 0.61.5)
34
+    - React-RCTBlob (= 0.61.5)
35
+    - React-RCTImage (= 0.61.5)
36
+    - React-RCTLinking (= 0.61.5)
37
+    - React-RCTNetwork (= 0.61.5)
38
+    - React-RCTSettings (= 0.61.5)
39
+    - React-RCTText (= 0.61.5)
40
+    - React-RCTVibration (= 0.61.5)
41
+  - React-Core (0.61.5):
42
+    - Folly (= 2018.10.22.00)
43
+    - glog
44
+    - React-Core/Default (= 0.61.5)
45
+    - React-cxxreact (= 0.61.5)
46
+    - React-jsi (= 0.61.5)
47
+    - React-jsiexecutor (= 0.61.5)
48
+    - Yoga
49
+  - React-Core/CoreModulesHeaders (0.61.5):
50
+    - Folly (= 2018.10.22.00)
51
+    - glog
52
+    - React-Core/Default
53
+    - React-cxxreact (= 0.61.5)
54
+    - React-jsi (= 0.61.5)
55
+    - React-jsiexecutor (= 0.61.5)
56
+    - Yoga
57
+  - React-Core/Default (0.61.5):
58
+    - Folly (= 2018.10.22.00)
59
+    - glog
60
+    - React-cxxreact (= 0.61.5)
61
+    - React-jsi (= 0.61.5)
62
+    - React-jsiexecutor (= 0.61.5)
63
+    - Yoga
64
+  - React-Core/DevSupport (0.61.5):
65
+    - Folly (= 2018.10.22.00)
66
+    - glog
67
+    - React-Core/Default (= 0.61.5)
68
+    - React-Core/RCTWebSocket (= 0.61.5)
69
+    - React-cxxreact (= 0.61.5)
70
+    - React-jsi (= 0.61.5)
71
+    - React-jsiexecutor (= 0.61.5)
72
+    - React-jsinspector (= 0.61.5)
73
+    - Yoga
74
+  - React-Core/RCTActionSheetHeaders (0.61.5):
75
+    - Folly (= 2018.10.22.00)
76
+    - glog
77
+    - React-Core/Default
78
+    - React-cxxreact (= 0.61.5)
79
+    - React-jsi (= 0.61.5)
80
+    - React-jsiexecutor (= 0.61.5)
81
+    - Yoga
82
+  - React-Core/RCTAnimationHeaders (0.61.5):
83
+    - Folly (= 2018.10.22.00)
84
+    - glog
85
+    - React-Core/Default
86
+    - React-cxxreact (= 0.61.5)
87
+    - React-jsi (= 0.61.5)
88
+    - React-jsiexecutor (= 0.61.5)
89
+    - Yoga
90
+  - React-Core/RCTBlobHeaders (0.61.5):
91
+    - Folly (= 2018.10.22.00)
92
+    - glog
93
+    - React-Core/Default
94
+    - React-cxxreact (= 0.61.5)
95
+    - React-jsi (= 0.61.5)
96
+    - React-jsiexecutor (= 0.61.5)
97
+    - Yoga
98
+  - React-Core/RCTImageHeaders (0.61.5):
99
+    - Folly (= 2018.10.22.00)
100
+    - glog
101
+    - React-Core/Default
102
+    - React-cxxreact (= 0.61.5)
103
+    - React-jsi (= 0.61.5)
104
+    - React-jsiexecutor (= 0.61.5)
105
+    - Yoga
106
+  - React-Core/RCTLinkingHeaders (0.61.5):
107
+    - Folly (= 2018.10.22.00)
108
+    - glog
109
+    - React-Core/Default
110
+    - React-cxxreact (= 0.61.5)
111
+    - React-jsi (= 0.61.5)
112
+    - React-jsiexecutor (= 0.61.5)
113
+    - Yoga
114
+  - React-Core/RCTNetworkHeaders (0.61.5):
115
+    - Folly (= 2018.10.22.00)
116
+    - glog
117
+    - React-Core/Default
118
+    - React-cxxreact (= 0.61.5)
119
+    - React-jsi (= 0.61.5)
120
+    - React-jsiexecutor (= 0.61.5)
121
+    - Yoga
122
+  - React-Core/RCTSettingsHeaders (0.61.5):
123
+    - Folly (= 2018.10.22.00)
124
+    - glog
125
+    - React-Core/Default
126
+    - React-cxxreact (= 0.61.5)
127
+    - React-jsi (= 0.61.5)
128
+    - React-jsiexecutor (= 0.61.5)
129
+    - Yoga
130
+  - React-Core/RCTTextHeaders (0.61.5):
131
+    - Folly (= 2018.10.22.00)
132
+    - glog
133
+    - React-Core/Default
134
+    - React-cxxreact (= 0.61.5)
135
+    - React-jsi (= 0.61.5)
136
+    - React-jsiexecutor (= 0.61.5)
137
+    - Yoga
138
+  - React-Core/RCTVibrationHeaders (0.61.5):
139
+    - Folly (= 2018.10.22.00)
140
+    - glog
141
+    - React-Core/Default
142
+    - React-cxxreact (= 0.61.5)
143
+    - React-jsi (= 0.61.5)
144
+    - React-jsiexecutor (= 0.61.5)
145
+    - Yoga
146
+  - React-Core/RCTWebSocket (0.61.5):
147
+    - Folly (= 2018.10.22.00)
148
+    - glog
149
+    - React-Core/Default (= 0.61.5)
150
+    - React-cxxreact (= 0.61.5)
151
+    - React-jsi (= 0.61.5)
152
+    - React-jsiexecutor (= 0.61.5)
153
+    - Yoga
154
+  - React-CoreModules (0.61.5):
155
+    - FBReactNativeSpec (= 0.61.5)
156
+    - Folly (= 2018.10.22.00)
157
+    - RCTTypeSafety (= 0.61.5)
158
+    - React-Core/CoreModulesHeaders (= 0.61.5)
159
+    - React-RCTImage (= 0.61.5)
160
+    - ReactCommon/turbomodule/core (= 0.61.5)
161
+  - React-cxxreact (0.61.5):
162
+    - boost-for-react-native (= 1.63.0)
163
+    - DoubleConversion
164
+    - Folly (= 2018.10.22.00)
165
+    - glog
166
+    - React-jsinspector (= 0.61.5)
167
+  - React-jsi (0.61.5):
168
+    - boost-for-react-native (= 1.63.0)
169
+    - DoubleConversion
170
+    - Folly (= 2018.10.22.00)
171
+    - glog
172
+    - React-jsi/Default (= 0.61.5)
173
+  - React-jsi/Default (0.61.5):
174
+    - boost-for-react-native (= 1.63.0)
175
+    - DoubleConversion
176
+    - Folly (= 2018.10.22.00)
177
+    - glog
178
+  - React-jsiexecutor (0.61.5):
179
+    - DoubleConversion
180
+    - Folly (= 2018.10.22.00)
181
+    - glog
182
+    - React-cxxreact (= 0.61.5)
183
+    - React-jsi (= 0.61.5)
184
+  - React-jsinspector (0.61.5)
185
+  - react-native-webview (8.0.3):
186
+    - React
187
+  - React-RCTActionSheet (0.61.5):
188
+    - React-Core/RCTActionSheetHeaders (= 0.61.5)
189
+  - React-RCTAnimation (0.61.5):
190
+    - React-Core/RCTAnimationHeaders (= 0.61.5)
191
+  - React-RCTBlob (0.61.5):
192
+    - React-Core/RCTBlobHeaders (= 0.61.5)
193
+    - React-Core/RCTWebSocket (= 0.61.5)
194
+    - React-jsi (= 0.61.5)
195
+    - React-RCTNetwork (= 0.61.5)
196
+  - React-RCTImage (0.61.5):
197
+    - React-Core/RCTImageHeaders (= 0.61.5)
198
+    - React-RCTNetwork (= 0.61.5)
199
+  - React-RCTLinking (0.61.5):
200
+    - React-Core/RCTLinkingHeaders (= 0.61.5)
201
+  - React-RCTNetwork (0.61.5):
202
+    - React-Core/RCTNetworkHeaders (= 0.61.5)
203
+  - React-RCTSettings (0.61.5):
204
+    - React-Core/RCTSettingsHeaders (= 0.61.5)
205
+  - React-RCTText (0.61.5):
206
+    - React-Core/RCTTextHeaders (= 0.61.5)
207
+  - React-RCTVibration (0.61.5):
208
+    - React-Core/RCTVibrationHeaders (= 0.61.5)
209
+  - ReactCommon/jscallinvoker (0.61.5):
210
+    - DoubleConversion
211
+    - Folly (= 2018.10.22.00)
212
+    - glog
213
+    - React-cxxreact (= 0.61.5)
214
+  - ReactCommon/turbomodule/core (0.61.5):
215
+    - DoubleConversion
216
+    - Folly (= 2018.10.22.00)
217
+    - glog
218
+    - React-Core (= 0.61.5)
219
+    - React-cxxreact (= 0.61.5)
220
+    - React-jsi (= 0.61.5)
221
+    - ReactCommon/jscallinvoker (= 0.61.5)
222
+  - Yoga (1.14.0)
223
+
224
+DEPENDENCIES:
225
+  - DoubleConversion (from `../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
226
+  - FBLazyVector (from `../../node_modules/react-native/Libraries/FBLazyVector`)
227
+  - FBReactNativeSpec (from `../../node_modules/react-native/Libraries/FBReactNativeSpec`)
228
+  - Folly (from `../../node_modules/react-native/third-party-podspecs/Folly.podspec`)
229
+  - glog (from `../../node_modules/react-native/third-party-podspecs/glog.podspec`)
230
+  - RCTRequired (from `../../node_modules/react-native/Libraries/RCTRequired`)
231
+  - RCTTypeSafety (from `../../node_modules/react-native/Libraries/TypeSafety`)
232
+  - React (from `../../node_modules/react-native/`)
233
+  - React-Core (from `../../node_modules/react-native/`)
234
+  - React-Core/DevSupport (from `../../node_modules/react-native/`)
235
+  - React-Core/RCTWebSocket (from `../../node_modules/react-native/`)
236
+  - React-CoreModules (from `../../node_modules/react-native/React/CoreModules`)
237
+  - React-cxxreact (from `../../node_modules/react-native/ReactCommon/cxxreact`)
238
+  - React-jsi (from `../../node_modules/react-native/ReactCommon/jsi`)
239
+  - React-jsiexecutor (from `../../node_modules/react-native/ReactCommon/jsiexecutor`)
240
+  - React-jsinspector (from `../../node_modules/react-native/ReactCommon/jsinspector`)
241
+  - react-native-webview (from `../..`)
242
+  - React-RCTActionSheet (from `../../node_modules/react-native/Libraries/ActionSheetIOS`)
243
+  - React-RCTAnimation (from `../../node_modules/react-native/Libraries/NativeAnimation`)
244
+  - React-RCTBlob (from `../../node_modules/react-native/Libraries/Blob`)
245
+  - React-RCTImage (from `../../node_modules/react-native/Libraries/Image`)
246
+  - React-RCTLinking (from `../../node_modules/react-native/Libraries/LinkingIOS`)
247
+  - React-RCTNetwork (from `../../node_modules/react-native/Libraries/Network`)
248
+  - React-RCTSettings (from `../../node_modules/react-native/Libraries/Settings`)
249
+  - React-RCTText (from `../../node_modules/react-native/Libraries/Text`)
250
+  - React-RCTVibration (from `../../node_modules/react-native/Libraries/Vibration`)
251
+  - ReactCommon/jscallinvoker (from `../../node_modules/react-native/ReactCommon`)
252
+  - ReactCommon/turbomodule/core (from `../../node_modules/react-native/ReactCommon`)
253
+  - Yoga (from `../../node_modules/react-native/ReactCommon/yoga`)
254
+
255
+SPEC REPOS:
256
+  trunk:
257
+    - boost-for-react-native
258
+
259
+EXTERNAL SOURCES:
260
+  DoubleConversion:
261
+    :podspec: "../../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
262
+  FBLazyVector:
263
+    :path: "../../node_modules/react-native/Libraries/FBLazyVector"
264
+  FBReactNativeSpec:
265
+    :path: "../../node_modules/react-native/Libraries/FBReactNativeSpec"
266
+  Folly:
267
+    :podspec: "../../node_modules/react-native/third-party-podspecs/Folly.podspec"
268
+  glog:
269
+    :podspec: "../../node_modules/react-native/third-party-podspecs/glog.podspec"
270
+  RCTRequired:
271
+    :path: "../../node_modules/react-native/Libraries/RCTRequired"
272
+  RCTTypeSafety:
273
+    :path: "../../node_modules/react-native/Libraries/TypeSafety"
274
+  React:
275
+    :path: "../../node_modules/react-native/"
276
+  React-Core:
277
+    :path: "../../node_modules/react-native/"
278
+  React-CoreModules:
279
+    :path: "../../node_modules/react-native/React/CoreModules"
280
+  React-cxxreact:
281
+    :path: "../../node_modules/react-native/ReactCommon/cxxreact"
282
+  React-jsi:
283
+    :path: "../../node_modules/react-native/ReactCommon/jsi"
284
+  React-jsiexecutor:
285
+    :path: "../../node_modules/react-native/ReactCommon/jsiexecutor"
286
+  React-jsinspector:
287
+    :path: "../../node_modules/react-native/ReactCommon/jsinspector"
288
+  react-native-webview:
289
+    :path: "../.."
290
+  React-RCTActionSheet:
291
+    :path: "../../node_modules/react-native/Libraries/ActionSheetIOS"
292
+  React-RCTAnimation:
293
+    :path: "../../node_modules/react-native/Libraries/NativeAnimation"
294
+  React-RCTBlob:
295
+    :path: "../../node_modules/react-native/Libraries/Blob"
296
+  React-RCTImage:
297
+    :path: "../../node_modules/react-native/Libraries/Image"
298
+  React-RCTLinking:
299
+    :path: "../../node_modules/react-native/Libraries/LinkingIOS"
300
+  React-RCTNetwork:
301
+    :path: "../../node_modules/react-native/Libraries/Network"
302
+  React-RCTSettings:
303
+    :path: "../../node_modules/react-native/Libraries/Settings"
304
+  React-RCTText:
305
+    :path: "../../node_modules/react-native/Libraries/Text"
306
+  React-RCTVibration:
307
+    :path: "../../node_modules/react-native/Libraries/Vibration"
308
+  ReactCommon:
309
+    :path: "../../node_modules/react-native/ReactCommon"
310
+  Yoga:
311
+    :path: "../../node_modules/react-native/ReactCommon/yoga"
312
+
313
+SPEC CHECKSUMS:
314
+  boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
315
+  DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
316
+  FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
317
+  FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
318
+  Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
319
+  glog: 1f3da668190260b06b429bb211bfbee5cd790c28
320
+  RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
321
+  RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
322
+  React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78
323
+  React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04
324
+  React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb
325
+  React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7
326
+  React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7
327
+  React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386
328
+  React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0
329
+  react-native-webview: 57cdcf9981594a1a7de36ecfe7f079379543ef1f
330
+  React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76
331
+  React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360
332
+  React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72
333
+  React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e
334
+  React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5
335
+  React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a
336
+  React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640
337
+  React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe
338
+  React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad
339
+  ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd
340
+  Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
341
+
342
+PODFILE CHECKSUM: 2b0bdb79b803eefe541da6f9be6b06e99063bbfd
343
+
344
+COCOAPODS: 1.8.4

+ 53
- 0
example/ios/example-tvOS/Info.plist View File

@@ -0,0 +1,53 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>CFBundleDevelopmentRegion</key>
6
+	<string>en</string>
7
+	<key>CFBundleExecutable</key>
8
+	<string>$(EXECUTABLE_NAME)</string>
9
+	<key>CFBundleIdentifier</key>
10
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+	<key>CFBundleInfoDictionaryVersion</key>
12
+	<string>6.0</string>
13
+	<key>CFBundleName</key>
14
+	<string>$(PRODUCT_NAME)</string>
15
+	<key>CFBundlePackageType</key>
16
+	<string>APPL</string>
17
+	<key>CFBundleShortVersionString</key>
18
+	<string>1.0</string>
19
+	<key>CFBundleSignature</key>
20
+	<string>????</string>
21
+	<key>CFBundleVersion</key>
22
+	<string>1</string>
23
+	<key>LSRequiresIPhoneOS</key>
24
+	<true/>
25
+	<key>NSAppTransportSecurity</key>
26
+	<dict>
27
+		<key>NSExceptionDomains</key>
28
+		<dict>
29
+			<key>localhost</key>
30
+			<dict>
31
+				<key>NSExceptionAllowsInsecureHTTPLoads</key>
32
+				<true/>
33
+			</dict>
34
+		</dict>
35
+	</dict>
36
+	<key>NSLocationWhenInUseUsageDescription</key>
37
+	<string></string>
38
+	<key>UILaunchStoryboardName</key>
39
+	<string>LaunchScreen</string>
40
+	<key>UIRequiredDeviceCapabilities</key>
41
+	<array>
42
+		<string>armv7</string>
43
+	</array>
44
+	<key>UISupportedInterfaceOrientations</key>
45
+	<array>
46
+		<string>UIInterfaceOrientationPortrait</string>
47
+		<string>UIInterfaceOrientationLandscapeLeft</string>
48
+		<string>UIInterfaceOrientationLandscapeRight</string>
49
+	</array>
50
+	<key>UIViewControllerBasedStatusBarAppearance</key>
51
+	<false/>
52
+</dict>
53
+</plist>

+ 24
- 0
example/ios/example-tvOSTests/Info.plist View File

@@ -0,0 +1,24 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>CFBundleDevelopmentRegion</key>
6
+	<string>en</string>
7
+	<key>CFBundleExecutable</key>
8
+	<string>$(EXECUTABLE_NAME)</string>
9
+	<key>CFBundleIdentifier</key>
10
+	<string>org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)</string>
11
+	<key>CFBundleInfoDictionaryVersion</key>
12
+	<string>6.0</string>
13
+	<key>CFBundleName</key>
14
+	<string>$(PRODUCT_NAME)</string>
15
+	<key>CFBundlePackageType</key>
16
+	<string>BNDL</string>
17
+	<key>CFBundleShortVersionString</key>
18
+	<string>1.0</string>
19
+	<key>CFBundleSignature</key>
20
+	<string>????</string>
21
+	<key>CFBundleVersion</key>
22
+	<string>1</string>
23
+</dict>
24
+</plist>

+ 925
- 0
example/ios/example.xcodeproj/project.pbxproj View File

@@ -0,0 +1,925 @@
1
+// !$*UTF8*$!
2
+{
3
+	archiveVersion = 1;
4
+	classes = {
5
+	};
6
+	objectVersion = 46;
7
+	objects = {
8
+
9
+/* Begin PBXBuildFile section */
10
+		00E356F31AD99517003FC87E /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
11
+		13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
12
+		13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
13
+		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
14
+		13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
15
+		2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
16
+		2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
17
+		2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
18
+		2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* exampleTests.m */; };
19
+		A08B6FFAAF3CA0F03003FEB0 /* libPods-example-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5544B310E076E06B9E2EFF4C /* libPods-example-tvOSTests.a */; };
20
+		C7D826CF866C25BE421302B6 /* libPods-example-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F9A8A9F158876EC099CFA57A /* libPods-example-tvOS.a */; };
21
+		D0E3313DFCE78BFCB650F812 /* libPods-exampleTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CB301596D47BBAD9E9C0A45A /* libPods-exampleTests.a */; };
22
+		E719A6E171791CD8906B3D55 /* libPods-example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 917A19FC1EBE6E8B85FE404D /* libPods-example.a */; };
23
+/* End PBXBuildFile section */
24
+
25
+/* Begin PBXContainerItemProxy section */
26
+		00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
27
+			isa = PBXContainerItemProxy;
28
+			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
29
+			proxyType = 1;
30
+			remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
31
+			remoteInfo = example;
32
+		};
33
+		2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
34
+			isa = PBXContainerItemProxy;
35
+			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
36
+			proxyType = 1;
37
+			remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
38
+			remoteInfo = "example-tvOS";
39
+		};
40
+/* End PBXContainerItemProxy section */
41
+
42
+/* Begin PBXFileReference section */
43
+		008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
44
+		00E356EE1AD99517003FC87E /* exampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = exampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45
+		00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
46
+		00E356F21AD99517003FC87E /* exampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = exampleTests.m; sourceTree = "<group>"; };
47
+		13B07F961A680F5B00A75B9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
48
+		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = example/AppDelegate.h; sourceTree = "<group>"; };
49
+		13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = example/AppDelegate.m; sourceTree = "<group>"; };
50
+		13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
51
+		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = example/Images.xcassets; sourceTree = "<group>"; };
52
+		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = example/Info.plist; sourceTree = "<group>"; };
53
+		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = example/main.m; sourceTree = "<group>"; };
54
+		2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "example-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
55
+		2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "example-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
56
+		41B6A4553C4F552488B69B01 /* Pods-exampleTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampleTests.release.xcconfig"; path = "Target Support Files/Pods-exampleTests/Pods-exampleTests.release.xcconfig"; sourceTree = "<group>"; };
57
+		4372A2FD2D749DE5C9FD8D3E /* Pods-example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.debug.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.debug.xcconfig"; sourceTree = "<group>"; };
58
+		4FDD34C422D711AC8A7B10A7 /* Pods-example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example.release.xcconfig"; path = "Target Support Files/Pods-example/Pods-example.release.xcconfig"; sourceTree = "<group>"; };
59
+		5544B310E076E06B9E2EFF4C /* libPods-example-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
60
+		59A4F27CAD1B7EFE80917453 /* Pods-example-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.release.xcconfig"; sourceTree = "<group>"; };
61
+		775F6B7492793F5DB7ECE95B /* Pods-example-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.debug.xcconfig"; sourceTree = "<group>"; };
62
+		8A20011E75A0AD2EC5C6EAE9 /* Pods-exampleTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-exampleTests.debug.xcconfig"; path = "Target Support Files/Pods-exampleTests/Pods-exampleTests.debug.xcconfig"; sourceTree = "<group>"; };
63
+		917A19FC1EBE6E8B85FE404D /* libPods-example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
64
+		CB301596D47BBAD9E9C0A45A /* libPods-exampleTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-exampleTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
65
+		ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
66
+		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; };
67
+		EDF80BE96CF92848F4E926EA /* Pods-example-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOS.release.xcconfig"; path = "Target Support Files/Pods-example-tvOS/Pods-example-tvOS.release.xcconfig"; sourceTree = "<group>"; };
68
+		F67BC8D73DE103BA10A5488D /* Pods-example-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-example-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-example-tvOSTests/Pods-example-tvOSTests.debug.xcconfig"; sourceTree = "<group>"; };
69
+		F9A8A9F158876EC099CFA57A /* libPods-example-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-example-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
70
+/* End PBXFileReference section */
71
+
72
+/* Begin PBXFrameworksBuildPhase section */
73
+		00E356EB1AD99517003FC87E /* Frameworks */ = {
74
+			isa = PBXFrameworksBuildPhase;
75
+			buildActionMask = 2147483647;
76
+			files = (
77
+				D0E3313DFCE78BFCB650F812 /* libPods-exampleTests.a in Frameworks */,
78
+			);
79
+			runOnlyForDeploymentPostprocessing = 0;
80
+		};
81
+		13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
82
+			isa = PBXFrameworksBuildPhase;
83
+			buildActionMask = 2147483647;
84
+			files = (
85
+				E719A6E171791CD8906B3D55 /* libPods-example.a in Frameworks */,
86
+			);
87
+			runOnlyForDeploymentPostprocessing = 0;
88
+		};
89
+		2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
90
+			isa = PBXFrameworksBuildPhase;
91
+			buildActionMask = 2147483647;
92
+			files = (
93
+				C7D826CF866C25BE421302B6 /* libPods-example-tvOS.a in Frameworks */,
94
+			);
95
+			runOnlyForDeploymentPostprocessing = 0;
96
+		};
97
+		2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
98
+			isa = PBXFrameworksBuildPhase;
99
+			buildActionMask = 2147483647;
100
+			files = (
101
+				A08B6FFAAF3CA0F03003FEB0 /* libPods-example-tvOSTests.a in Frameworks */,
102
+			);
103
+			runOnlyForDeploymentPostprocessing = 0;
104
+		};
105
+/* End PBXFrameworksBuildPhase section */
106
+
107
+/* Begin PBXGroup section */
108
+		00E356EF1AD99517003FC87E /* exampleTests */ = {
109
+			isa = PBXGroup;
110
+			children = (
111
+				00E356F21AD99517003FC87E /* exampleTests.m */,
112
+				00E356F01AD99517003FC87E /* Supporting Files */,
113
+			);
114
+			path = exampleTests;
115
+			sourceTree = "<group>";
116
+		};
117
+		00E356F01AD99517003FC87E /* Supporting Files */ = {
118
+			isa = PBXGroup;
119
+			children = (
120
+				00E356F11AD99517003FC87E /* Info.plist */,
121
+			);
122
+			name = "Supporting Files";
123
+			sourceTree = "<group>";
124
+		};
125
+		13B07FAE1A68108700A75B9A /* example */ = {
126
+			isa = PBXGroup;
127
+			children = (
128
+				008F07F21AC5B25A0029DE68 /* main.jsbundle */,
129
+				13B07FAF1A68108700A75B9A /* AppDelegate.h */,
130
+				13B07FB01A68108700A75B9A /* AppDelegate.m */,
131
+				13B07FB51A68108700A75B9A /* Images.xcassets */,
132
+				13B07FB61A68108700A75B9A /* Info.plist */,
133
+				13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
134
+				13B07FB71A68108700A75B9A /* main.m */,
135
+			);
136
+			name = example;
137
+			sourceTree = "<group>";
138
+		};
139
+		2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
140
+			isa = PBXGroup;
141
+			children = (
142
+				ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
143
+				ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
144
+				917A19FC1EBE6E8B85FE404D /* libPods-example.a */,
145
+				F9A8A9F158876EC099CFA57A /* libPods-example-tvOS.a */,
146
+				5544B310E076E06B9E2EFF4C /* libPods-example-tvOSTests.a */,
147
+				CB301596D47BBAD9E9C0A45A /* libPods-exampleTests.a */,
148
+			);
149
+			name = Frameworks;
150
+			sourceTree = "<group>";
151
+		};
152
+		832341AE1AAA6A7D00B99B32 /* Libraries */ = {
153
+			isa = PBXGroup;
154
+			children = (
155
+			);
156
+			name = Libraries;
157
+			sourceTree = "<group>";
158
+		};
159
+		83CBB9F61A601CBA00E9B192 = {
160
+			isa = PBXGroup;
161
+			children = (
162
+				13B07FAE1A68108700A75B9A /* example */,
163
+				832341AE1AAA6A7D00B99B32 /* Libraries */,
164
+				00E356EF1AD99517003FC87E /* exampleTests */,
165
+				83CBBA001A601CBA00E9B192 /* Products */,
166
+				2D16E6871FA4F8E400B85C8A /* Frameworks */,
167
+				CCBCEDC2885B5181A2E42CE7 /* Pods */,
168
+			);
169
+			indentWidth = 2;
170
+			sourceTree = "<group>";
171
+			tabWidth = 2;
172
+			usesTabs = 0;
173
+		};
174
+		83CBBA001A601CBA00E9B192 /* Products */ = {
175
+			isa = PBXGroup;
176
+			children = (
177
+				13B07F961A680F5B00A75B9A /* example.app */,
178
+				00E356EE1AD99517003FC87E /* exampleTests.xctest */,
179
+				2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */,
180
+				2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */,
181
+			);
182
+			name = Products;
183
+			sourceTree = "<group>";
184
+		};
185
+		CCBCEDC2885B5181A2E42CE7 /* Pods */ = {
186
+			isa = PBXGroup;
187
+			children = (
188
+				4372A2FD2D749DE5C9FD8D3E /* Pods-example.debug.xcconfig */,
189
+				4FDD34C422D711AC8A7B10A7 /* Pods-example.release.xcconfig */,
190
+				775F6B7492793F5DB7ECE95B /* Pods-example-tvOS.debug.xcconfig */,
191
+				EDF80BE96CF92848F4E926EA /* Pods-example-tvOS.release.xcconfig */,
192
+				F67BC8D73DE103BA10A5488D /* Pods-example-tvOSTests.debug.xcconfig */,
193
+				59A4F27CAD1B7EFE80917453 /* Pods-example-tvOSTests.release.xcconfig */,
194
+				8A20011E75A0AD2EC5C6EAE9 /* Pods-exampleTests.debug.xcconfig */,
195
+				41B6A4553C4F552488B69B01 /* Pods-exampleTests.release.xcconfig */,
196
+			);
197
+			path = Pods;
198
+			sourceTree = "<group>";
199
+		};
200
+/* End PBXGroup section */
201
+
202
+/* Begin PBXNativeTarget section */
203
+		00E356ED1AD99517003FC87E /* exampleTests */ = {
204
+			isa = PBXNativeTarget;
205
+			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */;
206
+			buildPhases = (
207
+				A2264F1CFC0047F3C8C5D43D /* [CP] Check Pods Manifest.lock */,
208
+				00E356EA1AD99517003FC87E /* Sources */,
209
+				00E356EB1AD99517003FC87E /* Frameworks */,
210
+				00E356EC1AD99517003FC87E /* Resources */,
211
+			);
212
+			buildRules = (
213
+			);
214
+			dependencies = (
215
+				00E356F51AD99517003FC87E /* PBXTargetDependency */,
216
+			);
217
+			name = exampleTests;
218
+			productName = exampleTests;
219
+			productReference = 00E356EE1AD99517003FC87E /* exampleTests.xctest */;
220
+			productType = "com.apple.product-type.bundle.unit-test";
221
+		};
222
+		13B07F861A680F5B00A75B9A /* example */ = {
223
+			isa = PBXNativeTarget;
224
+			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */;
225
+			buildPhases = (
226
+				6D39E19069EEC1F18C65E89E /* [CP] Check Pods Manifest.lock */,
227
+				FD10A7F022414F080027D42C /* Start Packager */,
228
+				13B07F871A680F5B00A75B9A /* Sources */,
229
+				13B07F8C1A680F5B00A75B9A /* Frameworks */,
230
+				13B07F8E1A680F5B00A75B9A /* Resources */,
231
+				00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
232
+			);
233
+			buildRules = (
234
+			);
235
+			dependencies = (
236
+			);
237
+			name = example;
238
+			productName = example;
239
+			productReference = 13B07F961A680F5B00A75B9A /* example.app */;
240
+			productType = "com.apple.product-type.application";
241
+		};
242
+		2D02E47A1E0B4A5D006451C7 /* example-tvOS */ = {
243
+			isa = PBXNativeTarget;
244
+			buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */;
245
+			buildPhases = (
246
+				B980633124DB020AB7EC55E3 /* [CP] Check Pods Manifest.lock */,
247
+				FD10A7F122414F3F0027D42C /* Start Packager */,
248
+				2D02E4771E0B4A5D006451C7 /* Sources */,
249
+				2D02E4781E0B4A5D006451C7 /* Frameworks */,
250
+				2D02E4791E0B4A5D006451C7 /* Resources */,
251
+				2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
252
+			);
253
+			buildRules = (
254
+			);
255
+			dependencies = (
256
+			);
257
+			name = "example-tvOS";
258
+			productName = "example-tvOS";
259
+			productReference = 2D02E47B1E0B4A5D006451C7 /* example-tvOS.app */;
260
+			productType = "com.apple.product-type.application";
261
+		};
262
+		2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */ = {
263
+			isa = PBXNativeTarget;
264
+			buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */;
265
+			buildPhases = (
266
+				56202D3091BCA37A2C594528 /* [CP] Check Pods Manifest.lock */,
267
+				2D02E48C1E0B4A5D006451C7 /* Sources */,
268
+				2D02E48D1E0B4A5D006451C7 /* Frameworks */,
269
+				2D02E48E1E0B4A5D006451C7 /* Resources */,
270
+			);
271
+			buildRules = (
272
+			);
273
+			dependencies = (
274
+				2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
275
+			);
276
+			name = "example-tvOSTests";
277
+			productName = "example-tvOSTests";
278
+			productReference = 2D02E4901E0B4A5D006451C7 /* example-tvOSTests.xctest */;
279
+			productType = "com.apple.product-type.bundle.unit-test";
280
+		};
281
+/* End PBXNativeTarget section */
282
+
283
+/* Begin PBXProject section */
284
+		83CBB9F71A601CBA00E9B192 /* Project object */ = {
285
+			isa = PBXProject;
286
+			attributes = {
287
+				LastUpgradeCheck = 0940;
288
+				ORGANIZATIONNAME = Facebook;
289
+				TargetAttributes = {
290
+					00E356ED1AD99517003FC87E = {
291
+						CreatedOnToolsVersion = 6.2;
292
+						TestTargetID = 13B07F861A680F5B00A75B9A;
293
+					};
294
+					2D02E47A1E0B4A5D006451C7 = {
295
+						CreatedOnToolsVersion = 8.2.1;
296
+						ProvisioningStyle = Automatic;
297
+					};
298
+					2D02E48F1E0B4A5D006451C7 = {
299
+						CreatedOnToolsVersion = 8.2.1;
300
+						ProvisioningStyle = Automatic;
301
+						TestTargetID = 2D02E47A1E0B4A5D006451C7;
302
+					};
303
+				};
304
+			};
305
+			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */;
306
+			compatibilityVersion = "Xcode 3.2";
307
+			developmentRegion = English;
308
+			hasScannedForEncodings = 0;
309
+			knownRegions = (
310
+				English,
311
+				en,
312
+				Base,
313
+			);
314
+			mainGroup = 83CBB9F61A601CBA00E9B192;
315
+			productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
316
+			projectDirPath = "";
317
+			projectRoot = "";
318
+			targets = (
319
+				13B07F861A680F5B00A75B9A /* example */,
320
+				00E356ED1AD99517003FC87E /* exampleTests */,
321
+				2D02E47A1E0B4A5D006451C7 /* example-tvOS */,
322
+				2D02E48F1E0B4A5D006451C7 /* example-tvOSTests */,
323
+			);
324
+		};
325
+/* End PBXProject section */
326
+
327
+/* Begin PBXResourcesBuildPhase section */
328
+		00E356EC1AD99517003FC87E /* Resources */ = {
329
+			isa = PBXResourcesBuildPhase;
330
+			buildActionMask = 2147483647;
331
+			files = (
332
+			);
333
+			runOnlyForDeploymentPostprocessing = 0;
334
+		};
335
+		13B07F8E1A680F5B00A75B9A /* Resources */ = {
336
+			isa = PBXResourcesBuildPhase;
337
+			buildActionMask = 2147483647;
338
+			files = (
339
+				13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
340
+				13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
341
+			);
342
+			runOnlyForDeploymentPostprocessing = 0;
343
+		};
344
+		2D02E4791E0B4A5D006451C7 /* Resources */ = {
345
+			isa = PBXResourcesBuildPhase;
346
+			buildActionMask = 2147483647;
347
+			files = (
348
+				2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
349
+			);
350
+			runOnlyForDeploymentPostprocessing = 0;
351
+		};
352
+		2D02E48E1E0B4A5D006451C7 /* Resources */ = {
353
+			isa = PBXResourcesBuildPhase;
354
+			buildActionMask = 2147483647;
355
+			files = (
356
+			);
357
+			runOnlyForDeploymentPostprocessing = 0;
358
+		};
359
+/* End PBXResourcesBuildPhase section */
360
+
361
+/* Begin PBXShellScriptBuildPhase section */
362
+		00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
363
+			isa = PBXShellScriptBuildPhase;
364
+			buildActionMask = 2147483647;
365
+			files = (
366
+			);
367
+			inputPaths = (
368
+			);
369
+			name = "Bundle React Native code and images";
370
+			outputPaths = (
371
+			);
372
+			runOnlyForDeploymentPostprocessing = 0;
373
+			shellPath = /bin/sh;
374
+			shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/scripts/react-native-xcode.sh\n";
375
+		};
376
+		2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
377
+			isa = PBXShellScriptBuildPhase;
378
+			buildActionMask = 2147483647;
379
+			files = (
380
+			);
381
+			inputPaths = (
382
+			);
383
+			name = "Bundle React Native Code And Images";
384
+			outputPaths = (
385
+			);
386
+			runOnlyForDeploymentPostprocessing = 0;
387
+			shellPath = /bin/sh;
388
+			shellScript = "export NODE_BINARY=node\n../../node_modules/react-native/scripts/react-native-xcode.sh\n";
389
+		};
390
+		56202D3091BCA37A2C594528 /* [CP] Check Pods Manifest.lock */ = {
391
+			isa = PBXShellScriptBuildPhase;
392
+			buildActionMask = 2147483647;
393
+			files = (
394
+			);
395
+			inputFileListPaths = (
396
+			);
397
+			inputPaths = (
398
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
399
+				"${PODS_ROOT}/Manifest.lock",
400
+			);
401
+			name = "[CP] Check Pods Manifest.lock";
402
+			outputFileListPaths = (
403
+			);
404
+			outputPaths = (
405
+				"$(DERIVED_FILE_DIR)/Pods-example-tvOSTests-checkManifestLockResult.txt",
406
+			);
407
+			runOnlyForDeploymentPostprocessing = 0;
408
+			shellPath = /bin/sh;
409
+			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";
410
+			showEnvVarsInLog = 0;
411
+		};
412
+		6D39E19069EEC1F18C65E89E /* [CP] Check Pods Manifest.lock */ = {
413
+			isa = PBXShellScriptBuildPhase;
414
+			buildActionMask = 2147483647;
415
+			files = (
416
+			);
417
+			inputFileListPaths = (
418
+			);
419
+			inputPaths = (
420
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
421
+				"${PODS_ROOT}/Manifest.lock",
422
+			);
423
+			name = "[CP] Check Pods Manifest.lock";
424
+			outputFileListPaths = (
425
+			);
426
+			outputPaths = (
427
+				"$(DERIVED_FILE_DIR)/Pods-example-checkManifestLockResult.txt",
428
+			);
429
+			runOnlyForDeploymentPostprocessing = 0;
430
+			shellPath = /bin/sh;
431
+			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";
432
+			showEnvVarsInLog = 0;
433
+		};
434
+		A2264F1CFC0047F3C8C5D43D /* [CP] Check Pods Manifest.lock */ = {
435
+			isa = PBXShellScriptBuildPhase;
436
+			buildActionMask = 2147483647;
437
+			files = (
438
+			);
439
+			inputFileListPaths = (
440
+			);
441
+			inputPaths = (
442
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
443
+				"${PODS_ROOT}/Manifest.lock",
444
+			);
445
+			name = "[CP] Check Pods Manifest.lock";
446
+			outputFileListPaths = (
447
+			);
448
+			outputPaths = (
449
+				"$(DERIVED_FILE_DIR)/Pods-exampleTests-checkManifestLockResult.txt",
450
+			);
451
+			runOnlyForDeploymentPostprocessing = 0;
452
+			shellPath = /bin/sh;
453
+			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";
454
+			showEnvVarsInLog = 0;
455
+		};
456
+		B980633124DB020AB7EC55E3 /* [CP] Check Pods Manifest.lock */ = {
457
+			isa = PBXShellScriptBuildPhase;
458
+			buildActionMask = 2147483647;
459
+			files = (
460
+			);
461
+			inputFileListPaths = (
462
+			);
463
+			inputPaths = (
464
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
465
+				"${PODS_ROOT}/Manifest.lock",
466
+			);
467
+			name = "[CP] Check Pods Manifest.lock";
468
+			outputFileListPaths = (
469
+			);
470
+			outputPaths = (
471
+				"$(DERIVED_FILE_DIR)/Pods-example-tvOS-checkManifestLockResult.txt",
472
+			);
473
+			runOnlyForDeploymentPostprocessing = 0;
474
+			shellPath = /bin/sh;
475
+			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";
476
+			showEnvVarsInLog = 0;
477
+		};
478
+		FD10A7F022414F080027D42C /* Start Packager */ = {
479
+			isa = PBXShellScriptBuildPhase;
480
+			buildActionMask = 2147483647;
481
+			files = (
482
+			);
483
+			inputFileListPaths = (
484
+			);
485
+			inputPaths = (
486
+			);
487
+			name = "Start Packager";
488
+			outputFileListPaths = (
489
+			);
490
+			outputPaths = (
491
+			);
492
+			runOnlyForDeploymentPostprocessing = 0;
493
+			shellPath = /bin/sh;
494
+			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";
495
+			showEnvVarsInLog = 0;
496
+		};
497
+		FD10A7F122414F3F0027D42C /* Start Packager */ = {
498
+			isa = PBXShellScriptBuildPhase;
499
+			buildActionMask = 2147483647;
500
+			files = (
501
+			);
502
+			inputFileListPaths = (
503
+			);
504
+			inputPaths = (
505
+			);
506
+			name = "Start Packager";
507
+			outputFileListPaths = (
508
+			);
509
+			outputPaths = (
510
+			);
511
+			runOnlyForDeploymentPostprocessing = 0;
512
+			shellPath = /bin/sh;
513
+			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";
514
+			showEnvVarsInLog = 0;
515
+		};
516
+/* End PBXShellScriptBuildPhase section */
517
+
518
+/* Begin PBXSourcesBuildPhase section */
519
+		00E356EA1AD99517003FC87E /* Sources */ = {
520
+			isa = PBXSourcesBuildPhase;
521
+			buildActionMask = 2147483647;
522
+			files = (
523
+				00E356F31AD99517003FC87E /* exampleTests.m in Sources */,
524
+			);
525
+			runOnlyForDeploymentPostprocessing = 0;
526
+		};
527
+		13B07F871A680F5B00A75B9A /* Sources */ = {
528
+			isa = PBXSourcesBuildPhase;
529
+			buildActionMask = 2147483647;
530
+			files = (
531
+				13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
532
+				13B07FC11A68108700A75B9A /* main.m in Sources */,
533
+			);
534
+			runOnlyForDeploymentPostprocessing = 0;
535
+		};
536
+		2D02E4771E0B4A5D006451C7 /* Sources */ = {
537
+			isa = PBXSourcesBuildPhase;
538
+			buildActionMask = 2147483647;
539
+			files = (
540
+				2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
541
+				2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
542
+			);
543
+			runOnlyForDeploymentPostprocessing = 0;
544
+		};
545
+		2D02E48C1E0B4A5D006451C7 /* Sources */ = {
546
+			isa = PBXSourcesBuildPhase;
547
+			buildActionMask = 2147483647;
548
+			files = (
549
+				2DCD954D1E0B4F2C00145EB5 /* exampleTests.m in Sources */,
550
+			);
551
+			runOnlyForDeploymentPostprocessing = 0;
552
+		};
553
+/* End PBXSourcesBuildPhase section */
554
+
555
+/* Begin PBXTargetDependency section */
556
+		00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
557
+			isa = PBXTargetDependency;
558
+			target = 13B07F861A680F5B00A75B9A /* example */;
559
+			targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
560
+		};
561
+		2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
562
+			isa = PBXTargetDependency;
563
+			target = 2D02E47A1E0B4A5D006451C7 /* example-tvOS */;
564
+			targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
565
+		};
566
+/* End PBXTargetDependency section */
567
+
568
+/* Begin PBXVariantGroup section */
569
+		13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
570
+			isa = PBXVariantGroup;
571
+			children = (
572
+				13B07FB21A68108700A75B9A /* Base */,
573
+			);
574
+			name = LaunchScreen.xib;
575
+			path = example;
576
+			sourceTree = "<group>";
577
+		};
578
+/* End PBXVariantGroup section */
579
+
580
+/* Begin XCBuildConfiguration section */
581
+		00E356F61AD99517003FC87E /* Debug */ = {
582
+			isa = XCBuildConfiguration;
583
+			baseConfigurationReference = 8A20011E75A0AD2EC5C6EAE9 /* Pods-exampleTests.debug.xcconfig */;
584
+			buildSettings = {
585
+				BUNDLE_LOADER = "$(TEST_HOST)";
586
+				GCC_PREPROCESSOR_DEFINITIONS = (
587
+					"DEBUG=1",
588
+					"$(inherited)",
589
+				);
590
+				INFOPLIST_FILE = exampleTests/Info.plist;
591
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
592
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
593
+				OTHER_LDFLAGS = (
594
+					"-ObjC",
595
+					"-lc++",
596
+					"$(inherited)",
597
+				);
598
+				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
599
+				PRODUCT_NAME = "$(TARGET_NAME)";
600
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
601
+			};
602
+			name = Debug;
603
+		};
604
+		00E356F71AD99517003FC87E /* Release */ = {
605
+			isa = XCBuildConfiguration;
606
+			baseConfigurationReference = 41B6A4553C4F552488B69B01 /* Pods-exampleTests.release.xcconfig */;
607
+			buildSettings = {
608
+				BUNDLE_LOADER = "$(TEST_HOST)";
609
+				COPY_PHASE_STRIP = NO;
610
+				INFOPLIST_FILE = exampleTests/Info.plist;
611
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
612
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
613
+				OTHER_LDFLAGS = (
614
+					"-ObjC",
615
+					"-lc++",
616
+					"$(inherited)",
617
+				);
618
+				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
619
+				PRODUCT_NAME = "$(TARGET_NAME)";
620
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example.app/example";
621
+			};
622
+			name = Release;
623
+		};
624
+		13B07F941A680F5B00A75B9A /* Debug */ = {
625
+			isa = XCBuildConfiguration;
626
+			baseConfigurationReference = 4372A2FD2D749DE5C9FD8D3E /* Pods-example.debug.xcconfig */;
627
+			buildSettings = {
628
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
629
+				CURRENT_PROJECT_VERSION = 1;
630
+				DEAD_CODE_STRIPPING = NO;
631
+				INFOPLIST_FILE = example/Info.plist;
632
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
633
+				OTHER_LDFLAGS = (
634
+					"$(inherited)",
635
+					"-ObjC",
636
+					"-lc++",
637
+				);
638
+				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
639
+				PRODUCT_NAME = example;
640
+				VERSIONING_SYSTEM = "apple-generic";
641
+			};
642
+			name = Debug;
643
+		};
644
+		13B07F951A680F5B00A75B9A /* Release */ = {
645
+			isa = XCBuildConfiguration;
646
+			baseConfigurationReference = 4FDD34C422D711AC8A7B10A7 /* Pods-example.release.xcconfig */;
647
+			buildSettings = {
648
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
649
+				CURRENT_PROJECT_VERSION = 1;
650
+				INFOPLIST_FILE = example/Info.plist;
651
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
652
+				OTHER_LDFLAGS = (
653
+					"$(inherited)",
654
+					"-ObjC",
655
+					"-lc++",
656
+				);
657
+				PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)";
658
+				PRODUCT_NAME = example;
659
+				VERSIONING_SYSTEM = "apple-generic";
660
+			};
661
+			name = Release;
662
+		};
663
+		2D02E4971E0B4A5E006451C7 /* Debug */ = {
664
+			isa = XCBuildConfiguration;
665
+			baseConfigurationReference = 775F6B7492793F5DB7ECE95B /* Pods-example-tvOS.debug.xcconfig */;
666
+			buildSettings = {
667
+				ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
668
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
669
+				CLANG_ANALYZER_NONNULL = YES;
670
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
671
+				CLANG_WARN_INFINITE_RECURSION = YES;
672
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
673
+				DEBUG_INFORMATION_FORMAT = dwarf;
674
+				ENABLE_TESTABILITY = YES;
675
+				GCC_NO_COMMON_BLOCKS = YES;
676
+				INFOPLIST_FILE = "example-tvOS/Info.plist";
677
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
678
+				OTHER_LDFLAGS = (
679
+					"$(inherited)",
680
+					"-ObjC",
681
+					"-lc++",
682
+				);
683
+				PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS";
684
+				PRODUCT_NAME = "$(TARGET_NAME)";
685
+				SDKROOT = appletvos;
686
+				TARGETED_DEVICE_FAMILY = 3;
687
+				TVOS_DEPLOYMENT_TARGET = 9.2;
688
+			};
689
+			name = Debug;
690
+		};
691
+		2D02E4981E0B4A5E006451C7 /* Release */ = {
692
+			isa = XCBuildConfiguration;
693
+			baseConfigurationReference = EDF80BE96CF92848F4E926EA /* Pods-example-tvOS.release.xcconfig */;
694
+			buildSettings = {
695
+				ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
696
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
697
+				CLANG_ANALYZER_NONNULL = YES;
698
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
699
+				CLANG_WARN_INFINITE_RECURSION = YES;
700
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
701
+				COPY_PHASE_STRIP = NO;
702
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
703
+				GCC_NO_COMMON_BLOCKS = YES;
704
+				INFOPLIST_FILE = "example-tvOS/Info.plist";
705
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
706
+				OTHER_LDFLAGS = (
707
+					"$(inherited)",
708
+					"-ObjC",
709
+					"-lc++",
710
+				);
711
+				PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOS";
712
+				PRODUCT_NAME = "$(TARGET_NAME)";
713
+				SDKROOT = appletvos;
714
+				TARGETED_DEVICE_FAMILY = 3;
715
+				TVOS_DEPLOYMENT_TARGET = 9.2;
716
+			};
717
+			name = Release;
718
+		};
719
+		2D02E4991E0B4A5E006451C7 /* Debug */ = {
720
+			isa = XCBuildConfiguration;
721
+			baseConfigurationReference = F67BC8D73DE103BA10A5488D /* Pods-example-tvOSTests.debug.xcconfig */;
722
+			buildSettings = {
723
+				BUNDLE_LOADER = "$(TEST_HOST)";
724
+				CLANG_ANALYZER_NONNULL = YES;
725
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
726
+				CLANG_WARN_INFINITE_RECURSION = YES;
727
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
728
+				DEBUG_INFORMATION_FORMAT = dwarf;
729
+				ENABLE_TESTABILITY = YES;
730
+				GCC_NO_COMMON_BLOCKS = YES;
731
+				INFOPLIST_FILE = "example-tvOSTests/Info.plist";
732
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
733
+				OTHER_LDFLAGS = (
734
+					"$(inherited)",
735
+					"-ObjC",
736
+					"-lc++",
737
+				);
738
+				PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests";
739
+				PRODUCT_NAME = "$(TARGET_NAME)";
740
+				SDKROOT = appletvos;
741
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS";
742
+				TVOS_DEPLOYMENT_TARGET = 10.1;
743
+			};
744
+			name = Debug;
745
+		};
746
+		2D02E49A1E0B4A5E006451C7 /* Release */ = {
747
+			isa = XCBuildConfiguration;
748
+			baseConfigurationReference = 59A4F27CAD1B7EFE80917453 /* Pods-example-tvOSTests.release.xcconfig */;
749
+			buildSettings = {
750
+				BUNDLE_LOADER = "$(TEST_HOST)";
751
+				CLANG_ANALYZER_NONNULL = YES;
752
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
753
+				CLANG_WARN_INFINITE_RECURSION = YES;
754
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
755
+				COPY_PHASE_STRIP = NO;
756
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
757
+				GCC_NO_COMMON_BLOCKS = YES;
758
+				INFOPLIST_FILE = "example-tvOSTests/Info.plist";
759
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
760
+				OTHER_LDFLAGS = (
761
+					"$(inherited)",
762
+					"-ObjC",
763
+					"-lc++",
764
+				);
765
+				PRODUCT_BUNDLE_IDENTIFIER = "com.facebook.REACT.example-tvOSTests";
766
+				PRODUCT_NAME = "$(TARGET_NAME)";
767
+				SDKROOT = appletvos;
768
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/example-tvOS.app/example-tvOS";
769
+				TVOS_DEPLOYMENT_TARGET = 10.1;
770
+			};
771
+			name = Release;
772
+		};
773
+		83CBBA201A601CBA00E9B192 /* Debug */ = {
774
+			isa = XCBuildConfiguration;
775
+			buildSettings = {
776
+				ALWAYS_SEARCH_USER_PATHS = NO;
777
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
778
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
779
+				CLANG_CXX_LIBRARY = "libc++";
780
+				CLANG_ENABLE_MODULES = YES;
781
+				CLANG_ENABLE_OBJC_ARC = YES;
782
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
783
+				CLANG_WARN_BOOL_CONVERSION = YES;
784
+				CLANG_WARN_COMMA = YES;
785
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
786
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
787
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
788
+				CLANG_WARN_EMPTY_BODY = YES;
789
+				CLANG_WARN_ENUM_CONVERSION = YES;
790
+				CLANG_WARN_INFINITE_RECURSION = YES;
791
+				CLANG_WARN_INT_CONVERSION = YES;
792
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
793
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
794
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
795
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
796
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
797
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
798
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
799
+				CLANG_WARN_UNREACHABLE_CODE = YES;
800
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
801
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
802
+				COPY_PHASE_STRIP = NO;
803
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
804
+				ENABLE_TESTABILITY = YES;
805
+				GCC_C_LANGUAGE_STANDARD = gnu99;
806
+				GCC_DYNAMIC_NO_PIC = NO;
807
+				GCC_NO_COMMON_BLOCKS = YES;
808
+				GCC_OPTIMIZATION_LEVEL = 0;
809
+				GCC_PREPROCESSOR_DEFINITIONS = (
810
+					"DEBUG=1",
811
+					"$(inherited)",
812
+				);
813
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
814
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
815
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
816
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
817
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
818
+				GCC_WARN_UNUSED_FUNCTION = YES;
819
+				GCC_WARN_UNUSED_VARIABLE = YES;
820
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
821
+				MTL_ENABLE_DEBUG_INFO = YES;
822
+				ONLY_ACTIVE_ARCH = YES;
823
+				SDKROOT = iphoneos;
824
+			};
825
+			name = Debug;
826
+		};
827
+		83CBBA211A601CBA00E9B192 /* Release */ = {
828
+			isa = XCBuildConfiguration;
829
+			buildSettings = {
830
+				ALWAYS_SEARCH_USER_PATHS = NO;
831
+				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
832
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
833
+				CLANG_CXX_LIBRARY = "libc++";
834
+				CLANG_ENABLE_MODULES = YES;
835
+				CLANG_ENABLE_OBJC_ARC = YES;
836
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
837
+				CLANG_WARN_BOOL_CONVERSION = YES;
838
+				CLANG_WARN_COMMA = YES;
839
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
840
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
841
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
842
+				CLANG_WARN_EMPTY_BODY = YES;
843
+				CLANG_WARN_ENUM_CONVERSION = YES;
844
+				CLANG_WARN_INFINITE_RECURSION = YES;
845
+				CLANG_WARN_INT_CONVERSION = YES;
846
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
847
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
848
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
849
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
850
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
851
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
852
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
853
+				CLANG_WARN_UNREACHABLE_CODE = YES;
854
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
855
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
856
+				COPY_PHASE_STRIP = YES;
857
+				ENABLE_NS_ASSERTIONS = NO;
858
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
859
+				GCC_C_LANGUAGE_STANDARD = gnu99;
860
+				GCC_NO_COMMON_BLOCKS = YES;
861
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
862
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
863
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
864
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
865
+				GCC_WARN_UNUSED_FUNCTION = YES;
866
+				GCC_WARN_UNUSED_VARIABLE = YES;
867
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
868
+				MTL_ENABLE_DEBUG_INFO = NO;
869
+				SDKROOT = iphoneos;
870
+				VALIDATE_PRODUCT = YES;
871
+			};
872
+			name = Release;
873
+		};
874
+/* End XCBuildConfiguration section */
875
+
876
+/* Begin XCConfigurationList section */
877
+		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "exampleTests" */ = {
878
+			isa = XCConfigurationList;
879
+			buildConfigurations = (
880
+				00E356F61AD99517003FC87E /* Debug */,
881
+				00E356F71AD99517003FC87E /* Release */,
882
+			);
883
+			defaultConfigurationIsVisible = 0;
884
+			defaultConfigurationName = Release;
885
+		};
886
+		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "example" */ = {
887
+			isa = XCConfigurationList;
888
+			buildConfigurations = (
889
+				13B07F941A680F5B00A75B9A /* Debug */,
890
+				13B07F951A680F5B00A75B9A /* Release */,
891
+			);
892
+			defaultConfigurationIsVisible = 0;
893
+			defaultConfigurationName = Release;
894
+		};
895
+		2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOS" */ = {
896
+			isa = XCConfigurationList;
897
+			buildConfigurations = (
898
+				2D02E4971E0B4A5E006451C7 /* Debug */,
899
+				2D02E4981E0B4A5E006451C7 /* Release */,
900
+			);
901
+			defaultConfigurationIsVisible = 0;
902
+			defaultConfigurationName = Release;
903
+		};
904
+		2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "example-tvOSTests" */ = {
905
+			isa = XCConfigurationList;
906
+			buildConfigurations = (
907
+				2D02E4991E0B4A5E006451C7 /* Debug */,
908
+				2D02E49A1E0B4A5E006451C7 /* Release */,
909
+			);
910
+			defaultConfigurationIsVisible = 0;
911
+			defaultConfigurationName = Release;
912
+		};
913
+		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "example" */ = {
914
+			isa = XCConfigurationList;
915
+			buildConfigurations = (
916
+				83CBBA201A601CBA00E9B192 /* Debug */,
917
+				83CBBA211A601CBA00E9B192 /* Release */,
918
+			);
919
+			defaultConfigurationIsVisible = 0;
920
+			defaultConfigurationName = Release;
921
+		};
922
+/* End XCConfigurationList section */
923
+	};
924
+	rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
925
+}

+ 129
- 0
example/ios/example.xcodeproj/xcshareddata/xcschemes/example-tvOS.xcscheme View File

@@ -0,0 +1,129 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<Scheme
3
+   LastUpgradeVersion = "0940"
4
+   version = "1.3">
5
+   <BuildAction
6
+      parallelizeBuildables = "NO"
7
+      buildImplicitDependencies = "YES">
8
+      <BuildActionEntries>
9
+         <BuildActionEntry
10
+            buildForTesting = "YES"
11
+            buildForRunning = "YES"
12
+            buildForProfiling = "YES"
13
+            buildForArchiving = "YES"
14
+            buildForAnalyzing = "YES">
15
+            <BuildableReference
16
+               BuildableIdentifier = "primary"
17
+               BlueprintIdentifier = "2D2A28121D9B038B00D4039D"
18
+               BuildableName = "libReact.a"
19
+               BlueprintName = "React-tvOS"
20
+               ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
21
+            </BuildableReference>
22
+         </BuildActionEntry>
23
+         <BuildActionEntry
24
+            buildForTesting = "YES"
25
+            buildForRunning = "YES"
26
+            buildForProfiling = "YES"
27
+            buildForArchiving = "YES"
28
+            buildForAnalyzing = "YES">
29
+            <BuildableReference
30
+               BuildableIdentifier = "primary"
31
+               BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
32
+               BuildableName = "example-tvOS.app"
33
+               BlueprintName = "example-tvOS"
34
+               ReferencedContainer = "container:example.xcodeproj">
35
+            </BuildableReference>
36
+         </BuildActionEntry>
37
+         <BuildActionEntry
38
+            buildForTesting = "YES"
39
+            buildForRunning = "YES"
40
+            buildForProfiling = "NO"
41
+            buildForArchiving = "NO"
42
+            buildForAnalyzing = "YES">
43
+            <BuildableReference
44
+               BuildableIdentifier = "primary"
45
+               BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
46
+               BuildableName = "example-tvOSTests.xctest"
47
+               BlueprintName = "example-tvOSTests"
48
+               ReferencedContainer = "container:example.xcodeproj">
49
+            </BuildableReference>
50
+         </BuildActionEntry>
51
+      </BuildActionEntries>
52
+   </BuildAction>
53
+   <TestAction
54
+      buildConfiguration = "Debug"
55
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
56
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
57
+      shouldUseLaunchSchemeArgsEnv = "YES">
58
+      <Testables>
59
+         <TestableReference
60
+            skipped = "NO">
61
+            <BuildableReference
62
+               BuildableIdentifier = "primary"
63
+               BlueprintIdentifier = "2D02E48F1E0B4A5D006451C7"
64
+               BuildableName = "example-tvOSTests.xctest"
65
+               BlueprintName = "example-tvOSTests"
66
+               ReferencedContainer = "container:example.xcodeproj">
67
+            </BuildableReference>
68
+         </TestableReference>
69
+      </Testables>
70
+      <MacroExpansion>
71
+         <BuildableReference
72
+            BuildableIdentifier = "primary"
73
+            BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
74
+            BuildableName = "example-tvOS.app"
75
+            BlueprintName = "example-tvOS"
76
+            ReferencedContainer = "container:example.xcodeproj">
77
+         </BuildableReference>
78
+      </MacroExpansion>
79
+      <AdditionalOptions>
80
+      </AdditionalOptions>
81
+   </TestAction>
82
+   <LaunchAction
83
+      buildConfiguration = "Debug"
84
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
85
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
86
+      launchStyle = "0"
87
+      useCustomWorkingDirectory = "NO"
88
+      ignoresPersistentStateOnLaunch = "NO"
89
+      debugDocumentVersioning = "YES"
90
+      debugServiceExtension = "internal"
91
+      allowLocationSimulation = "YES">
92
+      <BuildableProductRunnable
93
+         runnableDebuggingMode = "0">
94
+         <BuildableReference
95
+            BuildableIdentifier = "primary"
96
+            BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
97
+            BuildableName = "example-tvOS.app"
98
+            BlueprintName = "example-tvOS"
99
+            ReferencedContainer = "container:example.xcodeproj">
100
+         </BuildableReference>
101
+      </BuildableProductRunnable>
102
+      <AdditionalOptions>
103
+      </AdditionalOptions>
104
+   </LaunchAction>
105
+   <ProfileAction
106
+      buildConfiguration = "Release"
107
+      shouldUseLaunchSchemeArgsEnv = "YES"
108
+      savedToolIdentifier = ""
109
+      useCustomWorkingDirectory = "NO"
110
+      debugDocumentVersioning = "YES">
111
+      <BuildableProductRunnable
112
+         runnableDebuggingMode = "0">
113
+         <BuildableReference
114
+            BuildableIdentifier = "primary"
115
+            BlueprintIdentifier = "2D02E47A1E0B4A5D006451C7"
116
+            BuildableName = "example-tvOS.app"
117
+            BlueprintName = "example-tvOS"
118
+            ReferencedContainer = "container:example.xcodeproj">
119
+         </BuildableReference>
120
+      </BuildableProductRunnable>
121
+   </ProfileAction>
122
+   <AnalyzeAction
123
+      buildConfiguration = "Debug">
124
+   </AnalyzeAction>
125
+   <ArchiveAction
126
+      buildConfiguration = "Release"
127
+      revealArchiveInOrganizer = "YES">
128
+   </ArchiveAction>
129
+</Scheme>

+ 129
- 0
example/ios/example.xcodeproj/xcshareddata/xcschemes/example.xcscheme View File

@@ -0,0 +1,129 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<Scheme
3
+   LastUpgradeVersion = "0940"
4
+   version = "1.3">
5
+   <BuildAction
6
+      parallelizeBuildables = "NO"
7
+      buildImplicitDependencies = "YES">
8
+      <BuildActionEntries>
9
+         <BuildActionEntry
10
+            buildForTesting = "YES"
11
+            buildForRunning = "YES"
12
+            buildForProfiling = "YES"
13
+            buildForArchiving = "YES"
14
+            buildForAnalyzing = "YES">
15
+            <BuildableReference
16
+               BuildableIdentifier = "primary"
17
+               BlueprintIdentifier = "83CBBA2D1A601D0E00E9B192"
18
+               BuildableName = "libReact.a"
19
+               BlueprintName = "React"
20
+               ReferencedContainer = "container:../node_modules/react-native/React/React.xcodeproj">
21
+            </BuildableReference>
22
+         </BuildActionEntry>
23
+         <BuildActionEntry
24
+            buildForTesting = "YES"
25
+            buildForRunning = "YES"
26
+            buildForProfiling = "YES"
27
+            buildForArchiving = "YES"
28
+            buildForAnalyzing = "YES">
29
+            <BuildableReference
30
+               BuildableIdentifier = "primary"
31
+               BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
32
+               BuildableName = "example.app"
33
+               BlueprintName = "example"
34
+               ReferencedContainer = "container:example.xcodeproj">
35
+            </BuildableReference>
36
+         </BuildActionEntry>
37
+         <BuildActionEntry
38
+            buildForTesting = "YES"
39
+            buildForRunning = "YES"
40
+            buildForProfiling = "NO"
41
+            buildForArchiving = "NO"
42
+            buildForAnalyzing = "YES">
43
+            <BuildableReference
44
+               BuildableIdentifier = "primary"
45
+               BlueprintIdentifier = "00E356ED1AD99517003FC87E"
46
+               BuildableName = "exampleTests.xctest"
47
+               BlueprintName = "exampleTests"
48
+               ReferencedContainer = "container:example.xcodeproj">
49
+            </BuildableReference>
50
+         </BuildActionEntry>
51
+      </BuildActionEntries>
52
+   </BuildAction>
53
+   <TestAction
54
+      buildConfiguration = "Debug"
55
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
56
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
57
+      shouldUseLaunchSchemeArgsEnv = "YES">
58
+      <Testables>
59
+         <TestableReference
60
+            skipped = "NO">
61
+            <BuildableReference
62
+               BuildableIdentifier = "primary"
63
+               BlueprintIdentifier = "00E356ED1AD99517003FC87E"
64
+               BuildableName = "exampleTests.xctest"
65
+               BlueprintName = "exampleTests"
66
+               ReferencedContainer = "container:example.xcodeproj">
67
+            </BuildableReference>
68
+         </TestableReference>
69
+      </Testables>
70
+      <MacroExpansion>
71
+         <BuildableReference
72
+            BuildableIdentifier = "primary"
73
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
74
+            BuildableName = "example.app"
75
+            BlueprintName = "example"
76
+            ReferencedContainer = "container:example.xcodeproj">
77
+         </BuildableReference>
78
+      </MacroExpansion>
79
+      <AdditionalOptions>
80
+      </AdditionalOptions>
81
+   </TestAction>
82
+   <LaunchAction
83
+      buildConfiguration = "Debug"
84
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
85
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
86
+      launchStyle = "0"
87
+      useCustomWorkingDirectory = "NO"
88
+      ignoresPersistentStateOnLaunch = "NO"
89
+      debugDocumentVersioning = "YES"
90
+      debugServiceExtension = "internal"
91
+      allowLocationSimulation = "YES">
92
+      <BuildableProductRunnable
93
+         runnableDebuggingMode = "0">
94
+         <BuildableReference
95
+            BuildableIdentifier = "primary"
96
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
97
+            BuildableName = "example.app"
98
+            BlueprintName = "example"
99
+            ReferencedContainer = "container:example.xcodeproj">
100
+         </BuildableReference>
101
+      </BuildableProductRunnable>
102
+      <AdditionalOptions>
103
+      </AdditionalOptions>
104
+   </LaunchAction>
105
+   <ProfileAction
106
+      buildConfiguration = "Release"
107
+      shouldUseLaunchSchemeArgsEnv = "YES"
108
+      savedToolIdentifier = ""
109
+      useCustomWorkingDirectory = "NO"
110
+      debugDocumentVersioning = "YES">
111
+      <BuildableProductRunnable
112
+         runnableDebuggingMode = "0">
113
+         <BuildableReference
114
+            BuildableIdentifier = "primary"
115
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
116
+            BuildableName = "example.app"
117
+            BlueprintName = "example"
118
+            ReferencedContainer = "container:example.xcodeproj">
119
+         </BuildableReference>
120
+      </BuildableProductRunnable>
121
+   </ProfileAction>
122
+   <AnalyzeAction
123
+      buildConfiguration = "Debug">
124
+   </AnalyzeAction>
125
+   <ArchiveAction
126
+      buildConfiguration = "Release"
127
+      revealArchiveInOrganizer = "YES">
128
+   </ArchiveAction>
129
+</Scheme>

+ 10
- 0
example/ios/example.xcworkspace/contents.xcworkspacedata View File

@@ -0,0 +1,10 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<Workspace
3
+   version = "1.0">
4
+   <FileRef
5
+      location = "group:example.xcodeproj">
6
+   </FileRef>
7
+   <FileRef
8
+      location = "group:Pods/Pods.xcodeproj">
9
+   </FileRef>
10
+</Workspace>

+ 8
- 0
example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist View File

@@ -0,0 +1,8 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>IDEDidComputeMac32BitWarning</key>
6
+	<true/>
7
+</dict>
8
+</plist>

+ 15
- 0
example/ios/example/AppDelegate.h View File

@@ -0,0 +1,15 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+#import <React/RCTBridgeDelegate.h>
9
+#import <UIKit/UIKit.h>
10
+
11
+@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
12
+
13
+@property (nonatomic, strong) UIWindow *window;
14
+
15
+@end

+ 42
- 0
example/ios/example/AppDelegate.m View File

@@ -0,0 +1,42 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+#import "AppDelegate.h"
9
+
10
+#import <React/RCTBridge.h>
11
+#import <React/RCTBundleURLProvider.h>
12
+#import <React/RCTRootView.h>
13
+
14
+@implementation AppDelegate
15
+
16
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
17
+{
18
+  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
19
+  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
20
+                                                   moduleName:@"example"
21
+                                            initialProperties:nil];
22
+
23
+  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
24
+
25
+  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
26
+  UIViewController *rootViewController = [UIViewController new];
27
+  rootViewController.view = rootView;
28
+  self.window.rootViewController = rootViewController;
29
+  [self.window makeKeyAndVisible];
30
+  return YES;
31
+}
32
+
33
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
34
+{
35
+#if DEBUG
36
+  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"example/index" fallbackResource:nil];
37
+#else
38
+  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
39
+#endif
40
+}
41
+
42
+@end

+ 42
- 0
example/ios/example/Base.lproj/LaunchScreen.xib View File

@@ -0,0 +1,42 @@
1
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
3
+    <dependencies>
4
+        <deployment identifier="iOS"/>
5
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
6
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
7
+    </dependencies>
8
+    <objects>
9
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
10
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
11
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
12
+            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
13
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
14
+            <subviews>
15
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
16
+                    <rect key="frame" x="20" y="439" width="441" height="21"/>
17
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
18
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
19
+                    <nil key="highlightedColor"/>
20
+                </label>
21
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="example" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
22
+                    <rect key="frame" x="20" y="140" width="441" height="43"/>
23
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
24
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
25
+                    <nil key="highlightedColor"/>
26
+                </label>
27
+            </subviews>
28
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
29
+            <constraints>
30
+                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
31
+                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
32
+                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
33
+                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
34
+                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
35
+                <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
36
+            </constraints>
37
+            <nil key="simulatedStatusBarMetrics"/>
38
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
39
+            <point key="canvasLocation" x="548" y="455"/>
40
+        </view>
41
+    </objects>
42
+</document>

+ 38
- 0
example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json View File

@@ -0,0 +1,38 @@
1
+{
2
+  "images" : [
3
+    {
4
+      "idiom" : "iphone",
5
+      "size" : "29x29",
6
+      "scale" : "2x"
7
+    },
8
+    {
9
+      "idiom" : "iphone",
10
+      "size" : "29x29",
11
+      "scale" : "3x"
12
+    },
13
+    {
14
+      "idiom" : "iphone",
15
+      "size" : "40x40",
16
+      "scale" : "2x"
17
+    },
18
+    {
19
+      "idiom" : "iphone",
20
+      "size" : "40x40",
21
+      "scale" : "3x"
22
+    },
23
+    {
24
+      "idiom" : "iphone",
25
+      "size" : "60x60",
26
+      "scale" : "2x"
27
+    },
28
+    {
29
+      "idiom" : "iphone",
30
+      "size" : "60x60",
31
+      "scale" : "3x"
32
+    }
33
+  ],
34
+  "info" : {
35
+    "version" : 1,
36
+    "author" : "xcode"
37
+  }
38
+}

+ 6
- 0
example/ios/example/Images.xcassets/Contents.json View File

@@ -0,0 +1,6 @@
1
+{
2
+  "info" : {
3
+    "version" : 1,
4
+    "author" : "xcode"
5
+  }
6
+}

+ 57
- 0
example/ios/example/Info.plist View File

@@ -0,0 +1,57 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>CFBundleDevelopmentRegion</key>
6
+	<string>en</string>
7
+	<key>CFBundleDisplayName</key>
8
+	<string>example</string>
9
+	<key>CFBundleExecutable</key>
10
+	<string>$(EXECUTABLE_NAME)</string>
11
+	<key>CFBundleIdentifier</key>
12
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
13
+	<key>CFBundleInfoDictionaryVersion</key>
14
+	<string>6.0</string>
15
+	<key>CFBundleName</key>
16
+	<string>$(PRODUCT_NAME)</string>
17
+	<key>CFBundlePackageType</key>
18
+	<string>APPL</string>
19
+	<key>CFBundleShortVersionString</key>
20
+	<string>1.0</string>
21
+	<key>CFBundleSignature</key>
22
+	<string>????</string>
23
+	<key>CFBundleVersion</key>
24
+	<string>1</string>
25
+	<key>LSRequiresIPhoneOS</key>
26
+	<true/>
27
+	<key>NSAppTransportSecurity</key>
28
+	<dict>
29
+		<key>NSAllowsArbitraryLoads</key>
30
+		<true/>
31
+		<key>NSExceptionDomains</key>
32
+		<dict>
33
+			<key>localhost</key>
34
+			<dict>
35
+				<key>NSExceptionAllowsInsecureHTTPLoads</key>
36
+				<true/>
37
+			</dict>
38
+		</dict>
39
+	</dict>
40
+	<key>NSLocationWhenInUseUsageDescription</key>
41
+	<string></string>
42
+	<key>UILaunchStoryboardName</key>
43
+	<string>LaunchScreen</string>
44
+	<key>UIRequiredDeviceCapabilities</key>
45
+	<array>
46
+		<string>armv7</string>
47
+	</array>
48
+	<key>UISupportedInterfaceOrientations</key>
49
+	<array>
50
+		<string>UIInterfaceOrientationPortrait</string>
51
+		<string>UIInterfaceOrientationLandscapeLeft</string>
52
+		<string>UIInterfaceOrientationLandscapeRight</string>
53
+	</array>
54
+	<key>UIViewControllerBasedStatusBarAppearance</key>
55
+	<false/>
56
+</dict>
57
+</plist>

+ 16
- 0
example/ios/example/main.m View File

@@ -0,0 +1,16 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+#import <UIKit/UIKit.h>
9
+
10
+#import "AppDelegate.h"
11
+
12
+int main(int argc, char * argv[]) {
13
+  @autoreleasepool {
14
+    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
15
+  }
16
+}

+ 24
- 0
example/ios/exampleTests/Info.plist View File

@@ -0,0 +1,24 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+<plist version="1.0">
4
+<dict>
5
+	<key>CFBundleDevelopmentRegion</key>
6
+	<string>en</string>
7
+	<key>CFBundleExecutable</key>
8
+	<string>$(EXECUTABLE_NAME)</string>
9
+	<key>CFBundleIdentifier</key>
10
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
11
+	<key>CFBundleInfoDictionaryVersion</key>
12
+	<string>6.0</string>
13
+	<key>CFBundleName</key>
14
+	<string>$(PRODUCT_NAME)</string>
15
+	<key>CFBundlePackageType</key>
16
+	<string>BNDL</string>
17
+	<key>CFBundleShortVersionString</key>
18
+	<string>1.0</string>
19
+	<key>CFBundleSignature</key>
20
+	<string>????</string>
21
+	<key>CFBundleVersion</key>
22
+	<string>1</string>
23
+</dict>
24
+</plist>

+ 72
- 0
example/ios/exampleTests/exampleTests.m View File

@@ -0,0 +1,72 @@
1
+/**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+#import <UIKit/UIKit.h>
9
+#import <XCTest/XCTest.h>
10
+
11
+#import <React/RCTLog.h>
12
+#import <React/RCTRootView.h>
13
+
14
+#define TIMEOUT_SECONDS 600
15
+#define TEXT_TO_LOOK_FOR @"Welcome to React"
16
+
17
+@interface exampleTests : XCTestCase
18
+
19
+@end
20
+
21
+@implementation exampleTests
22
+
23
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
24
+{
25
+  if (test(view)) {
26
+    return YES;
27
+  }
28
+  for (UIView *subview in [view subviews]) {
29
+    if ([self findSubviewInView:subview matching:test]) {
30
+      return YES;
31
+    }
32
+  }
33
+  return NO;
34
+}
35
+
36
+- (void)testRendersWelcomeScreen
37
+{
38
+  UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController];
39
+  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
40
+  BOOL foundElement = NO;
41
+
42
+  __block NSString *redboxError = nil;
43
+#ifdef DEBUG
44
+  RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
45
+    if (level >= RCTLogLevelError) {
46
+      redboxError = message;
47
+    }
48
+  });
49
+#endif
50
+
51
+  while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) {
52
+    [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
53
+    [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
54
+
55
+    foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) {
56
+      if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) {
57
+        return YES;
58
+      }
59
+      return NO;
60
+    }];
61
+  }
62
+  
63
+#ifdef DEBUG
64
+  RCTSetLogFunction(RCTDefaultLogFunction);
65
+#endif
66
+
67
+  XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
68
+  XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
69
+}
70
+
71
+
72
+@end

+ 62
- 0
example/tsconfig.json View File

@@ -0,0 +1,62 @@
1
+ 
2
+{
3
+  "compilerOptions": {
4
+    /* Basic Options */
5
+    "target": "esnext",                       /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */
6
+    "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
7
+    "lib": ["es6"],                           /* Specify library files to be included in the compilation. */
8
+    "allowJs": true,                          /* Allow javascript files to be compiled. */
9
+    // "checkJs": true,                       /* Report errors in .js files. */
10
+    "jsx": "react-native",                    /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
11
+    // "declaration": true,                   /* Generates corresponding '.d.ts' file. */
12
+    // "sourceMap": true,                     /* Generates corresponding '.map' file. */
13
+    // "outFile": "./",                       /* Concatenate and emit output to single file. */
14
+    // "outDir": "./",                        /* Redirect output structure to the directory. */
15
+    // "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
16
+    // "removeComments": true,                /* Do not emit comments to output. */
17
+    "noEmit": true,                           /* Do not emit outputs. */
18
+    "incremental": true,                      /* Enable incremental compilation */
19
+    // "importHelpers": true,                 /* Import emit helpers from 'tslib'. */
20
+    // "downlevelIteration": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
21
+    "isolatedModules": true,                  /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
22
+
23
+    /* Strict Type-Checking Options */
24
+    "strict": true,                           /* Enable all strict type-checking options. */
25
+    // "noImplicitAny": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */
26
+    // "strictNullChecks": true,              /* Enable strict null checks. */
27
+    // "strictFunctionTypes": true,           /* Enable strict checking of function types. */
28
+    // "strictPropertyInitialization": true,  /* Enable strict checking of property initialization in classes. */
29
+    // "noImplicitThis": true,                /* Raise error on 'this' expressions with an implied 'any' type. */
30
+    // "alwaysStrict": true,                  /* Parse in strict mode and emit "use strict" for each source file. */
31
+
32
+    /* Additional Checks */
33
+    // "noUnusedLocals": true,                /* Report errors on unused locals. */
34
+    // "noUnusedParameters": true,            /* Report errors on unused parameters. */
35
+    // "noImplicitReturns": true,             /* Report error when not all code paths in function return a value. */
36
+    // "noFallthroughCasesInSwitch": true,    /* Report errors for fallthrough cases in switch statement. */
37
+
38
+    /* Module Resolution Options */
39
+    "moduleResolution": "node",               /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
40
+    "baseUrl": "./",                          /* Base directory to resolve non-absolute module names. */
41
+    // "paths": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
42
+    // "rootDirs": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */
43
+    // "typeRoots": [],                       /* List of folders to include type definitions from. */
44
+    // "types": [],                           /* Type declaration files to be included in compilation. */
45
+    "allowSyntheticDefaultImports": true,     /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
46
+    "esModuleInterop": true                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
47
+    // "preserveSymlinks": true,              /* Do not resolve the real path of symlinks. */
48
+
49
+    /* Source Map Options */
50
+    // "sourceRoot": "./",                    /* Specify the location where debugger should locate TypeScript files instead of source locations. */
51
+    // "mapRoot": "./",                       /* Specify the location where debugger should locate map files instead of generated locations. */
52
+    // "inlineSourceMap": true,               /* Emit a single file with source maps instead of having a separate file. */
53
+    // "inlineSources": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
54
+
55
+    /* Experimental Options */
56
+    // "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
57
+    // "emitDecoratorMetadata": true,         /* Enables experimental support for emitting type metadata for decorators. */
58
+  },
59
+  "exclude": [
60
+    "node_modules", "babel.config.js", "metro.config.js", "jest.config.js"
61
+  ]
62
+}

+ 4944
- 0
example/yarn.lock
File diff suppressed because it is too large
View File


+ 138
- 132
ios/RNCWebView.m View File

@@ -134,157 +134,163 @@ static NSDictionary* customCertificatesForHost;
134 134
   return nil;
135 135
 }
136 136
 
137
-- (void)didMoveToWindow
137
+- (WKWebViewConfiguration *)setUpWkWebViewConfig
138 138
 {
139
-  if (self.window != nil && _webView == nil) {
140
-    WKWebViewConfiguration *wkWebViewConfig = [WKWebViewConfiguration new];
141
-    WKPreferences *prefs = [[WKPreferences alloc]init];
142
-    BOOL _prefsUsed = NO;
143
-    if (!_javaScriptEnabled) {
144
-      prefs.javaScriptEnabled = NO;
145
-      _prefsUsed = YES;
146
-    }
147
-    if (_allowFileAccessFromFileURLs) {
148
-      [prefs setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
149
-      _prefsUsed = YES;
150
-    }
151
-    if (_prefsUsed) {
152
-      wkWebViewConfig.preferences = prefs;
153
-    }
154
-    if (_incognito) {
155
-      wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
156
-    } else if (_cacheEnabled) {
157
-      wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
158
-    }
159
-    if(self.useSharedProcessPool) {
160
-      wkWebViewConfig.processPool = [[RNCWKProcessPoolManager sharedManager] sharedProcessPool];
161
-    }
162
-    wkWebViewConfig.userContentController = [WKUserContentController new];
139
+  WKWebViewConfiguration *wkWebViewConfig = [WKWebViewConfiguration new];
140
+  WKPreferences *prefs = [[WKPreferences alloc]init];
141
+  BOOL _prefsUsed = NO;
142
+  if (!_javaScriptEnabled) {
143
+    prefs.javaScriptEnabled = NO;
144
+    _prefsUsed = YES;
145
+  }
146
+  if (_allowFileAccessFromFileURLs) {
147
+    [prefs setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
148
+    _prefsUsed = YES;
149
+  }
150
+  if (_prefsUsed) {
151
+    wkWebViewConfig.preferences = prefs;
152
+  }
153
+  if (_incognito) {
154
+    wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
155
+  } else if (_cacheEnabled) {
156
+    wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
157
+  }
158
+  if(self.useSharedProcessPool) {
159
+    wkWebViewConfig.processPool = [[RNCWKProcessPoolManager sharedManager] sharedProcessPool];
160
+  }
161
+  wkWebViewConfig.userContentController = [WKUserContentController new];
162
+
163
+  // Shim the HTML5 history API:
164
+  [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
165
+                                                            name:HistoryShimName];
166
+  NSString *source = [NSString stringWithFormat:
167
+    @"(function(history) {\n"
168
+    "  function notify(type) {\n"
169
+    "    setTimeout(function() {\n"
170
+    "      window.webkit.messageHandlers.%@.postMessage(type)\n"
171
+    "    }, 0)\n"
172
+    "  }\n"
173
+    "  function shim(f) {\n"
174
+    "    return function pushState() {\n"
175
+    "      notify('other')\n"
176
+    "      return f.apply(history, arguments)\n"
177
+    "    }\n"
178
+    "  }\n"
179
+    "  history.pushState = shim(history.pushState)\n"
180
+    "  history.replaceState = shim(history.replaceState)\n"
181
+    "  window.addEventListener('popstate', function() {\n"
182
+    "    notify('backforward')\n"
183
+    "  })\n"
184
+    "})(window.history)\n", HistoryShimName
185
+  ];
186
+  WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
187
+  [wkWebViewConfig.userContentController addUserScript:script];
163 188
 
164
-    // Shim the HTML5 history API:
189
+  if (_messagingEnabled) {
165 190
     [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
166
-                                                              name:HistoryShimName];
191
+                                                              name:MessageHandlerName];
192
+
167 193
     NSString *source = [NSString stringWithFormat:
168
-      @"(function(history) {\n"
169
-      "  function notify(type) {\n"
170
-      "    setTimeout(function() {\n"
171
-      "      window.webkit.messageHandlers.%@.postMessage(type)\n"
172
-      "    }, 0)\n"
173
-      "  }\n"
174
-      "  function shim(f) {\n"
175
-      "    return function pushState() {\n"
176
-      "      notify('other')\n"
177
-      "      return f.apply(history, arguments)\n"
178
-      "    }\n"
179
-      "  }\n"
180
-      "  history.pushState = shim(history.pushState)\n"
181
-      "  history.replaceState = shim(history.replaceState)\n"
182
-      "  window.addEventListener('popstate', function() {\n"
183
-      "    notify('backforward')\n"
184
-      "  })\n"
185
-      "})(window.history)\n", HistoryShimName
194
+      @"window.%@ = {"
195
+       "  postMessage: function (data) {"
196
+       "    window.webkit.messageHandlers.%@.postMessage(String(data));"
197
+       "  }"
198
+       "};", MessageHandlerName, MessageHandlerName
186 199
     ];
200
+
187 201
     WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
188 202
     [wkWebViewConfig.userContentController addUserScript:script];
189
-
190
-    if (_messagingEnabled) {
191
-      [wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
192
-                                                                name:MessageHandlerName];
193
-
194
-      NSString *source = [NSString stringWithFormat:
195
-        @"window.%@ = {"
196
-         "  postMessage: function (data) {"
197
-         "    window.webkit.messageHandlers.%@.postMessage(String(data));"
198
-         "  }"
199
-         "};", MessageHandlerName, MessageHandlerName
200
-      ];
201
-
202
-      WKUserScript *script = [[WKUserScript alloc] initWithSource:source injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
203
-      [wkWebViewConfig.userContentController addUserScript:script];
204
-        
205
-      if (_injectedJavaScriptBeforeContentLoaded) {
206
-        // If user has provided an injectedJavascript prop, execute it at the start of the document
207
-        WKUserScript *injectedScript = [[WKUserScript alloc] initWithSource:_injectedJavaScriptBeforeContentLoaded injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
208
-        [wkWebViewConfig.userContentController addUserScript:injectedScript];
209
-      }
203
+      
204
+    if (_injectedJavaScriptBeforeContentLoaded) {
205
+      // If user has provided an injectedJavascript prop, execute it at the start of the document
206
+      WKUserScript *injectedScript = [[WKUserScript alloc] initWithSource:_injectedJavaScriptBeforeContentLoaded injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES];
207
+      [wkWebViewConfig.userContentController addUserScript:injectedScript];
210 208
     }
209
+  }
211 210
 
212
-    wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback;
211
+  wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback;
213 212
 #if WEBKIT_IOS_10_APIS_AVAILABLE
214
-    wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction
215
-      ? WKAudiovisualMediaTypeAll
216
-      : WKAudiovisualMediaTypeNone;
217
-    wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes;
213
+  wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction
214
+    ? WKAudiovisualMediaTypeAll
215
+    : WKAudiovisualMediaTypeNone;
216
+  wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes;
218 217
 #else
219
-    wkWebViewConfig.mediaPlaybackRequiresUserAction = _mediaPlaybackRequiresUserAction;
218
+  wkWebViewConfig.mediaPlaybackRequiresUserAction = _mediaPlaybackRequiresUserAction;
220 219
 #endif
221 220
 
222
-    if (_applicationNameForUserAgent) {
223
-        wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent];
224
-    }
221
+  if (_applicationNameForUserAgent) {
222
+      wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent];
223
+  }
225 224
 
226
-    if(_sharedCookiesEnabled) {
227
-      // More info to sending cookies with WKWebView
228
-      // https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303
229
-      if (@available(iOS 11.0, *)) {
230
-        // Set Cookies in iOS 11 and above, initialize websiteDataStore before setting cookies
231
-        // See also https://forums.developer.apple.com/thread/97194
232
-        // check if websiteDataStore has not been initialized before
233
-        if(!_incognito && !_cacheEnabled) {
234
-          wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
235
-        }
236
-        for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
237
-          [wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
225
+  if(_sharedCookiesEnabled) {
226
+    // More info to sending cookies with WKWebView
227
+    // https://stackoverflow.com/questions/26573137/can-i-set-the-cookies-to-be-used-by-a-wkwebview/26577303#26577303
228
+    if (@available(iOS 11.0, *)) {
229
+      // Set Cookies in iOS 11 and above, initialize websiteDataStore before setting cookies
230
+      // See also https://forums.developer.apple.com/thread/97194
231
+      // check if websiteDataStore has not been initialized before
232
+      if(!_incognito && !_cacheEnabled) {
233
+        wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
234
+      }
235
+      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
236
+        [wkWebViewConfig.websiteDataStore.httpCookieStore setCookie:cookie completionHandler:nil];
237
+      }
238
+    } else {
239
+      NSMutableString *script = [NSMutableString string];
240
+
241
+      // Clear all existing cookies in a direct called function. This ensures that no
242
+      // javascript error will break the web content javascript.
243
+      // We keep this code here, if someone requires that Cookies are also removed within the
244
+      // the WebView and want to extends the current sharedCookiesEnabled option with an
245
+      // additional property.
246
+      // Generates JS: document.cookie = "key=; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"
247
+      // for each cookie which is already available in the WebView context.
248
+      /*
249
+      [script appendString:@"(function () {\n"];
250
+      [script appendString:@"  var cookies = document.cookie.split('; ');\n"];
251
+      [script appendString:@"  for (var i = 0; i < cookies.length; i++) {\n"];
252
+      [script appendString:@"    if (cookies[i].indexOf('=') !== -1) {\n"];
253
+      [script appendString:@"      document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"];
254
+      [script appendString:@"    }\n"];
255
+      [script appendString:@"  }\n"];
256
+      [script appendString:@"})();\n\n"];
257
+      */
258
+
259
+      // Set cookies in a direct called function. This ensures that no
260
+      // javascript error will break the web content javascript.
261
+        // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;"
262
+      // for each cookie which is available in the application context.
263
+      [script appendString:@"(function () {\n"];
264
+      for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
265
+        [script appendFormat:@"document.cookie = %@ + '=' + %@",
266
+          RCTJSONStringify(cookie.name, NULL),
267
+          RCTJSONStringify(cookie.value, NULL)];
268
+        if (cookie.path) {
269
+          [script appendFormat:@" + '; Path=' + %@", RCTJSONStringify(cookie.path, NULL)];
238 270
         }
239
-      } else {
240
-        NSMutableString *script = [NSMutableString string];
241
-
242
-        // Clear all existing cookies in a direct called function. This ensures that no
243
-        // javascript error will break the web content javascript.
244
-        // We keep this code here, if someone requires that Cookies are also removed within the
245
-        // the WebView and want to extends the current sharedCookiesEnabled option with an
246
-        // additional property.
247
-        // Generates JS: document.cookie = "key=; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"
248
-        // for each cookie which is already available in the WebView context.
249
-        /*
250
-        [script appendString:@"(function () {\n"];
251
-        [script appendString:@"  var cookies = document.cookie.split('; ');\n"];
252
-        [script appendString:@"  for (var i = 0; i < cookies.length; i++) {\n"];
253
-        [script appendString:@"    if (cookies[i].indexOf('=') !== -1) {\n"];
254
-        [script appendString:@"      document.cookie = cookies[i].split('=')[0] + '=; Expires=Thu, 01 Jan 1970 00:00:01 GMT';\n"];
255
-        [script appendString:@"    }\n"];
256
-        [script appendString:@"  }\n"];
257
-        [script appendString:@"})();\n\n"];
258
-        */
259
-
260
-        // Set cookies in a direct called function. This ensures that no
261
-        // javascript error will break the web content javascript.
262
-          // Generates JS: document.cookie = "key=value; Path=/; Expires=Thu, 01 Jan 20xx 00:00:01 GMT;"
263
-        // for each cookie which is available in the application context.
264
-        [script appendString:@"(function () {\n"];
265
-        for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
266
-          [script appendFormat:@"document.cookie = %@ + '=' + %@",
267
-            RCTJSONStringify(cookie.name, NULL),
268
-            RCTJSONStringify(cookie.value, NULL)];
269
-          if (cookie.path) {
270
-            [script appendFormat:@" + '; Path=' + %@", RCTJSONStringify(cookie.path, NULL)];
271
-          }
272
-          if (cookie.expiresDate) {
273
-            [script appendFormat:@" + '; Expires=' + new Date(%f).toUTCString()",
274
-              cookie.expiresDate.timeIntervalSince1970 * 1000
275
-            ];
276
-          }
277
-          [script appendString:@";\n"];
271
+        if (cookie.expiresDate) {
272
+          [script appendFormat:@" + '; Expires=' + new Date(%f).toUTCString()",
273
+            cookie.expiresDate.timeIntervalSince1970 * 1000
274
+          ];
278 275
         }
279
-        [script appendString:@"})();\n"];
280
-
281
-        WKUserScript* cookieInScript = [[WKUserScript alloc] initWithSource:script
282
-                                                              injectionTime:WKUserScriptInjectionTimeAtDocumentStart
283
-                                                           forMainFrameOnly:YES];
284
-        [wkWebViewConfig.userContentController addUserScript:cookieInScript];
276
+        [script appendString:@";\n"];
285 277
       }
278
+      [script appendString:@"})();\n"];
279
+
280
+      WKUserScript* cookieInScript = [[WKUserScript alloc] initWithSource:script
281
+                                                            injectionTime:WKUserScriptInjectionTimeAtDocumentStart
282
+                                                         forMainFrameOnly:YES];
283
+      [wkWebViewConfig.userContentController addUserScript:cookieInScript];
286 284
     }
285
+  }
286
+  
287
+  return wkWebViewConfig;
288
+}
287 289
 
290
+- (void)didMoveToWindow
291
+{
292
+  if (self.window != nil && _webView == nil) {
293
+    WKWebViewConfiguration *wkWebViewConfig = [self setUpWkWebViewConfig];
288 294
     _webView = [[WKWebView alloc] initWithFrame:self.bounds configuration: wkWebViewConfig];
289 295
     [self setBackgroundColor: _savedBackgroundColor];
290 296
     _webView.scrollView.delegate = self;

+ 6
- 8
package.json View File

@@ -8,14 +8,12 @@
8 8
     "Thibault Malbranche <malbranche.thibault@gmail.com>"
9 9
   ],
10 10
   "license": "MIT",
11
-  "version": "8.0.2",
11
+  "version": "8.0.3",
12 12
   "homepage": "https://github.com/react-native-community/react-native-webview#readme",
13 13
   "scripts": {
14 14
     "start": "node node_modules/react-native/local-cli/cli.js start",
15 15
     "start:android": "react-native run-android --root example/",
16 16
     "start:ios": "react-native run-ios --project-path example/ios --scheme RNCWebViewExample",
17
-    "build:e2e:ios": "detox build -c ios",
18
-    "build:e2e:android": "detox build -c android",
19 17
     "ci": "CI=true && yarn lint && yarn test",
20 18
     "ci:publish": "yarn semantic-release",
21 19
     "lint": "yarn tsc --noEmit && yarn eslint ./src --ext .ts,.tsx",
@@ -28,7 +26,7 @@
28 26
     "type": "Component"
29 27
   },
30 28
   "peerDependencies": {
31
-    "react": "^16.8",
29
+    "react": "^16.9",
32 30
     "react-native": ">=0.60 <0.62"
33 31
   },
34 32
   "dependencies": {
@@ -41,7 +39,7 @@
41 39
     "@semantic-release/git": "7.0.16",
42 40
     "@types/invariant": "^2.2.30",
43 41
     "@types/jest": "24.0.18",
44
-    "@types/react": "16.8.6",
42
+    "@types/react": "16.8.8",
45 43
     "@types/react-native": "0.60.11",
46 44
     "@typescript-eslint/eslint-plugin": "2.1.0",
47 45
     "@typescript-eslint/parser": "2.1.0",
@@ -57,8 +55,8 @@
57 55
     "eslint-plugin-react-native": "3.7.0",
58 56
     "jest": "24.9.0",
59 57
     "metro-react-native-babel-preset": "0.54.1",
60
-    "react": "16.6.3",
61
-    "react-native": "0.60.5",
58
+    "react": "16.9.0",
59
+    "react-native": "0.61.5",
62 60
     "semantic-release": "15.13.24",
63 61
     "typescript": "3.6.2"
64 62
   },
@@ -74,4 +72,4 @@
74 72
     "index.d.ts",
75 73
     "react-native-webview.podspec"
76 74
   ]
77
-}
75
+}

+ 10
- 4
src/WebViewShared.tsx View File

@@ -44,11 +44,17 @@ const createOnShouldStartLoadWithRequest = (
44 44
     const { url, lockIdentifier } = nativeEvent;
45 45
 
46 46
     if (!passesWhitelist(compileWhitelist(originWhitelist), url)) {
47
-      Linking.openURL(url);
47
+      Linking.canOpenURL(url).then((supported) => {
48
+        if (supported) {
49
+          return Linking.openURL(url);
50
+        }
51
+        console.warn(`Can't open url: ${url}`);
52
+        return undefined;
53
+      }).catch(e => {
54
+        console.warn('Error opening URL: ', e);
55
+      });
48 56
       shouldStart = false;
49
-    }
50
-
51
-    if (onShouldStartLoadWithRequest) {
57
+    } else if (onShouldStartLoadWithRequest) {
52 58
       shouldStart = onShouldStartLoadWithRequest(nativeEvent);
53 59
     }
54 60
 

+ 80
- 8
src/__tests__/WebViewShared-test.js View File

@@ -5,6 +5,31 @@ import {
5 5
   createOnShouldStartLoadWithRequest,
6 6
 } from '../WebViewShared';
7 7
 
8
+Linking.openURL.mockResolvedValue(undefined);
9
+Linking.canOpenURL.mockResolvedValue(true);
10
+
11
+// The tests that call createOnShouldStartLoadWithRequest will cause a promise
12
+// to get kicked off (by calling the mocked `Linking.canOpenURL`) that the tests
13
+// _need_ to get run to completion _before_ doing any `expect`ing. The reason
14
+// is: once that promise is resolved another function should get run which will
15
+// call `Linking.openURL`, and we want to test that.
16
+//
17
+// Normally we would probably do something like `await
18
+// createShouldStartLoadWithRequest(...)` in the tests, but that doesn't work
19
+// here because the promise that gets kicked off is not returned (because
20
+// non-test code doesn't need to know about it).
21
+//
22
+// The tests thus need a way to "flush any pending promises" (to make sure
23
+// pending promises run to completion) before doing any `expect`ing. `jest`
24
+// doesn't provide a way to do this out of the box, but we can use this function
25
+// to do it.
26
+//
27
+// See this issue for more discussion: https://github.com/facebook/jest/issues/2157
28
+function flushPromises() {
29
+  return new Promise(resolve => setImmediate(resolve));
30
+}
31
+
32
+
8 33
 describe('WebViewShared', () => {
9 34
   test('exports defaultOriginWhitelist', () => {
10 35
     expect(defaultOriginWhitelist).toMatchSnapshot();
@@ -21,29 +46,35 @@ describe('WebViewShared', () => {
21 46
 
22 47
     const loadRequest = jest.fn();
23 48
 
24
-    test('loadRequest is called without onShouldStartLoadWithRequest override', () => {
49
+    test('loadRequest is called without onShouldStartLoadWithRequest override', async () => {
25 50
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
26 51
         loadRequest,
27 52
         defaultOriginWhitelist,
28 53
       );
29 54
 
30 55
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'https://www.example.com/', lockIdentifier: 1 } });
56
+      
57
+      await flushPromises();
58
+
31 59
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
32 60
       expect(loadRequest).toHaveBeenCalledWith(true, 'https://www.example.com/', 1);
33 61
     });
34 62
 
35
-    test('Linking.openURL is called without onShouldStartLoadWithRequest override', () => {
63
+    test('Linking.openURL is called without onShouldStartLoadWithRequest override', async () => {
36 64
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
37 65
         loadRequest,
38 66
         defaultOriginWhitelist,
39 67
       );
40 68
 
41 69
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'invalid://example.com/', lockIdentifier: 2 } });
70
+      
71
+      await flushPromises();
72
+
42 73
       expect(Linking.openURL).toHaveBeenCalledWith('invalid://example.com/');
43 74
       expect(loadRequest).toHaveBeenCalledWith(false, 'invalid://example.com/', 2);
44 75
     });
45 76
 
46
-    test('loadRequest with true onShouldStartLoadWithRequest override is called', () => {
77
+    test('loadRequest with true onShouldStartLoadWithRequest override is called', async () => {
47 78
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
48 79
         loadRequest,
49 80
         defaultOriginWhitelist,
@@ -51,23 +82,32 @@ describe('WebViewShared', () => {
51 82
       );
52 83
 
53 84
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'https://www.example.com/', lockIdentifier: 1 } });
85
+
86
+      await flushPromises();
87
+
54 88
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
55 89
       expect(loadRequest).toHaveBeenLastCalledWith(true, 'https://www.example.com/', 1);
56 90
     });
57 91
 
58
-    test('Linking.openURL with true onShouldStartLoadWithRequest override is called for links not passing the whitelist', () => {
92
+    test('Linking.openURL with true onShouldStartLoadWithRequest override is called for links not passing the whitelist', async () => {
59 93
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
60 94
         loadRequest,
61 95
         defaultOriginWhitelist,
62 96
         alwaysTrueOnShouldStartLoadWithRequest,
63 97
       );
64 98
 
99
+      var a = 10;
65 100
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'invalid://example.com/', lockIdentifier: 1 } });
101
+
102
+      await flushPromises();
103
+
66 104
       expect(Linking.openURL).toHaveBeenLastCalledWith('invalid://example.com/');
67
-      expect(loadRequest).toHaveBeenLastCalledWith(true, 'invalid://example.com/', 1);
105
+      // We don't expect the URL to have been loaded in the WebView because it
106
+      // is not in the origin whitelist
107
+      expect(loadRequest).toHaveBeenLastCalledWith(false, 'invalid://example.com/', 1);
68 108
     });
69 109
 
70
-    test('loadRequest with false onShouldStartLoadWithRequest override is called', () => {
110
+    test('loadRequest with false onShouldStartLoadWithRequest override is called', async () => {
71 111
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
72 112
         loadRequest,
73 113
         defaultOriginWhitelist,
@@ -75,60 +115,92 @@ describe('WebViewShared', () => {
75 115
       );
76 116
 
77 117
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'https://www.example.com/', lockIdentifier: 1 } });
118
+
119
+      await flushPromises();
120
+
78 121
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
79 122
       expect(loadRequest).toHaveBeenLastCalledWith(false, 'https://www.example.com/', 1);
80 123
     });
81 124
 
82
-    test('loadRequest with limited whitelist', () => {
125
+    test('loadRequest with limited whitelist', async () => {
83 126
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
84 127
         loadRequest,
85 128
         ['https://*'],
86 129
       );
87 130
 
88 131
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'https://www.example.com/', lockIdentifier: 1 } });
132
+      
133
+      await flushPromises();
134
+
89 135
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
90 136
       expect(loadRequest).toHaveBeenLastCalledWith(true, 'https://www.example.com/', 1);
91 137
 
92 138
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'http://insecure.com/', lockIdentifier: 2 } });
139
+
140
+      await flushPromises();
141
+
93 142
       expect(Linking.openURL).toHaveBeenLastCalledWith('http://insecure.com/');
94 143
       expect(loadRequest).toHaveBeenLastCalledWith(false, 'http://insecure.com/', 2);
95 144
 
96 145
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'git+https://insecure.com/', lockIdentifier: 3 } });
146
+      
147
+      await flushPromises();
148
+
97 149
       expect(Linking.openURL).toHaveBeenLastCalledWith('git+https://insecure.com/');
98 150
       expect(loadRequest).toHaveBeenLastCalledWith(false, 'git+https://insecure.com/', 3);
99 151
 
100 152
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'fakehttps://insecure.com/', lockIdentifier: 4 } });
153
+      
154
+      await flushPromises();
155
+
101 156
       expect(Linking.openURL).toHaveBeenLastCalledWith('fakehttps://insecure.com/');
102 157
       expect(loadRequest).toHaveBeenLastCalledWith(false, 'fakehttps://insecure.com/', 4);
103 158
     });
104 159
 
105
-    test('loadRequest allows for valid URIs', () => {
160
+    test('loadRequest allows for valid URIs', async () => {
106 161
       const onShouldStartLoadWithRequest = createOnShouldStartLoadWithRequest(
107 162
           loadRequest,
108 163
           ['plus+https://*', 'DOT.https://*', 'dash-https://*', '0invalid://*', '+invalid://*'],
109 164
       );
110 165
 
111 166
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'plus+https://www.example.com/', lockIdentifier: 1 } });
167
+      
168
+      await flushPromises();
112 169
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
113 170
       expect(loadRequest).toHaveBeenLastCalledWith(true, 'plus+https://www.example.com/', 1);
114 171
 
115 172
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'DOT.https://www.example.com/', lockIdentifier: 2 } });
173
+
174
+      await flushPromises();
175
+
116 176
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
117 177
       expect(loadRequest).toHaveBeenLastCalledWith(true, 'DOT.https://www.example.com/', 2);
118 178
 
119 179
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'dash-https://www.example.com/', lockIdentifier: 3 } });
180
+      
181
+      await flushPromises();
182
+
120 183
       expect(Linking.openURL).toHaveBeenCalledTimes(0);
121 184
       expect(loadRequest).toHaveBeenLastCalledWith(true, 'dash-https://www.example.com/', 3);
122 185
 
123 186
       onShouldStartLoadWithRequest({ nativeEvent: { url: '0invalid://www.example.com/', lockIdentifier: 4 } });
187
+
188
+      await flushPromises();
189
+
124 190
       expect(Linking.openURL).toHaveBeenLastCalledWith('0invalid://www.example.com/');
125 191
       expect(loadRequest).toHaveBeenLastCalledWith(false, '0invalid://www.example.com/', 4);
126 192
 
127 193
       onShouldStartLoadWithRequest({ nativeEvent: { url: '+invalid://www.example.com/', lockIdentifier: 5 } });
194
+      
195
+      await flushPromises();
196
+
128 197
       expect(Linking.openURL).toHaveBeenLastCalledWith('+invalid://www.example.com/');
129 198
       expect(loadRequest).toHaveBeenLastCalledWith(false, '+invalid://www.example.com/', 5);
130 199
 
131 200
       onShouldStartLoadWithRequest({ nativeEvent: { url: 'FAKE+plus+https://www.example.com/', lockIdentifier: 6 } });
201
+
202
+      await flushPromises();
203
+
132 204
       expect(Linking.openURL).toHaveBeenLastCalledWith('FAKE+plus+https://www.example.com/');
133 205
       expect(loadRequest).toHaveBeenLastCalledWith(false, 'FAKE+plus+https://www.example.com/', 6);
134 206
     });

+ 289
- 206
yarn.lock View File

@@ -9,6 +9,13 @@
9 9
   dependencies:
10 10
     "@babel/highlight" "^7.0.0"
11 11
 
12
+"@babel/code-frame@^7.8.3":
13
+  version "7.8.3"
14
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
15
+  integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
16
+  dependencies:
17
+    "@babel/highlight" "^7.8.3"
18
+
12 19
 "@babel/core@7.4.5":
13 20
   version "7.4.5"
14 21
   resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.5.tgz#081f97e8ffca65a9b4b0fdc7e274e703f000c06a"
@@ -60,12 +67,12 @@
60 67
     source-map "^0.5.0"
61 68
     trim-right "^1.0.1"
62 69
 
63
-"@babel/generator@^7.4.4", "@babel/generator@^7.7.4":
64
-  version "7.7.7"
65
-  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.7.tgz#859ac733c44c74148e1a72980a64ec84b85f4f45"
66
-  integrity sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==
70
+"@babel/generator@^7.4.4", "@babel/generator@^7.8.3":
71
+  version "7.8.3"
72
+  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.3.tgz#0e22c005b0a94c1c74eafe19ef78ce53a4d45c03"
73
+  integrity sha512-WjoPk8hRpDRqqzRpvaR8/gDUPkrnOOeuT2m8cNICJtZH6mwaCo3v0OKMI7Y6SM1pBtyijnLtAL0HDi41pf41ug==
67 74
   dependencies:
68
-    "@babel/types" "^7.7.4"
75
+    "@babel/types" "^7.8.3"
69 76
     jsesc "^2.5.1"
70 77
     lodash "^4.17.13"
71 78
     source-map "^0.5.0"
@@ -140,14 +147,14 @@
140 147
     "@babel/template" "^7.1.0"
141 148
     "@babel/types" "^7.0.0"
142 149
 
143
-"@babel/helper-function-name@^7.7.4":
144
-  version "7.7.4"
145
-  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e"
146
-  integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==
150
+"@babel/helper-function-name@^7.8.3":
151
+  version "7.8.3"
152
+  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca"
153
+  integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==
147 154
   dependencies:
148
-    "@babel/helper-get-function-arity" "^7.7.4"
149
-    "@babel/template" "^7.7.4"
150
-    "@babel/types" "^7.7.4"
155
+    "@babel/helper-get-function-arity" "^7.8.3"
156
+    "@babel/template" "^7.8.3"
157
+    "@babel/types" "^7.8.3"
151 158
 
152 159
 "@babel/helper-get-function-arity@^7.0.0":
153 160
   version "7.0.0"
@@ -156,12 +163,12 @@
156 163
   dependencies:
157 164
     "@babel/types" "^7.0.0"
158 165
 
159
-"@babel/helper-get-function-arity@^7.7.4":
160
-  version "7.7.4"
161
-  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0"
162
-  integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==
166
+"@babel/helper-get-function-arity@^7.8.3":
167
+  version "7.8.3"
168
+  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
169
+  integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
163 170
   dependencies:
164
-    "@babel/types" "^7.7.4"
171
+    "@babel/types" "^7.8.3"
165 172
 
166 173
 "@babel/helper-hoist-variables@^7.4.4":
167 174
   version "7.4.4"
@@ -251,12 +258,12 @@
251 258
   dependencies:
252 259
     "@babel/types" "^7.4.4"
253 260
 
254
-"@babel/helper-split-export-declaration@^7.7.4":
255
-  version "7.7.4"
256
-  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8"
257
-  integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==
261
+"@babel/helper-split-export-declaration@^7.8.3":
262
+  version "7.8.3"
263
+  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
264
+  integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
258 265
   dependencies:
259
-    "@babel/types" "^7.7.4"
266
+    "@babel/types" "^7.8.3"
260 267
 
261 268
 "@babel/helper-wrap-function@^7.1.0":
262 269
   version "7.2.0"
@@ -269,13 +276,13 @@
269 276
     "@babel/types" "^7.2.0"
270 277
 
271 278
 "@babel/helpers@^7.4.4":
272
-  version "7.7.4"
273
-  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302"
274
-  integrity sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==
279
+  version "7.8.3"
280
+  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.3.tgz#382fbb0382ce7c4ce905945ab9641d688336ce85"
281
+  integrity sha512-LmU3q9Pah/XyZU89QvBgGt+BCsTPoQa+73RxAQh8fb8qkDyIfeQnmgs+hvzhTCKTzqOyk7JTkS3MS1S8Mq5yrQ==
275 282
   dependencies:
276
-    "@babel/template" "^7.7.4"
277
-    "@babel/traverse" "^7.7.4"
278
-    "@babel/types" "^7.7.4"
283
+    "@babel/template" "^7.8.3"
284
+    "@babel/traverse" "^7.8.3"
285
+    "@babel/types" "^7.8.3"
279 286
 
280 287
 "@babel/helpers@^7.5.5":
281 288
   version "7.5.5"
@@ -295,15 +302,24 @@
295 302
     esutils "^2.0.2"
296 303
     js-tokens "^4.0.0"
297 304
 
305
+"@babel/highlight@^7.8.3":
306
+  version "7.8.3"
307
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.8.3.tgz#28f173d04223eaaa59bc1d439a3836e6d1265797"
308
+  integrity sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==
309
+  dependencies:
310
+    chalk "^2.0.0"
311
+    esutils "^2.0.2"
312
+    js-tokens "^4.0.0"
313
+
298 314
 "@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
299 315
   version "7.5.5"
300 316
   resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
301 317
   integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
302 318
 
303
-"@babel/parser@^7.4.5", "@babel/parser@^7.7.4":
304
-  version "7.7.7"
305
-  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.7.tgz#1b886595419cf92d811316d5b715a53ff38b4937"
306
-  integrity sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==
319
+"@babel/parser@^7.4.5", "@babel/parser@^7.8.3":
320
+  version "7.8.3"
321
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081"
322
+  integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ==
307 323
 
308 324
 "@babel/plugin-external-helpers@^7.0.0":
309 325
   version "7.2.0"
@@ -699,14 +715,14 @@
699 715
     "@babel/parser" "^7.4.4"
700 716
     "@babel/types" "^7.4.4"
701 717
 
702
-"@babel/template@^7.7.4":
703
-  version "7.7.4"
704
-  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b"
705
-  integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==
718
+"@babel/template@^7.8.3":
719
+  version "7.8.3"
720
+  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.3.tgz#e02ad04fe262a657809327f578056ca15fd4d1b8"
721
+  integrity sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==
706 722
   dependencies:
707
-    "@babel/code-frame" "^7.0.0"
708
-    "@babel/parser" "^7.7.4"
709
-    "@babel/types" "^7.7.4"
723
+    "@babel/code-frame" "^7.8.3"
724
+    "@babel/parser" "^7.8.3"
725
+    "@babel/types" "^7.8.3"
710 726
 
711 727
 "@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
712 728
   version "7.5.5"
@@ -723,17 +739,17 @@
723 739
     globals "^11.1.0"
724 740
     lodash "^4.17.13"
725 741
 
726
-"@babel/traverse@^7.4.5", "@babel/traverse@^7.7.4":
727
-  version "7.7.4"
728
-  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558"
729
-  integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==
730
-  dependencies:
731
-    "@babel/code-frame" "^7.5.5"
732
-    "@babel/generator" "^7.7.4"
733
-    "@babel/helper-function-name" "^7.7.4"
734
-    "@babel/helper-split-export-declaration" "^7.7.4"
735
-    "@babel/parser" "^7.7.4"
736
-    "@babel/types" "^7.7.4"
742
+"@babel/traverse@^7.4.5", "@babel/traverse@^7.8.3":
743
+  version "7.8.3"
744
+  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a"
745
+  integrity sha512-we+a2lti+eEImHmEXp7bM9cTxGzxPmBiVJlLVD+FuuQMeeO7RaDbutbgeheDkw+Xe3mCfJHnGOWLswT74m2IPg==
746
+  dependencies:
747
+    "@babel/code-frame" "^7.8.3"
748
+    "@babel/generator" "^7.8.3"
749
+    "@babel/helper-function-name" "^7.8.3"
750
+    "@babel/helper-split-export-declaration" "^7.8.3"
751
+    "@babel/parser" "^7.8.3"
752
+    "@babel/types" "^7.8.3"
737 753
     debug "^4.1.0"
738 754
     globals "^11.1.0"
739 755
     lodash "^4.17.13"
@@ -747,10 +763,10 @@
747 763
     lodash "^4.17.13"
748 764
     to-fast-properties "^2.0.0"
749 765
 
750
-"@babel/types@^7.7.4":
751
-  version "7.7.4"
752
-  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193"
753
-  integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==
766
+"@babel/types@^7.8.3":
767
+  version "7.8.3"
768
+  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
769
+  integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
754 770
   dependencies:
755 771
     esutils "^2.0.2"
756 772
     lodash "^4.17.13"
@@ -1012,12 +1028,19 @@
1012 1028
     once "^1.4.0"
1013 1029
     universal-user-agent "^4.0.0"
1014 1030
 
1015
-"@react-native-community/cli-platform-android@^2.6.0", "@react-native-community/cli-platform-android@^2.9.0":
1016
-  version "2.9.0"
1017
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.9.0.tgz#28831e61ce565a2c7d1905852fce1eecfd33cb5e"
1018
-  integrity sha512-VEQs4Q6R5tnlYFrQIFoPEWjLc43whRHC9HeH+idbFymwDqysLVUffQbb9D6PJUj+C/AvrDhBhU6S3tDjGbSsag==
1031
+"@react-native-community/cli-debugger-ui@^3.0.0":
1032
+  version "3.0.0"
1033
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-3.0.0.tgz#d01d08d1e5ddc1633d82c7d84d48fff07bd39416"
1034
+  integrity sha512-m3X+iWLsK/H7/b7PpbNO33eQayR/+M26la4ZbYe1KRke5Umg4PIWsvg21O8Tw4uJcY8LA5hsP+rBi/syBkBf0g==
1019 1035
   dependencies:
1020
-    "@react-native-community/cli-tools" "^2.8.3"
1036
+    serve-static "^1.13.1"
1037
+
1038
+"@react-native-community/cli-platform-android@^3.0.0":
1039
+  version "3.0.3"
1040
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-3.0.3.tgz#e652abce79a7c1e3a8280228123e99df2c4b97b6"
1041
+  integrity sha512-rNO9DmRiVhB6aP2DVUjEJv7ecriTARDZND88ny3xNVUkrD1Y+zwF6aZu3eoT52VXOxLCSLiJzz19OiyGmfqxYg==
1042
+  dependencies:
1043
+    "@react-native-community/cli-tools" "^3.0.0"
1021 1044
     chalk "^2.4.2"
1022 1045
     execa "^1.0.0"
1023 1046
     jetifier "^1.6.2"
@@ -1025,35 +1048,42 @@
1025 1048
     slash "^3.0.0"
1026 1049
     xmldoc "^1.1.2"
1027 1050
 
1028
-"@react-native-community/cli-platform-ios@^2.4.1", "@react-native-community/cli-platform-ios@^2.9.0":
1029
-  version "2.9.0"
1030
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.9.0.tgz#21adb8ee813d6ca6fd9d4d9be63f92024f7e2fe7"
1031
-  integrity sha512-vg6EOamtFaaQ02FiWu+jzJTfeTJ0OVjJSAoR2rhJKNye6RgJLoQlfp0Hg3waF6XrO72a7afYZsPdKSlN3ewlHg==
1051
+"@react-native-community/cli-platform-ios@^3.0.0":
1052
+  version "3.0.0"
1053
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-3.0.0.tgz#3a48a449c0c33af3b0b3d19d3256de99388fe15f"
1054
+  integrity sha512-QoNVlDj8eMXRZk9uktPFsctHurQpv9jKmiu6mQii4NEtT2npE7g1hbWpRNojutBsfgmCdQGDHd9uB54eeCnYgg==
1032 1055
   dependencies:
1033
-    "@react-native-community/cli-tools" "^2.8.3"
1056
+    "@react-native-community/cli-tools" "^3.0.0"
1034 1057
     chalk "^2.4.2"
1058
+    js-yaml "^3.13.1"
1035 1059
     xcode "^2.0.0"
1036 1060
 
1037
-"@react-native-community/cli-tools@^2.8.3":
1038
-  version "2.8.3"
1039
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.8.3.tgz#0e2249f48cf4603fb8d740a9f0715c31ac131ceb"
1040
-  integrity sha512-N5Pz+pR+GFq3JApjd0SW4jp9KC7kbKsMH65QLRh30JNsxdPvNkYox6/ZZdkvdXaI5ev3EckR7eqlcwi5gpVTYQ==
1061
+"@react-native-community/cli-tools@^3.0.0":
1062
+  version "3.0.0"
1063
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-3.0.0.tgz#fe48b80822ed7e49b8af051f9fe41e22a2a710b1"
1064
+  integrity sha512-8IhQKZdf3E4CR8T7HhkPGgorot/cLkRDgneJFDSWk/wCYZAuUh4NEAdumQV7N0jLSMWX7xxiWUPi94lOBxVY9g==
1041 1065
   dependencies:
1042 1066
     chalk "^2.4.2"
1043 1067
     lodash "^4.17.5"
1044 1068
     mime "^2.4.1"
1045 1069
     node-fetch "^2.5.0"
1046 1070
 
1047
-"@react-native-community/cli@^2.6.0":
1048
-  version "2.9.0"
1049
-  resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.9.0.tgz#f0d18dc3e5a8f68e3d6ad353c444dc2f08d3fbdc"
1050
-  integrity sha512-6TYkrR1pwIEPpiPZnOYscCGr5Xh8RijqBPVAOGTaEdpQQpc/J7GDPrePwbyTzwmCPtiK6XT+T5+1AiAK5bz/sw==
1071
+"@react-native-community/cli-types@^3.0.0":
1072
+  version "3.0.0"
1073
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli-types/-/cli-types-3.0.0.tgz#488d46605cb05e88537e030f38da236eeda74652"
1074
+  integrity sha512-ng6Tm537E/M42GjE4TRUxQyL8sRfClcL7bQWblOCoxPZzJ2J3bdALsjeG3vDnVCIfI/R0AeFalN9KjMt0+Z/Zg==
1075
+
1076
+"@react-native-community/cli@^3.0.0":
1077
+  version "3.0.4"
1078
+  resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-3.0.4.tgz#a9dba1bc77855a6e45fccaabb017360645d936bb"
1079
+  integrity sha512-kt+ENtC+eRUSfWPbbpx3r7fAQDcFwgM03VW/lBdVAUjkNxffPFT2GGdK23CJSBOXTjRSiGuwhvwH4Z28PdrlRA==
1051 1080
   dependencies:
1052 1081
     "@hapi/joi" "^15.0.3"
1053
-    "@react-native-community/cli-platform-android" "^2.9.0"
1054
-    "@react-native-community/cli-platform-ios" "^2.9.0"
1055
-    "@react-native-community/cli-tools" "^2.8.3"
1082
+    "@react-native-community/cli-debugger-ui" "^3.0.0"
1083
+    "@react-native-community/cli-tools" "^3.0.0"
1084
+    "@react-native-community/cli-types" "^3.0.0"
1056 1085
     chalk "^2.4.2"
1086
+    command-exists "^1.2.8"
1057 1087
     commander "^2.19.0"
1058 1088
     compression "^1.7.1"
1059 1089
     connect "^3.6.5"
@@ -1062,15 +1092,16 @@
1062 1092
     envinfo "^7.1.0"
1063 1093
     errorhandler "^1.5.0"
1064 1094
     execa "^1.0.0"
1095
+    find-up "^4.1.0"
1065 1096
     fs-extra "^7.0.1"
1066 1097
     glob "^7.1.1"
1067 1098
     graceful-fs "^4.1.3"
1068 1099
     inquirer "^3.0.6"
1069 1100
     lodash "^4.17.5"
1070
-    metro "^0.54.1"
1071
-    metro-config "^0.54.1"
1072
-    metro-core "^0.54.1"
1073
-    metro-react-native-babel-transformer "^0.54.1"
1101
+    metro "^0.56.0"
1102
+    metro-config "^0.56.0"
1103
+    metro-core "^0.56.0"
1104
+    metro-react-native-babel-transformer "^0.56.0"
1074 1105
     minimist "^1.2.0"
1075 1106
     mkdirp "^0.5.1"
1076 1107
     morgan "^1.9.0"
@@ -1078,9 +1109,12 @@
1078 1109
     open "^6.2.0"
1079 1110
     ora "^3.4.0"
1080 1111
     plist "^3.0.0"
1081
-    semver "^5.0.3"
1112
+    semver "^6.3.0"
1082 1113
     serve-static "^1.13.1"
1083 1114
     shell-quote "1.6.1"
1115
+    strip-ansi "^5.2.0"
1116
+    sudo-prompt "^9.0.0"
1117
+    wcwidth "^1.0.1"
1084 1118
     ws "^1.1.0"
1085 1119
 
1086 1120
 "@semantic-release/commit-analyzer@^6.1.0":
@@ -1302,10 +1336,10 @@
1302 1336
     "@types/prop-types" "*"
1303 1337
     csstype "^2.2.0"
1304 1338
 
1305
-"@types/react@16.8.6":
1306
-  version "16.8.6"
1307
-  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.6.tgz#fa1de3fe56cc9b6afeddc73d093d7f30fd5e31cc"
1308
-  integrity sha512-bN9qDjEMltmHrl0PZRI4IF2AbB7V5UlRfG+OOduckVnRQ4VzXVSzy/1eLAh778IEqhTnW0mmgL9yShfinNverA==
1339
+"@types/react@16.8.8":
1340
+  version "16.8.8"
1341
+  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.8.tgz#4b60a469fd2469f7aa6eaa0f8cfbc51f6d76e662"
1342
+  integrity sha512-xwEvyet96u7WnB96kqY0yY7qxx/pEpU51QeACkKFtrgjjXITQn0oO1iwPEraXVgh10ZFPix7gs1R4OJXF7P5sg==
1309 1343
   dependencies:
1310 1344
     "@types/prop-types" "*"
1311 1345
     csstype "^2.2.0"
@@ -2408,6 +2442,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6:
2408 2442
   dependencies:
2409 2443
     delayed-stream "~1.0.0"
2410 2444
 
2445
+command-exists@^1.2.8:
2446
+  version "1.2.8"
2447
+  resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
2448
+  integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw==
2449
+
2411 2450
 commander@^2.11.0, commander@^2.19.0, commander@~2.20.0:
2412 2451
   version "2.20.0"
2413 2452
   resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422"
@@ -3708,7 +3747,7 @@ find-up@^3.0.0:
3708 3747
   dependencies:
3709 3748
     locate-path "^3.0.0"
3710 3749
 
3711
-find-up@^4.0.0:
3750
+find-up@^4.0.0, find-up@^4.1.0:
3712 3751
   version "4.1.0"
3713 3752
   resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
3714 3753
   integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -4125,10 +4164,10 @@ has@^1.0.1, has@^1.0.3:
4125 4164
   dependencies:
4126 4165
     function-bind "^1.1.1"
4127 4166
 
4128
-hermesvm@^0.1.0:
4129
-  version "0.1.1"
4130
-  resolved "https://registry.yarnpkg.com/hermesvm/-/hermesvm-0.1.1.tgz#bd1df92b4dc504e261c23df34864daf24b844d03"
4131
-  integrity sha512-EosSDeUqTTGvlc9vQiy5Y/9GBlucEyo6lYuxg/FnukHCD/CP3NYeDAGV54TyZ19FgSqMEoPgOH9cyxvv8epQ1g==
4167
+hermes-engine@^0.2.1:
4168
+  version "0.2.1"
4169
+  resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.2.1.tgz#25c0f1ff852512a92cb5c5cc47cf967e1e722ea2"
4170
+  integrity sha512-eNHUQHuadDMJARpaqvlCZoK/Nitpj6oywq3vQ3wCwEsww5morX34mW5PmKWQTO7aU0ck0hgulxR+EVDlXygGxQ==
4132 4171
 
4133 4172
 hook-std@^2.0.0:
4134 4173
   version "2.0.0"
@@ -5151,7 +5190,7 @@ jsbn@~0.1.0:
5151 5190
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
5152 5191
   integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
5153 5192
 
5154
-jsc-android@245459.0.0:
5193
+jsc-android@^245459.0.0:
5155 5194
   version "245459.0.0"
5156 5195
   resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-245459.0.0.tgz#e584258dd0b04c9159a27fb104cd5d491fd202c9"
5157 5196
   integrity sha512-wkjURqwaB1daNkDi2OYYbsLnIdC/lUM2nPXQKRs5pqEU9chDg435bjvo+LSaHotDENygHQDHe+ntUkkw2gwMtg==
@@ -5863,10 +5902,10 @@ merge2@^1.2.3:
5863 5902
   resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.4.tgz#c9269589e6885a60cf80605d9522d4b67ca646e3"
5864 5903
   integrity sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==
5865 5904
 
5866
-metro-babel-register@0.54.1:
5867
-  version "0.54.1"
5868
-  resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.54.1.tgz#7d2bfe444b1ccef8de99aedc7d9330891d806076"
5869
-  integrity sha512-j3VydgncUG8HP6AZala6GTIt3V01nptodnnOke3JMYLqgk8EJ1LOVOdotK9pXi80o7EmmNKFs/LyyH8z+uAJzQ==
5905
+metro-babel-register@^0.56.0, metro-babel-register@^0.56.4:
5906
+  version "0.56.4"
5907
+  resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.56.4.tgz#b0c627a1cfdd1bdd768f81af79481754e833a902"
5908
+  integrity sha512-Phm6hMluOWYqfykftjJ1jsTpWvbgb49AC/1taxEctxUdRCZlFgZwBleJZAhQYxJD5J+ikFkEbHDzePEXb29KVA==
5870 5909
   dependencies:
5871 5910
     "@babel/core" "^7.0.0"
5872 5911
     "@babel/plugin-proposal-class-properties" "^7.0.0"
@@ -5881,12 +5920,13 @@ metro-babel-register@0.54.1:
5881 5920
     core-js "^2.2.2"
5882 5921
     escape-string-regexp "^1.0.5"
5883 5922
 
5884
-metro-babel-transformer@0.54.1:
5885
-  version "0.54.1"
5886
-  resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz#371ffa2d1118b22cc9e40b3c3ea6738c49dae9dc"
5887
-  integrity sha512-2aiAnuYBdcLV1VINb8ENAA4keIaJIepHgR9+iRvIde+9GSjKnexqx4nNmJN392285gRDp1fVZ7uY0uQawK/A5g==
5923
+metro-babel-transformer@^0.56.4:
5924
+  version "0.56.4"
5925
+  resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.56.4.tgz#fe1d0dc600fcf90201a5bea4d42caea10b801057"
5926
+  integrity sha512-IOi4ILgZvaX7GCGHBJp79paNVOq5QxhhbyqAdEJgDP8bHfl/OVHoVKSypfrsMSKSiBrqxhIjyc4XjkXsQtkx5g==
5888 5927
   dependencies:
5889 5928
     "@babel/core" "^7.0.0"
5929
+    metro-source-map "^0.56.4"
5890 5930
 
5891 5931
 metro-babel7-plugin-react-transform@0.54.1:
5892 5932
   version "0.54.1"
@@ -5895,42 +5935,42 @@ metro-babel7-plugin-react-transform@0.54.1:
5895 5935
   dependencies:
5896 5936
     "@babel/helper-module-imports" "^7.0.0"
5897 5937
 
5898
-metro-cache@0.54.1:
5899
-  version "0.54.1"
5900
-  resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.54.1.tgz#2e9017cbd11106837b8c385c9eb8c8175469a8c1"
5901
-  integrity sha512-RxCFoNcANHXZYi4MIQNnqh68gUnC3bMpzCFJY5pBoqqdrkkn8ibYglBweA0/DW7hx1OZTJWelwS1Dp8xxmE2CA==
5938
+metro-cache@^0.56.4:
5939
+  version "0.56.4"
5940
+  resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.56.4.tgz#542f9f8a35f8fb9d5576f46fd3ab4d4f42851a7e"
5941
+  integrity sha512-d1hiUSKwtRsuMxUhHVJ3tjK2BbpUlJGvTyMWohK8Wxx+0GbnWRWWFcI4vlCzlZfoK0VtZK2MJEl5t7Du1mIniQ==
5902 5942
   dependencies:
5903 5943
     jest-serializer "^24.4.0"
5904
-    metro-core "0.54.1"
5944
+    metro-core "^0.56.4"
5905 5945
     mkdirp "^0.5.1"
5906 5946
     rimraf "^2.5.4"
5907 5947
 
5908
-metro-config@0.54.1, metro-config@^0.54.1:
5909
-  version "0.54.1"
5910
-  resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.54.1.tgz#808b4e17625d9f4e9afa34232778fdf8e63cc8dd"
5911
-  integrity sha512-FpxrA+63rGkPGvGI653dvuSreJzU+eOTILItVnnhmqwn2SAK5V00N/qGTOIJe2YIuWEFXwCzw9lXmANrXbwuGg==
5948
+metro-config@^0.56.0, metro-config@^0.56.4:
5949
+  version "0.56.4"
5950
+  resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.56.4.tgz#338fd8165fba59424cec427c1a881757945e57e9"
5951
+  integrity sha512-O85QDHwWdMn/8ERe13y4a6vbZL0AHyO8atTvL+9BCulLEO+FQBi1iJjr3+ViLa8cf0m5dRftDsa7P47m5euk4A==
5912 5952
   dependencies:
5913 5953
     cosmiconfig "^5.0.5"
5914 5954
     jest-validate "^24.7.0"
5915
-    metro "0.54.1"
5916
-    metro-cache "0.54.1"
5917
-    metro-core "0.54.1"
5955
+    metro "^0.56.4"
5956
+    metro-cache "^0.56.4"
5957
+    metro-core "^0.56.4"
5918 5958
     pretty-format "^24.7.0"
5919 5959
 
5920
-metro-core@0.54.1, metro-core@^0.54.1:
5921
-  version "0.54.1"
5922
-  resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.54.1.tgz#17f6ecc167918da8819d4af5726349e55714954b"
5923
-  integrity sha512-8oz3Ck7QFBzW9dG9tKFhrXHKPu2Ajx3R7eatf61Gl6Jf/tF7PNouv3wHxPsJW3oXDFiwKLszd89+OgleTGkB5g==
5960
+metro-core@^0.56.0, metro-core@^0.56.4:
5961
+  version "0.56.4"
5962
+  resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.56.4.tgz#67cc41b3c0bf66e9c2306f50239a1080b1e82312"
5963
+  integrity sha512-hMzkBdgPt5Zm9nr/1KtIT+A6H7TNiLVCEGG5OiAXj8gTRsA2yy7wAdQpwy0xbE+zi88t/pLOzXpd3ClG/YxyWg==
5924 5964
   dependencies:
5925 5965
     jest-haste-map "^24.7.1"
5926 5966
     lodash.throttle "^4.1.1"
5927
-    metro-resolver "0.54.1"
5967
+    metro-resolver "^0.56.4"
5928 5968
     wordwrap "^1.0.0"
5929 5969
 
5930
-metro-inspector-proxy@0.54.1:
5931
-  version "0.54.1"
5932
-  resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.54.1.tgz#0ef48ee3feb11c6da47aa100151a9bf2a7c358ee"
5933
-  integrity sha512-sf6kNu7PgFW6U+hU7YGZfbAUKAPVvCJhY8YVu/A1RMKH9nNULrCo+jlWh0gWgmFfWRQiAPCElevROg+5somk8A==
5970
+metro-inspector-proxy@^0.56.4:
5971
+  version "0.56.4"
5972
+  resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.56.4.tgz#7343ff3c5908af4fd99e96b6d646e24e99816be4"
5973
+  integrity sha512-E1S3MO25mWKmcLn1UQuCDiS0hf9P2Fwq8sEAX5lBLoZbehepNH+4xJ3xXSY51JX4dozBrE8GGoKL4ll3II40LA==
5934 5974
   dependencies:
5935 5975
     connect "^3.6.5"
5936 5976
     debug "^2.2.0"
@@ -5938,10 +5978,10 @@ metro-inspector-proxy@0.54.1:
5938 5978
     ws "^1.1.5"
5939 5979
     yargs "^9.0.0"
5940 5980
 
5941
-metro-minify-uglify@0.54.1:
5942
-  version "0.54.1"
5943
-  resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.54.1.tgz#54ed1cb349245ce82dba8cc662bbf69fbca142c3"
5944
-  integrity sha512-z+pOPna/8IxD4OhjW6Xo1mV2EszgqqQHqBm1FdmtdF6IpWkQp33qpDBNEi9NGZTOr7pp2bvcxZnvNJdC2lrK9Q==
5981
+metro-minify-uglify@^0.56.4:
5982
+  version "0.56.4"
5983
+  resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.56.4.tgz#13589dfb1d43343608aacb7f78ddfcc052daa63c"
5984
+  integrity sha512-BHgj7+BKEK2pHvWHUR730bIrsZwl8DPtr49x9L0j2grPZ5/UROWXzEr8VZgIss7fl64t845uu1HXNNyuSj2EhA==
5945 5985
   dependencies:
5946 5986
     uglify-es "^3.1.9"
5947 5987
 
@@ -5987,59 +6027,93 @@ metro-react-native-babel-preset@0.54.1:
5987 6027
     metro-babel7-plugin-react-transform "0.54.1"
5988 6028
     react-transform-hmr "^1.0.4"
5989 6029
 
5990
-metro-react-native-babel-transformer@0.54.1, metro-react-native-babel-transformer@^0.54.1:
5991
-  version "0.54.1"
5992
-  resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.54.1.tgz#45b56db004421134e10e739f69e8de50775fef17"
5993
-  integrity sha512-ECw7xG91t8dk/PHdiyoC5SP1s9OQzfmJzG5m0YOZaKtHMe534qTDbncxaKfTI3CP99yti2maXFBRVj+xyvph/g==
6030
+metro-react-native-babel-preset@^0.56.4:
6031
+  version "0.56.4"
6032
+  resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.56.4.tgz#dcedc64b7ff5c0734839458e70eb0ebef6d063a8"
6033
+  integrity sha512-CzbBDM9Rh6w8s1fq+ZqihAh7DDqUAcfo9pPww25+N/eJ7UK436Q7JdfxwdIPpBwLFn6o6MyYn+uwL9OEWBJarA==
6034
+  dependencies:
6035
+    "@babel/plugin-proposal-class-properties" "^7.0.0"
6036
+    "@babel/plugin-proposal-export-default-from" "^7.0.0"
6037
+    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
6038
+    "@babel/plugin-proposal-object-rest-spread" "^7.0.0"
6039
+    "@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
6040
+    "@babel/plugin-proposal-optional-chaining" "^7.0.0"
6041
+    "@babel/plugin-syntax-dynamic-import" "^7.0.0"
6042
+    "@babel/plugin-syntax-export-default-from" "^7.0.0"
6043
+    "@babel/plugin-syntax-flow" "^7.2.0"
6044
+    "@babel/plugin-transform-arrow-functions" "^7.0.0"
6045
+    "@babel/plugin-transform-block-scoping" "^7.0.0"
6046
+    "@babel/plugin-transform-classes" "^7.0.0"
6047
+    "@babel/plugin-transform-computed-properties" "^7.0.0"
6048
+    "@babel/plugin-transform-destructuring" "^7.0.0"
6049
+    "@babel/plugin-transform-exponentiation-operator" "^7.0.0"
6050
+    "@babel/plugin-transform-flow-strip-types" "^7.0.0"
6051
+    "@babel/plugin-transform-for-of" "^7.0.0"
6052
+    "@babel/plugin-transform-function-name" "^7.0.0"
6053
+    "@babel/plugin-transform-literals" "^7.0.0"
6054
+    "@babel/plugin-transform-modules-commonjs" "^7.0.0"
6055
+    "@babel/plugin-transform-object-assign" "^7.0.0"
6056
+    "@babel/plugin-transform-parameters" "^7.0.0"
6057
+    "@babel/plugin-transform-react-display-name" "^7.0.0"
6058
+    "@babel/plugin-transform-react-jsx" "^7.0.0"
6059
+    "@babel/plugin-transform-react-jsx-source" "^7.0.0"
6060
+    "@babel/plugin-transform-regenerator" "^7.0.0"
6061
+    "@babel/plugin-transform-runtime" "^7.0.0"
6062
+    "@babel/plugin-transform-shorthand-properties" "^7.0.0"
6063
+    "@babel/plugin-transform-spread" "^7.0.0"
6064
+    "@babel/plugin-transform-sticky-regex" "^7.0.0"
6065
+    "@babel/plugin-transform-template-literals" "^7.0.0"
6066
+    "@babel/plugin-transform-typescript" "^7.0.0"
6067
+    "@babel/plugin-transform-unicode-regex" "^7.0.0"
6068
+    "@babel/template" "^7.0.0"
6069
+    react-refresh "^0.4.0"
6070
+
6071
+metro-react-native-babel-transformer@^0.56.0:
6072
+  version "0.56.4"
6073
+  resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.56.4.tgz#3c6e48b605c305362ee624e45ff338656e35fc1d"
6074
+  integrity sha512-ng74eutuy1nyGI9+TDzzVAVfEmNPDlapV4msTQMKPi4EFqo/fBn7Ct33ME9l5E51pQBBnxt/UwcpTvd13b29kQ==
5994 6075
   dependencies:
5995 6076
     "@babel/core" "^7.0.0"
5996 6077
     babel-preset-fbjs "^3.1.2"
5997
-    metro-babel-transformer "0.54.1"
5998
-    metro-react-native-babel-preset "0.54.1"
6078
+    metro-babel-transformer "^0.56.4"
6079
+    metro-react-native-babel-preset "^0.56.4"
6080
+    metro-source-map "^0.56.4"
5999 6081
 
6000
-metro-resolver@0.54.1:
6001
-  version "0.54.1"
6002
-  resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.54.1.tgz#0295b38624b678b88b16bf11d47288845132b087"
6003
-  integrity sha512-Byv1LIawYAASy9CFRwzrncYnqaFGLe8vpw178EtzStqP05Hu6hXSqkNTrfoXa+3V9bPFGCrVzFx2NY3gFp2btg==
6082
+metro-resolver@^0.56.4:
6083
+  version "0.56.4"
6084
+  resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.56.4.tgz#9876f57bca37fd1bfcffd733541e2ee4a89fad7f"
6085
+  integrity sha512-Ug4ulVfpkKZ1Wu7mdYj9XLGuOqZTuWCqEhyx3siKTc/2eBwKZQXmiNo5d/IxWNvmwL/87Abeb724I6CMzMfjiQ==
6004 6086
   dependencies:
6005 6087
     absolute-path "^0.0.0"
6006 6088
 
6007
-metro-source-map@0.54.1:
6008
-  version "0.54.1"
6009
-  resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.54.1.tgz#e17bad53c11978197d3c05c9168d799c2e04dcc5"
6010
-  integrity sha512-E9iSYMSUSq5qYi1R2hTQtxH4Mxjzfgr/jaSmQIWi7h3fG2P1qOZNNSzeaeUeTK+s2N/ksVlkcL5kMikol8CDrQ==
6011
-  dependencies:
6012
-    "@babel/traverse" "^7.0.0"
6013
-    "@babel/types" "^7.0.0"
6014
-    source-map "^0.5.6"
6015
-
6016
-metro-source-map@0.55.0, metro-source-map@^0.55.0:
6017
-  version "0.55.0"
6018
-  resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.55.0.tgz#1f6289905f08277c398f2b9b9c13e7e0e5a6f540"
6019
-  integrity sha512-HZODA0KPl5onJNGIztfTHHWurR2nL6Je/X8wwj+bL4ZBB/hSMVeDk7rWReCAvO3twVz7Ztp8Si0jfMmmH4Ruuw==
6089
+metro-source-map@^0.56.0, metro-source-map@^0.56.4:
6090
+  version "0.56.4"
6091
+  resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.56.4.tgz#868ccac3f3519fe14eca358bc186f63651b2b9bc"
6092
+  integrity sha512-f1P9/rpFmG3Z0Jatiw2zvLItx1TwR7mXTSDj4qLDCWeVMB3kEXAr3R0ucumTW8c6HfpJljeRBWzYFXF33fd81g==
6020 6093
   dependencies:
6021 6094
     "@babel/traverse" "^7.0.0"
6022 6095
     "@babel/types" "^7.0.0"
6023 6096
     invariant "^2.2.4"
6024
-    metro-symbolicate "0.55.0"
6025
-    ob1 "0.55.0"
6097
+    metro-symbolicate "^0.56.4"
6098
+    ob1 "^0.56.4"
6026 6099
     source-map "^0.5.6"
6027 6100
     vlq "^1.0.0"
6028 6101
 
6029
-metro-symbolicate@0.55.0:
6030
-  version "0.55.0"
6031
-  resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.55.0.tgz#4086a2adae54b5e44a4911ca572d8a7b03c71fa1"
6032
-  integrity sha512-3r3Gpv5L4U7rBGpIqw5S1nun5MelfUMLRiScJsPRGZVTX3WY1w+zpaQKlWBi5yuHf5dMQ+ZUVbhb02IdrfJ2Fg==
6102
+metro-symbolicate@^0.56.4:
6103
+  version "0.56.4"
6104
+  resolved "https://registry.yarnpkg.com/metro-symbolicate/-/metro-symbolicate-0.56.4.tgz#53e9d40beac9049fa75a3e620ddd47d4907ff015"
6105
+  integrity sha512-8mCNNn6zV5FFKCIcRgI7736Xl+owgvYuy8qanPxZN36f7utiWRYeB+PirEBPcglBk4qQvoy2lT6oPULNXZQbbQ==
6033 6106
   dependencies:
6034
-    metro-source-map "0.55.0"
6107
+    invariant "^2.2.4"
6108
+    metro-source-map "^0.56.4"
6035 6109
     source-map "^0.5.6"
6036 6110
     through2 "^2.0.1"
6037 6111
     vlq "^1.0.0"
6038 6112
 
6039
-metro@0.54.1, metro@^0.54.1:
6040
-  version "0.54.1"
6041
-  resolved "https://registry.yarnpkg.com/metro/-/metro-0.54.1.tgz#a629be00abee5a450a25a8f71c24745f70cc9b44"
6042
-  integrity sha512-6ODPT4mEo4FCpbExRNnQAcZmf1VeNvYOTMj2Na03FjGqhNODHhI2U/wF/Ul5gqTyJ2dVdkXeyvKW3gl/LrnJRg==
6113
+metro@^0.56.0, metro@^0.56.4:
6114
+  version "0.56.4"
6115
+  resolved "https://registry.yarnpkg.com/metro/-/metro-0.56.4.tgz#be7e1380ee6ac3552c25ead8098eab261029e4d7"
6116
+  integrity sha512-Kt3OQJQtQdts0JrKnyGdLpKHDjqYBgIfzvYrvfhmFCkKuZ8aqRlVnvpfjQ4/OBm0Fmm9NyyxbNRD9VIbj7WjnA==
6043 6117
   dependencies:
6044 6118
     "@babel/core" "^7.0.0"
6045 6119
     "@babel/generator" "^7.0.0"
@@ -6068,21 +6142,21 @@ metro@0.54.1, metro@^0.54.1:
6068 6142
     json-stable-stringify "^1.0.1"
6069 6143
     lodash.throttle "^4.1.1"
6070 6144
     merge-stream "^1.0.1"
6071
-    metro-babel-register "0.54.1"
6072
-    metro-babel-transformer "0.54.1"
6073
-    metro-cache "0.54.1"
6074
-    metro-config "0.54.1"
6075
-    metro-core "0.54.1"
6076
-    metro-inspector-proxy "0.54.1"
6077
-    metro-minify-uglify "0.54.1"
6078
-    metro-react-native-babel-preset "0.54.1"
6079
-    metro-resolver "0.54.1"
6080
-    metro-source-map "0.54.1"
6145
+    metro-babel-register "^0.56.4"
6146
+    metro-babel-transformer "^0.56.4"
6147
+    metro-cache "^0.56.4"
6148
+    metro-config "^0.56.4"
6149
+    metro-core "^0.56.4"
6150
+    metro-inspector-proxy "^0.56.4"
6151
+    metro-minify-uglify "^0.56.4"
6152
+    metro-react-native-babel-preset "^0.56.4"
6153
+    metro-resolver "^0.56.4"
6154
+    metro-source-map "^0.56.4"
6155
+    metro-symbolicate "^0.56.4"
6081 6156
     mime-types "2.1.11"
6082 6157
     mkdirp "^0.5.1"
6083 6158
     node-fetch "^2.2.0"
6084 6159
     nullthrows "^1.1.0"
6085
-    react-transform-hmr "^1.0.4"
6086 6160
     resolve "^1.5.0"
6087 6161
     rimraf "^2.5.4"
6088 6162
     serialize-error "^2.1.0"
@@ -6758,10 +6832,10 @@ oauth-sign@~0.9.0:
6758 6832
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
6759 6833
   integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
6760 6834
 
6761
-ob1@0.55.0:
6762
-  version "0.55.0"
6763
-  resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.55.0.tgz#e393b4ae786ef442b3ef2a298ab70d6ec353dbdd"
6764
-  integrity sha512-pfyiMVsUItl8WiRKMT15eCi662pCRAuYTq2+V3UpE+PpFErJI/TvRh/M/l/9TaLlbFr7krJ7gdl+FXJNcybmvw==
6835
+ob1@^0.56.4:
6836
+  version "0.56.4"
6837
+  resolved "https://registry.yarnpkg.com/ob1/-/ob1-0.56.4.tgz#c4acb3baa42f4993a44b35b2da7c8ef443dcccec"
6838
+  integrity sha512-URgFof9z2wotiYFsqlydXtQfGV81gvBI2ODy64xfd3vPo+AYom5PVDX4t4zn23t/O+S2IxqApSQM8uJAybmz7w==
6765 6839
 
6766 6840
 object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
6767 6841
   version "4.1.1"
@@ -7549,7 +7623,7 @@ react-deep-force-update@^1.0.0:
7549 7623
   resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1"
7550 7624
   integrity sha512-WUSQJ4P/wWcusaH+zZmbECOk7H5N2pOIl0vzheeornkIMhu+qrNdGFm0bDZLCb0hSF0jf/kH1SgkNGfBdTc4wA==
7551 7625
 
7552
-react-devtools-core@^3.6.1:
7626
+react-devtools-core@^3.6.3:
7553 7627
   version "3.6.3"
7554 7628
   resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814"
7555 7629
   integrity sha512-+P+eFy/yo8Z/UH9J0DqHZuUM5+RI2wl249TNvMx3J2jpUomLQa4Zxl56GEotGfw3PIP1eI+hVf1s53FlUONStQ==
@@ -7562,15 +7636,15 @@ react-is@^16.8.1, react-is@^16.8.4:
7562 7636
   resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
7563 7637
   integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
7564 7638
 
7565
-react-native@0.60.5:
7566
-  version "0.60.5"
7567
-  resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.60.5.tgz#3c1d9c06a0fbab9807220b6acac09488d39186ee"
7568
-  integrity sha512-cZwI0XzzihACN+7an1Dy46A83FRaAe2Xyd7laCalFFAppZIYeMVphZQWrVljJk5kIZBNtYG35TY1VsghQ0Oc2Q==
7639
+react-native@0.61.5:
7640
+  version "0.61.5"
7641
+  resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.61.5.tgz#6e21acb56cbd75a3baeb1f70201a66f42600bba8"
7642
+  integrity sha512-MXqE3NoGO0T3dUKIKkIppijBhRRMpfN6ANbhMXHDuyfA+fSilRWgCwYgR/YNCC7ntECoJYikKaNTUBB0DeQy6Q==
7569 7643
   dependencies:
7570 7644
     "@babel/runtime" "^7.0.0"
7571
-    "@react-native-community/cli" "^2.6.0"
7572
-    "@react-native-community/cli-platform-android" "^2.6.0"
7573
-    "@react-native-community/cli-platform-ios" "^2.4.1"
7645
+    "@react-native-community/cli" "^3.0.0"
7646
+    "@react-native-community/cli-platform-android" "^3.0.0"
7647
+    "@react-native-community/cli-platform-ios" "^3.0.0"
7574 7648
     abort-controller "^3.0.0"
7575 7649
     art "^0.10.0"
7576 7650
     base64-js "^1.1.2"
@@ -7580,19 +7654,20 @@ react-native@0.60.5:
7580 7654
     event-target-shim "^5.0.1"
7581 7655
     fbjs "^1.0.0"
7582 7656
     fbjs-scripts "^1.1.0"
7583
-    hermesvm "^0.1.0"
7657
+    hermes-engine "^0.2.1"
7584 7658
     invariant "^2.2.4"
7585
-    jsc-android "245459.0.0"
7586
-    metro-babel-register "0.54.1"
7587
-    metro-react-native-babel-transformer "0.54.1"
7588
-    metro-source-map "^0.55.0"
7659
+    jsc-android "^245459.0.0"
7660
+    metro-babel-register "^0.56.0"
7661
+    metro-react-native-babel-transformer "^0.56.0"
7662
+    metro-source-map "^0.56.0"
7589 7663
     nullthrows "^1.1.0"
7590 7664
     pretty-format "^24.7.0"
7591 7665
     promise "^7.1.1"
7592 7666
     prop-types "^15.7.2"
7593
-    react-devtools-core "^3.6.1"
7667
+    react-devtools-core "^3.6.3"
7668
+    react-refresh "^0.4.0"
7594 7669
     regenerator-runtime "^0.13.2"
7595
-    scheduler "0.14.0"
7670
+    scheduler "0.15.0"
7596 7671
     stacktrace-parser "^0.1.3"
7597 7672
     whatwg-fetch "^3.0.0"
7598 7673
 
@@ -7604,6 +7679,11 @@ react-proxy@^1.1.7:
7604 7679
     lodash "^4.6.1"
7605 7680
     react-deep-force-update "^1.0.0"
7606 7681
 
7682
+react-refresh@^0.4.0:
7683
+  version "0.4.2"
7684
+  resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334"
7685
+  integrity sha512-kv5QlFFSZWo7OlJFNYbxRtY66JImuP2LcrFgyJfQaf85gSP+byzG21UbDQEYjU7f//ny8rwiEkO6py2Y+fEgAQ==
7686
+
7607 7687
 react-transform-hmr@^1.0.4:
7608 7688
   version "1.0.4"
7609 7689
   resolved "https://registry.yarnpkg.com/react-transform-hmr/-/react-transform-hmr-1.0.4.tgz#e1a40bd0aaefc72e8dfd7a7cda09af85066397bb"
@@ -7612,15 +7692,14 @@ react-transform-hmr@^1.0.4:
7612 7692
     global "^4.3.0"
7613 7693
     react-proxy "^1.1.7"
7614 7694
 
7615
-react@16.6.3:
7616
-  version "16.6.3"
7617
-  resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c"
7618
-  integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==
7695
+react@16.9.0:
7696
+  version "16.9.0"
7697
+  resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa"
7698
+  integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==
7619 7699
   dependencies:
7620 7700
     loose-envify "^1.1.0"
7621 7701
     object-assign "^4.1.1"
7622 7702
     prop-types "^15.6.2"
7623
-    scheduler "^0.11.2"
7624 7703
 
7625 7704
 read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5:
7626 7705
   version "1.0.5"
@@ -7989,7 +8068,7 @@ resolve@1.1.7:
7989 8068
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
7990 8069
   integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
7991 8070
 
7992
-resolve@^1.10.0, resolve@^1.4.0:
8071
+resolve@^1.10.0:
7993 8072
   version "1.14.1"
7994 8073
   resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.1.tgz#9e018c540fcf0c427d678b9931cbf45e984bcaff"
7995 8074
   integrity sha512-fn5Wobh4cxbLzuHaE+nphztHy43/b++4M6SsGFC2gB8uYwf0C8LcarfCz1un7UTW8OFQg9iNjZ4xpcFVGebDPg==
@@ -8003,6 +8082,13 @@ resolve@^1.10.1, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.
8003 8082
   dependencies:
8004 8083
     path-parse "^1.0.6"
8005 8084
 
8085
+resolve@^1.4.0:
8086
+  version "1.14.2"
8087
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2"
8088
+  integrity sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==
8089
+  dependencies:
8090
+    path-parse "^1.0.6"
8091
+
8006 8092
 restore-cursor@^2.0.0:
8007 8093
   version "2.0.0"
8008 8094
   resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -8142,18 +8228,10 @@ sax@^1.2.1, sax@^1.2.4:
8142 8228
   resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
8143 8229
   integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
8144 8230
 
8145
-scheduler@0.14.0:
8146
-  version "0.14.0"
8147
-  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.14.0.tgz#b392c23c9c14bfa2933d4740ad5603cc0d59ea5b"
8148
-  integrity sha512-9CgbS06Kki2f4R9FjLSITjZo5BZxPsryiRNyL3LpvrM9WxcVmhlqAOc9E+KQbeI2nqej4JIIbOsfdL51cNb4Iw==
8149
-  dependencies:
8150
-    loose-envify "^1.1.0"
8151
-    object-assign "^4.1.1"
8152
-
8153
-scheduler@^0.11.2:
8154
-  version "0.11.3"
8155
-  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.3.tgz#b5769b90cf8b1464f3f3cfcafe8e3cd7555a2d6b"
8156
-  integrity sha512-i9X9VRRVZDd3xZw10NY5Z2cVMbdYg6gqFecfj79USv1CFN+YrJ3gIPRKf1qlY+Sxly4djoKdfx1T+m9dnRB8kQ==
8231
+scheduler@0.15.0:
8232
+  version "0.15.0"
8233
+  resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e"
8234
+  integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==
8157 8235
   dependencies:
8158 8236
     loose-envify "^1.1.0"
8159 8237
     object-assign "^4.1.1"
@@ -8207,7 +8285,7 @@ semver-regex@^2.0.0:
8207 8285
   resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
8208 8286
   integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
8209 8287
 
8210
-semver@^6.0.0, semver@^6.1.2, semver@^6.2.0:
8288
+semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
8211 8289
   version "6.3.0"
8212 8290
   resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
8213 8291
   integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -8761,6 +8839,11 @@ strip-json-comments@~2.0.1:
8761 8839
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
8762 8840
   integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
8763 8841
 
8842
+sudo-prompt@^9.0.0:
8843
+  version "9.1.1"
8844
+  resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0"
8845
+  integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==
8846
+
8764 8847
 supports-color@^5.0.0, supports-color@^5.3.0:
8765 8848
   version "5.5.0"
8766 8849
   resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"