Browse Source

Added detox repo example [WIP]

Jamon Holmgren 5 years ago
parent
commit
abd0a148f9
63 changed files with 9407 additions and 4 deletions
  1. 2
    0
      README.md
  2. 21
    0
      bin/detox
  3. 6
    0
      examples/WebTest/.buckconfig
  4. 1
    0
      examples/WebTest/.gitattributes
  5. 62
    0
      examples/WebTest/.gitignore
  6. 6
    0
      examples/WebTest/.prettierrc.js
  7. 1
    0
      examples/WebTest/.watchmanconfig
  8. 72
    0
      examples/WebTest/App.js
  9. 2
    0
      examples/WebTest/android/.settings/org.eclipse.buildship.core.prefs
  10. 55
    0
      examples/WebTest/android/app/BUCK
  11. 216
    0
      examples/WebTest/android/app/build.gradle
  12. 19
    0
      examples/WebTest/android/app/build_defs.bzl
  13. BIN
      examples/WebTest/android/app/debug.keystore
  14. 10
    0
      examples/WebTest/android/app/proguard-rules.pro
  15. 24
    0
      examples/WebTest/android/app/src/androidTest/java/com/webtest/DetoxTest.java
  16. 8
    0
      examples/WebTest/android/app/src/debug/AndroidManifest.xml
  17. 26
    0
      examples/WebTest/android/app/src/main/AndroidManifest.xml
  18. 15
    0
      examples/WebTest/android/app/src/main/java/com/webtest/MainActivity.java
  19. 74
    0
      examples/WebTest/android/app/src/main/java/com/webtest/MainApplication.java
  20. BIN
      examples/WebTest/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  21. BIN
      examples/WebTest/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  22. BIN
      examples/WebTest/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  23. BIN
      examples/WebTest/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  24. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  25. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  26. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  27. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  28. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  29. BIN
      examples/WebTest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  30. 3
    0
      examples/WebTest/android/app/src/main/res/values/strings.xml
  31. 9
    0
      examples/WebTest/android/app/src/main/res/values/styles.xml
  32. 44
    0
      examples/WebTest/android/build.gradle
  33. 21
    0
      examples/WebTest/android/gradle.properties
  34. BIN
      examples/WebTest/android/gradle/wrapper/gradle-wrapper.jar
  35. 5
    0
      examples/WebTest/android/gradle/wrapper/gradle-wrapper.properties
  36. 188
    0
      examples/WebTest/android/gradlew
  37. 100
    0
      examples/WebTest/android/gradlew.bat
  38. 3
    0
      examples/WebTest/android/settings.gradle
  39. 4
    0
      examples/WebTest/app.json
  40. 3
    0
      examples/WebTest/babel.config.js
  41. 6
    0
      examples/WebTest/e2e/config.json
  42. 25
    0
      examples/WebTest/e2e/init.js
  43. 18
    0
      examples/WebTest/e2e/testWebView.spec.js
  44. 9
    0
      examples/WebTest/index.js
  45. 53
    0
      examples/WebTest/ios/Podfile
  46. 351
    0
      examples/WebTest/ios/Podfile.lock
  47. 53
    0
      examples/WebTest/ios/WebTest-tvOS/Info.plist
  48. 24
    0
      examples/WebTest/ios/WebTest-tvOSTests/Info.plist
  49. 923
    0
      examples/WebTest/ios/WebTest.xcodeproj/project.pbxproj
  50. 10
    0
      examples/WebTest/ios/WebTest.xcworkspace/contents.xcworkspacedata
  51. 15
    0
      examples/WebTest/ios/WebTest/AppDelegate.h
  52. 42
    0
      examples/WebTest/ios/WebTest/AppDelegate.m
  53. 42
    0
      examples/WebTest/ios/WebTest/Base.lproj/LaunchScreen.xib
  54. 38
    0
      examples/WebTest/ios/WebTest/Images.xcassets/AppIcon.appiconset/Contents.json
  55. 6
    0
      examples/WebTest/ios/WebTest/Images.xcassets/Contents.json
  56. 57
    0
      examples/WebTest/ios/WebTest/Info.plist
  57. 16
    0
      examples/WebTest/ios/WebTest/main.m
  58. 24
    0
      examples/WebTest/ios/WebTestTests/Info.plist
  59. 72
    0
      examples/WebTest/ios/WebTestTests/WebTestTests.m
  60. 17
    0
      examples/WebTest/metro.config.js
  61. 45
    0
      examples/WebTest/package.json
  62. 6559
    0
      examples/WebTest/yarn.lock
  63. 2
    4
      jest.config.js

+ 2
- 0
README.md View File

@@ -70,6 +70,8 @@ class MyWebComponent extends Component {
70 70
 
71 71
 For more, read the [API Reference](./docs/Reference.md) and [Guide](./docs/Guide.md). If you're interested in contributing, check out the [Contributing Guide](./docs/Contributing.md).
72 72
 
73
+You can also [look at some examples](./examples).
74
+
73 75
 ## Common issues
74 76
 
75 77
 - If you're getting `Invariant Violation: Native component for "RNCWebView does not exist"` it likely means you forgot to run `react-native link` or there was some error with the linking process

+ 21
- 0
bin/detox View File

@@ -0,0 +1,21 @@
1
+#! /bin/bash
2
+
3
+# TODO: Check dependencies
4
+echo "TODO: Check dependencies"
5
+
6
+# Example App Setup
7
+cd examples/WebTest
8
+
9
+# Install NPM dependencies
10
+yarn
11
+
12
+# Jetify deps
13
+npm jetify
14
+
15
+# Install pods
16
+cd ios
17
+pod install
18
+cd ..
19
+
20
+# Run tests
21
+yarn detox

+ 6
- 0
examples/WebTest/.buckconfig View File

@@ -0,0 +1,6 @@
1
+
2
+[android]
3
+  target = Google Inc.:Google APIs:23
4
+
5
+[maven_repositories]
6
+  central = https://repo1.maven.org/maven2

+ 1
- 0
examples/WebTest/.gitattributes View File

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

+ 62
- 0
examples/WebTest/.gitignore View File

@@ -0,0 +1,62 @@
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
+xcshareddata
24
+
25
+# Android/IntelliJ
26
+#
27
+build/
28
+.idea
29
+.gradle
30
+local.properties
31
+*.iml
32
+
33
+# node.js
34
+#
35
+node_modules/
36
+npm-debug.log
37
+yarn-error.log
38
+
39
+# BUCK
40
+buck-out/
41
+\.buckd/
42
+*.keystore
43
+!debug.keystore
44
+
45
+# fastlane
46
+#
47
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48
+# screenshots whenever they are needed.
49
+# For more information about the recommended setup visit:
50
+# https://docs.fastlane.tools/best-practices/source-control/
51
+
52
+*/fastlane/report.xml
53
+*/fastlane/Preview.html
54
+*/fastlane/screenshots
55
+
56
+# Bundle artifact
57
+*.jsbundle
58
+
59
+# CocoaPods
60
+/ios/Pods/
61
+.vscode
62
+android/.project

+ 6
- 0
examples/WebTest/.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
examples/WebTest/.watchmanconfig View File

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

+ 72
- 0
examples/WebTest/App.js View File

@@ -0,0 +1,72 @@
1
+import React, {useState, useRef} from 'react';
2
+import {View, Text, StatusBar, Button} from 'react-native';
3
+import {WebView} from 'react-native-webview';
4
+
5
+const App = () => {
6
+  const ref = useRef(undefined);
7
+  const [hello, setHello] = useState(false);
8
+
9
+  const html = `
10
+    <!DOCTYPE html>
11
+    <html lang="en">
12
+      <head>
13
+        <title>WebTest web view</title>
14
+        <script>
15
+          function sendData() {
16
+            window.ReactNativeWebView.postMessage("Hey!")
17
+          }
18
+        </script>
19
+        <style>
20
+          main {
21
+            padding: 150px;
22
+            font-size: 50px;
23
+          }
24
+          main button {
25
+            font-size: 40px;
26
+          }
27
+        </style>
28
+      </head>
29
+      <body>
30
+        <main>
31
+          <h1>Hello, World!</h1>
32
+          <button onClick="sendData()">Send Data</button>
33
+        </div>
34
+      </main>
35
+    </html>
36
+  `;
37
+
38
+  const triggerHello = () => {
39
+    ref.current.injectJavaScript('sendData(); true');
40
+  };
41
+
42
+  return (
43
+    <>
44
+      <StatusBar barStyle="dark-content" />
45
+      <WebView
46
+        testID="test_webview"
47
+        source={{html}}
48
+        ref={ref}
49
+        style={{
50
+          flex: 3,
51
+        }}
52
+        onMessage={event => {
53
+          setHello(true);
54
+        }}
55
+      />
56
+      <View style={{flex: 1}}>
57
+        {hello ? (
58
+          <Text testID="hello">Hello from the webview!</Text>
59
+        ) : (
60
+          <Text testID="hello">No hello yet</Text>
61
+        )}
62
+        <Button
63
+          testID="test_trigger_button"
64
+          onPress={triggerHello}
65
+          title="Trigger Hello"
66
+        />
67
+      </View>
68
+    </>
69
+  );
70
+};
71
+
72
+export default App;

+ 2
- 0
examples/WebTest/android/.settings/org.eclipse.buildship.core.prefs View File

@@ -0,0 +1,2 @@
1
+connection.project.dir=
2
+eclipse.preferences.version=1

+ 55
- 0
examples/WebTest/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.webtest",
39
+)
40
+
41
+android_resource(
42
+    name = "res",
43
+    package = "com.webtest",
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
+)

+ 216
- 0
examples/WebTest/android/app/build.gradle View File

@@ -0,0 +1,216 @@
1
+apply plugin: "com.android.application"
2
+
3
+import com.android.build.OutputFile
4
+
5
+/**
6
+ * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
7
+ * and bundleReleaseJsAndAssets).
8
+ * These basically call `react-native bundle` with the correct arguments during the Android build
9
+ * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
10
+ * bundle directly from the development server. Below you can see all the possible configurations
11
+ * and their defaults. If you decide to add a configuration block, make sure to add it before the
12
+ * `apply from: "../../node_modules/react-native/react.gradle"` line.
13
+ *
14
+ * project.ext.react = [
15
+ *   // the name of the generated asset file containing your JS bundle
16
+ *   bundleAssetName: "index.android.bundle",
17
+ *
18
+ *   // the entry file for bundle generation
19
+ *   entryFile: "index.android.js",
20
+ *
21
+ *   // https://facebook.github.io/react-native/docs/performance#enable-the-ram-format
22
+ *   bundleCommand: "ram-bundle",
23
+ *
24
+ *   // whether to bundle JS and assets in debug mode
25
+ *   bundleInDebug: false,
26
+ *
27
+ *   // whether to bundle JS and assets in release mode
28
+ *   bundleInRelease: true,
29
+ *
30
+ *   // whether to bundle JS and assets in another build variant (if configured).
31
+ *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
32
+ *   // The configuration property can be in the following formats
33
+ *   //         'bundleIn${productFlavor}${buildType}'
34
+ *   //         'bundleIn${buildType}'
35
+ *   // bundleInFreeDebug: true,
36
+ *   // bundleInPaidRelease: true,
37
+ *   // bundleInBeta: true,
38
+ *
39
+ *   // whether to disable dev mode in custom build variants (by default only disabled in release)
40
+ *   // for example: to disable dev mode in the staging build type (if configured)
41
+ *   devDisabledInStaging: true,
42
+ *   // The configuration property can be in the following formats
43
+ *   //         'devDisabledIn${productFlavor}${buildType}'
44
+ *   //         'devDisabledIn${buildType}'
45
+ *
46
+ *   // the root of your project, i.e. where "package.json" lives
47
+ *   root: "../../",
48
+ *
49
+ *   // where to put the JS bundle asset in debug mode
50
+ *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
51
+ *
52
+ *   // where to put the JS bundle asset in release mode
53
+ *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
54
+ *
55
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
56
+ *   // require('./image.png')), in debug mode
57
+ *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
58
+ *
59
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
60
+ *   // require('./image.png')), in release mode
61
+ *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
62
+ *
63
+ *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
64
+ *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
65
+ *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
66
+ *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
67
+ *   // for example, you might want to remove it from here.
68
+ *   inputExcludes: ["android/**", "ios/**"],
69
+ *
70
+ *   // override which node gets called and with what additional arguments
71
+ *   nodeExecutableAndArgs: ["node"],
72
+ *
73
+ *   // supply additional arguments to the packager
74
+ *   extraPackagerArgs: []
75
+ * ]
76
+ */
77
+
78
+project.ext.react = [
79
+    entryFile: "index.js",
80
+    enableHermes: false,  // clean and rebuild if changing
81
+]
82
+
83
+apply from: "../../node_modules/react-native/react.gradle"
84
+
85
+/**
86
+ * Set this to true to create two separate APKs instead of one:
87
+ *   - An APK that only works on ARM devices
88
+ *   - An APK that only works on x86 devices
89
+ * The advantage is the size of the APK is reduced by about 4MB.
90
+ * Upload all the APKs to the Play Store and people will download
91
+ * the correct one based on the CPU architecture of their device.
92
+ */
93
+def enableSeparateBuildPerCPUArchitecture = false
94
+
95
+/**
96
+ * Run Proguard to shrink the Java bytecode in release builds.
97
+ */
98
+def enableProguardInReleaseBuilds = false
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
+
122
+android {
123
+    compileSdkVersion rootProject.ext.compileSdkVersion
124
+
125
+    compileOptions {
126
+        sourceCompatibility JavaVersion.VERSION_1_8
127
+        targetCompatibility JavaVersion.VERSION_1_8
128
+    }
129
+
130
+    defaultConfig {
131
+        applicationId "com.webtest"
132
+        minSdkVersion rootProject.ext.minSdkVersion
133
+        targetSdkVersion rootProject.ext.targetSdkVersion
134
+        versionCode 1
135
+        versionName "1.0"
136
+        testBuildType System.getProperty('testBuildType', 'debug')  // This will later be used to control the test apk build type
137
+        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
138
+    }
139
+    splits {
140
+        abi {
141
+            reset()
142
+            enable enableSeparateBuildPerCPUArchitecture
143
+            universalApk false  // If true, also generate a universal APK
144
+            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
145
+        }
146
+    }
147
+    signingConfigs {
148
+        debug {
149
+            storeFile file('debug.keystore')
150
+            storePassword 'android'
151
+            keyAlias 'androiddebugkey'
152
+            keyPassword 'android'
153
+        }
154
+    }
155
+    buildTypes {
156
+        debug {
157
+            signingConfig signingConfigs.debug
158
+        }
159
+        release {
160
+            // Caution! In production, you need to generate your own keystore file.
161
+            // see https://facebook.github.io/react-native/docs/signed-apk-android.
162
+            signingConfig signingConfigs.debug
163
+            minifyEnabled enableProguardInReleaseBuilds
164
+            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
165
+        }
166
+    }
167
+    // applicationVariants are e.g. debug, release
168
+    applicationVariants.all { variant ->
169
+        variant.outputs.each { output ->
170
+            // For each separate APK per architecture, set a unique version code as described here:
171
+            // https://developer.android.com/studio/build/configure-apk-splits.html
172
+            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
173
+            def abi = output.getFilter(OutputFile.ABI)
174
+            if (abi != null) {  // null for the universal-debug, universal-release variants
175
+                output.versionCodeOverride =
176
+                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
177
+            }
178
+
179
+        }
180
+    }
181
+
182
+    packagingOptions {
183
+        pickFirst '**/armeabi-v7a/libc++_shared.so'
184
+        pickFirst '**/x86/libc++_shared.so'
185
+        pickFirst '**/arm64-v8a/libc++_shared.so'
186
+        pickFirst '**/x86_64/libc++_shared.so'
187
+        pickFirst '**/x86/libjsc.so'
188
+        pickFirst '**/armeabi-v7a/libjsc.so'
189
+    }
190
+}
191
+
192
+dependencies {
193
+    implementation fileTree(dir: "libs", include: ["*.jar"])
194
+    implementation "com.facebook.react:react-native:+"  // From node_modules
195
+    implementation "androidx.annotation:annotation:1.1.0"
196
+
197
+    if (enableHermes) {
198
+        def hermesPath = "../../node_modules/hermes-engine/android/";
199
+        debugImplementation files(hermesPath + "hermes-debug.aar")
200
+        releaseImplementation files(hermesPath + "hermes-release.aar")
201
+    } else {
202
+        implementation jscFlavor
203
+    }
204
+
205
+    androidTestImplementation('com.wix:detox:+') { transitive = true } 
206
+    androidTestImplementation 'junit:junit:4.12'
207
+}
208
+
209
+// Run this once to be able to run the application with BUCK
210
+// puts all compile dependencies into folder libs for BUCK to use
211
+task copyDownloadableDepsToLibs(type: Copy) {
212
+    from configurations.compile
213
+    into 'libs'
214
+}
215
+
216
+apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)

+ 19
- 0
examples/WebTest/android/app/build_defs.bzl View File

@@ -0,0 +1,19 @@
1
+"""Helper definitions to glob .aar and .jar targets"""
2
+
3
+def create_aar_targets(aarfiles):
4
+    for aarfile in aarfiles:
5
+        name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")]
6
+        lib_deps.append(":" + name)
7
+        android_prebuilt_aar(
8
+            name = name,
9
+            aar = aarfile,
10
+        )
11
+
12
+def create_jar_targets(jarfiles):
13
+    for jarfile in jarfiles:
14
+        name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")]
15
+        lib_deps.append(":" + name)
16
+        prebuilt_jar(
17
+            name = name,
18
+            binary_jar = jarfile,
19
+        )

BIN
examples/WebTest/android/app/debug.keystore View File


+ 10
- 0
examples/WebTest/android/app/proguard-rules.pro View File

@@ -0,0 +1,10 @@
1
+# Add project specific ProGuard rules here.
2
+# By default, the flags in this file are appended to flags specified
3
+# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt
4
+# You can edit the include path and order by changing the proguardFiles
5
+# directive in build.gradle.
6
+#
7
+# For more details, see
8
+#   http://developer.android.com/guide/developing/tools/proguard.html
9
+
10
+# Add any project specific keep options here:

+ 24
- 0
examples/WebTest/android/app/src/androidTest/java/com/webtest/DetoxTest.java View File

@@ -0,0 +1,24 @@
1
+package com.webtest;
2
+
3
+import com.wix.detox.Detox;
4
+
5
+import org.junit.Rule;
6
+import org.junit.Test;
7
+import org.junit.runner.RunWith;
8
+
9
+import androidx.test.ext.junit.runners.AndroidJUnit4;
10
+import androidx.test.filters.LargeTest;
11
+import androidx.test.rule.ActivityTestRule;
12
+
13
+@RunWith(AndroidJUnit4.class)
14
+@LargeTest
15
+public class DetoxTest {
16
+
17
+    @Rule
18
+    public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false);
19
+
20
+    @Test
21
+    public void runDetoxTests() {
22
+        Detox.runTests(mActivityRule);
23
+    }
24
+}

+ 8
- 0
examples/WebTest/android/app/src/debug/AndroidManifest.xml View File

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

+ 26
- 0
examples/WebTest/android/app/src/main/AndroidManifest.xml View File

@@ -0,0 +1,26 @@
1
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+  package="com.webtest">
3
+
4
+    <uses-permission android:name="android.permission.INTERNET" />
5
+
6
+    <application
7
+      android:name=".MainApplication"
8
+      android:label="@string/app_name"
9
+      android:icon="@mipmap/ic_launcher"
10
+      android:roundIcon="@mipmap/ic_launcher_round"
11
+      android:allowBackup="false"
12
+      android:theme="@style/AppTheme">
13
+      <activity
14
+        android:name=".MainActivity"
15
+        android:label="@string/app_name"
16
+        android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
17
+        android:windowSoftInputMode="adjustResize">
18
+        <intent-filter>
19
+            <action android:name="android.intent.action.MAIN" />
20
+            <category android:name="android.intent.category.LAUNCHER" />
21
+        </intent-filter>
22
+      </activity>
23
+      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
24
+    </application>
25
+
26
+</manifest>

+ 15
- 0
examples/WebTest/android/app/src/main/java/com/webtest/MainActivity.java View File

@@ -0,0 +1,15 @@
1
+package com.webtest;
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 "WebTest";
14
+  }
15
+}

+ 74
- 0
examples/WebTest/android/app/src/main/java/com/webtest/MainApplication.java View File

@@ -0,0 +1,74 @@
1
+package com.webtest;
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
+}

BIN
examples/WebTest/android/app/src/main/res/mipmap-hdpi/ic_launcher.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-mdpi/ic_launcher.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png View File


BIN
examples/WebTest/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png View File


+ 3
- 0
examples/WebTest/android/app/src/main/res/values/strings.xml View File

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

+ 9
- 0
examples/WebTest/android/app/src/main/res/values/styles.xml View File

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

+ 44
- 0
examples/WebTest/android/build.gradle View File

@@ -0,0 +1,44 @@
1
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
2
+
3
+buildscript {
4
+    ext {
5
+        buildToolsVersion = "28.0.3"
6
+        minSdkVersion = 18
7
+        compileSdkVersion = 28
8
+        targetSdkVersion = 28
9
+        kotlinVersion = '1.3.10'
10
+    }
11
+    repositories {
12
+        google()
13
+        jcenter()
14
+    }
15
+    dependencies {
16
+        classpath("com.android.tools.build:gradle:3.4.2")
17
+        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
18
+
19
+        // NOTE: Do not place your application dependencies here; they belong
20
+        // in the individual module build.gradle files
21
+    }
22
+}
23
+
24
+allprojects {
25
+    repositories {
26
+        mavenLocal()
27
+        maven {
28
+            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
29
+            url("$rootDir/../node_modules/react-native/android")
30
+        }
31
+        maven {
32
+            // Android JSC is installed from npm
33
+            url("$rootDir/../node_modules/jsc-android/dist")
34
+        }
35
+
36
+        google()
37
+        jcenter()
38
+        maven { 
39
+            url 'https://jitpack.io'
40
+            // All of Detox' artifacts are provided via the npm module
41
+            url "$rootDir/../node_modules/detox/Detox-android"
42
+        }
43
+    }
44
+}

+ 21
- 0
examples/WebTest/android/gradle.properties View File

@@ -0,0 +1,21 @@
1
+# Project-wide Gradle settings.
2
+
3
+# IDE (e.g. Android Studio) users:
4
+# Gradle settings configured through the IDE *will override*
5
+# any settings specified in this file.
6
+
7
+# For more details on how to configure your build environment visit
8
+# http://www.gradle.org/docs/current/userguide/build_environment.html
9
+
10
+# Specifies the JVM arguments used for the daemon process.
11
+# The setting is particularly useful for tweaking memory settings.
12
+# Default value: -Xmx10248m -XX:MaxPermSize=256m
13
+# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14
+
15
+# When configured, Gradle will run in incubating parallel mode.
16
+# This option should only be used with decoupled projects. More details, visit
17
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18
+# org.gradle.parallel=true
19
+
20
+android.useAndroidX=true
21
+android.enableJetifier=true

BIN
examples/WebTest/android/gradle/wrapper/gradle-wrapper.jar View File


+ 5
- 0
examples/WebTest/android/gradle/wrapper/gradle-wrapper.properties View File

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

+ 188
- 0
examples/WebTest/android/gradlew View File

@@ -0,0 +1,188 @@
1
+#!/usr/bin/env sh
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
+
19
+##############################################################################
20
+##
21
+##  Gradle start up script for UN*X
22
+##
23
+##############################################################################
24
+
25
+# Attempt to set APP_HOME
26
+# Resolve links: $0 may be a link
27
+PRG="$0"
28
+# Need this for relative symlinks.
29
+while [ -h "$PRG" ] ; do
30
+    ls=`ls -ld "$PRG"`
31
+    link=`expr "$ls" : '.*-> \(.*\)$'`
32
+    if expr "$link" : '/.*' > /dev/null; then
33
+        PRG="$link"
34
+    else
35
+        PRG=`dirname "$PRG"`"/$link"
36
+    fi
37
+done
38
+SAVED="`pwd`"
39
+cd "`dirname \"$PRG\"`/" >/dev/null
40
+APP_HOME="`pwd -P`"
41
+cd "$SAVED" >/dev/null
42
+
43
+APP_NAME="Gradle"
44
+APP_BASE_NAME=`basename "$0"`
45
+
46
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48
+
49
+# Use the maximum available, or set MAX_FD != -1 to use that value.
50
+MAX_FD="maximum"
51
+
52
+warn () {
53
+    echo "$*"
54
+}
55
+
56
+die () {
57
+    echo
58
+    echo "$*"
59
+    echo
60
+    exit 1
61
+}
62
+
63
+# OS specific support (must be 'true' or 'false').
64
+cygwin=false
65
+msys=false
66
+darwin=false
67
+nonstop=false
68
+case "`uname`" in
69
+  CYGWIN* )
70
+    cygwin=true
71
+    ;;
72
+  Darwin* )
73
+    darwin=true
74
+    ;;
75
+  MINGW* )
76
+    msys=true
77
+    ;;
78
+  NONSTOP* )
79
+    nonstop=true
80
+    ;;
81
+esac
82
+
83
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84
+
85
+# Determine the Java command to use to start the JVM.
86
+if [ -n "$JAVA_HOME" ] ; then
87
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88
+        # IBM's JDK on AIX uses strange locations for the executables
89
+        JAVACMD="$JAVA_HOME/jre/sh/java"
90
+    else
91
+        JAVACMD="$JAVA_HOME/bin/java"
92
+    fi
93
+    if [ ! -x "$JAVACMD" ] ; then
94
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95
+
96
+Please set the JAVA_HOME variable in your environment to match the
97
+location of your Java installation."
98
+    fi
99
+else
100
+    JAVACMD="java"
101
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102
+
103
+Please set the JAVA_HOME variable in your environment to match the
104
+location of your Java installation."
105
+fi
106
+
107
+# Increase the maximum file descriptors if we can.
108
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109
+    MAX_FD_LIMIT=`ulimit -H -n`
110
+    if [ $? -eq 0 ] ; then
111
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112
+            MAX_FD="$MAX_FD_LIMIT"
113
+        fi
114
+        ulimit -n $MAX_FD
115
+        if [ $? -ne 0 ] ; then
116
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
117
+        fi
118
+    else
119
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120
+    fi
121
+fi
122
+
123
+# For Darwin, add options to specify how the application appears in the dock
124
+if $darwin; then
125
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126
+fi
127
+
128
+# For Cygwin, switch paths to Windows format before running java
129
+if $cygwin ; then
130
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132
+    JAVACMD=`cygpath --unix "$JAVACMD"`
133
+
134
+    # We build the pattern for arguments to be converted via cygpath
135
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136
+    SEP=""
137
+    for dir in $ROOTDIRSRAW ; do
138
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
139
+        SEP="|"
140
+    done
141
+    OURCYGPATTERN="(^($ROOTDIRS))"
142
+    # Add a user-defined pattern to the cygpath arguments
143
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145
+    fi
146
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
147
+    i=0
148
+    for arg in "$@" ; do
149
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
151
+
152
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
153
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154
+        else
155
+            eval `echo args$i`="\"$arg\""
156
+        fi
157
+        i=$((i+1))
158
+    done
159
+    case $i in
160
+        (0) set -- ;;
161
+        (1) set -- "$args0" ;;
162
+        (2) set -- "$args0" "$args1" ;;
163
+        (3) set -- "$args0" "$args1" "$args2" ;;
164
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170
+    esac
171
+fi
172
+
173
+# Escape application args
174
+save () {
175
+    for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176
+    echo " "
177
+}
178
+APP_ARGS=$(save "$@")
179
+
180
+# Collect all arguments for the java command, following the shell quoting and substitution rules
181
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
182
+
183
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
184
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
185
+  cd "$(dirname "$0")"
186
+fi
187
+
188
+exec "$JAVACMD" "$@"

+ 100
- 0
examples/WebTest/android/gradlew.bat View File

@@ -0,0 +1,100 @@
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

+ 3
- 0
examples/WebTest/android/settings.gradle View File

@@ -0,0 +1,3 @@
1
+rootProject.name = 'WebTest'
2
+apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
3
+include ':app'

+ 4
- 0
examples/WebTest/app.json View File

@@ -0,0 +1,4 @@
1
+{
2
+  "name": "WebTest",
3
+  "displayName": "WebTest"
4
+}

+ 3
- 0
examples/WebTest/babel.config.js View File

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

+ 6
- 0
examples/WebTest/e2e/config.json View File

@@ -0,0 +1,6 @@
1
+{
2
+    "setupFilesAfterEnv": ["./init.js"],
3
+    "testEnvironment": "node",
4
+    "reporters": ["detox/runners/jest/streamlineReporter"],
5
+    "verbose": true
6
+}

+ 25
- 0
examples/WebTest/e2e/init.js View File

@@ -0,0 +1,25 @@
1
+const detox = require('detox');
2
+const config = require('../package.json').detox;
3
+const adapter = require('detox/runners/jest/adapter');
4
+const specReporter = require('detox/runners/jest/specReporter');
5
+
6
+// Set the default timeout
7
+jest.setTimeout(120000);
8
+jasmine.getEnv().addReporter(adapter);
9
+
10
+// This takes care of generating status logs on a per-spec basis. By default, jest only reports at file-level.
11
+// This is strictly optional.
12
+jasmine.getEnv().addReporter(specReporter);
13
+
14
+beforeAll(async () => {
15
+  await detox.init(config);
16
+});
17
+
18
+beforeEach(async () => {
19
+  await adapter.beforeEach();
20
+});
21
+
22
+afterAll(async () => {
23
+  await adapter.afterAll();
24
+  await detox.cleanup();
25
+});

+ 18
- 0
examples/WebTest/e2e/testWebView.spec.js View File

@@ -0,0 +1,18 @@
1
+describe('WebView basic test', () => {
2
+  beforeEach(async () => {
3
+    await device.launchApp({newInstance: true});
4
+  });
5
+
6
+  it('should have a webview', async () => {
7
+    await expect(element(by.id('test_webview'))).toBeVisible();
8
+  });
9
+
10
+  it('should respond to injectJavaScript', async () => {
11
+    const hello = await element(by.id('hello'));
12
+    await expect(hello).toHaveText('No hello yet');
13
+    await element(by.id('test_trigger_button')).tap();
14
+    await waitFor(hello)
15
+      .toHaveText('Hello from the webview!')
16
+      .withTimeout(10000);
17
+  });
18
+});

+ 9
- 0
examples/WebTest/index.js View File

@@ -0,0 +1,9 @@
1
+/**
2
+ * @format
3
+ */
4
+
5
+import {AppRegistry} from 'react-native';
6
+import App from './App';
7
+import {name as appName} from './app.json';
8
+
9
+AppRegistry.registerComponent(appName, () => App);

+ 53
- 0
examples/WebTest/ios/Podfile View File

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

+ 351
- 0
examples/WebTest/ios/Podfile.lock View File

@@ -0,0 +1,351 @@
1
+PODS:
2
+  - boost-for-react-native (1.63.0)
3
+  - DoubleConversion (1.1.6)
4
+  - FBLazyVector (0.61.0-rc.0)
5
+  - FBReactNativeSpec (0.61.0-rc.0):
6
+    - Folly (= 2018.10.22.00)
7
+    - RCTRequired (= 0.61.0-rc.0)
8
+    - RCTTypeSafety (= 0.61.0-rc.0)
9
+    - React-Core (= 0.61.0-rc.0)
10
+    - React-jsi (= 0.61.0-rc.0)
11
+    - ReactCommon/turbomodule/core (= 0.61.0-rc.0)
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.0-rc.0)
23
+  - RCTTypeSafety (0.61.0-rc.0):
24
+    - FBLazyVector (= 0.61.0-rc.0)
25
+    - Folly (= 2018.10.22.00)
26
+    - RCTRequired (= 0.61.0-rc.0)
27
+    - React-Core (= 0.61.0-rc.0)
28
+  - React (0.61.0-rc.0):
29
+    - React-Core (= 0.61.0-rc.0)
30
+    - React-DevSupport (= 0.61.0-rc.0)
31
+    - React-RCTActionSheet (= 0.61.0-rc.0)
32
+    - React-RCTAnimation (= 0.61.0-rc.0)
33
+    - React-RCTBlob (= 0.61.0-rc.0)
34
+    - React-RCTImage (= 0.61.0-rc.0)
35
+    - React-RCTLinking (= 0.61.0-rc.0)
36
+    - React-RCTNetwork (= 0.61.0-rc.0)
37
+    - React-RCTSettings (= 0.61.0-rc.0)
38
+    - React-RCTText (= 0.61.0-rc.0)
39
+    - React-RCTVibration (= 0.61.0-rc.0)
40
+    - React-RCTWebSocket (= 0.61.0-rc.0)
41
+  - React-Core (0.61.0-rc.0):
42
+    - Folly (= 2018.10.22.00)
43
+    - glog
44
+    - React-Core/Default (= 0.61.0-rc.0)
45
+    - React-cxxreact (= 0.61.0-rc.0)
46
+    - React-jsi (= 0.61.0-rc.0)
47
+    - React-jsiexecutor (= 0.61.0-rc.0)
48
+    - yoga (= 0.61.0-rc.0.React)
49
+  - React-Core/CoreModulesHeaders (0.61.0-rc.0):
50
+    - Folly (= 2018.10.22.00)
51
+    - glog
52
+    - React-Core/Default
53
+    - React-cxxreact (= 0.61.0-rc.0)
54
+    - React-jsi (= 0.61.0-rc.0)
55
+    - React-jsiexecutor (= 0.61.0-rc.0)
56
+    - yoga (= 0.61.0-rc.0.React)
57
+  - React-Core/Default (0.61.0-rc.0):
58
+    - Folly (= 2018.10.22.00)
59
+    - glog
60
+    - React-cxxreact (= 0.61.0-rc.0)
61
+    - React-jsi (= 0.61.0-rc.0)
62
+    - React-jsiexecutor (= 0.61.0-rc.0)
63
+    - yoga (= 0.61.0-rc.0.React)
64
+  - React-Core/DevSupportHeaders (0.61.0-rc.0):
65
+    - Folly (= 2018.10.22.00)
66
+    - glog
67
+    - React-Core/Default
68
+    - React-cxxreact (= 0.61.0-rc.0)
69
+    - React-jsi (= 0.61.0-rc.0)
70
+    - React-jsiexecutor (= 0.61.0-rc.0)
71
+    - yoga (= 0.61.0-rc.0.React)
72
+  - React-Core/RCTActionSheetHeaders (0.61.0-rc.0):
73
+    - Folly (= 2018.10.22.00)
74
+    - glog
75
+    - React-Core/Default
76
+    - React-cxxreact (= 0.61.0-rc.0)
77
+    - React-jsi (= 0.61.0-rc.0)
78
+    - React-jsiexecutor (= 0.61.0-rc.0)
79
+    - yoga (= 0.61.0-rc.0.React)
80
+  - React-Core/RCTAnimationHeaders (0.61.0-rc.0):
81
+    - Folly (= 2018.10.22.00)
82
+    - glog
83
+    - React-Core/Default
84
+    - React-cxxreact (= 0.61.0-rc.0)
85
+    - React-jsi (= 0.61.0-rc.0)
86
+    - React-jsiexecutor (= 0.61.0-rc.0)
87
+    - yoga (= 0.61.0-rc.0.React)
88
+  - React-Core/RCTBlobHeaders (0.61.0-rc.0):
89
+    - Folly (= 2018.10.22.00)
90
+    - glog
91
+    - React-Core/Default
92
+    - React-cxxreact (= 0.61.0-rc.0)
93
+    - React-jsi (= 0.61.0-rc.0)
94
+    - React-jsiexecutor (= 0.61.0-rc.0)
95
+    - yoga (= 0.61.0-rc.0.React)
96
+  - React-Core/RCTImageHeaders (0.61.0-rc.0):
97
+    - Folly (= 2018.10.22.00)
98
+    - glog
99
+    - React-Core/Default
100
+    - React-cxxreact (= 0.61.0-rc.0)
101
+    - React-jsi (= 0.61.0-rc.0)
102
+    - React-jsiexecutor (= 0.61.0-rc.0)
103
+    - yoga (= 0.61.0-rc.0.React)
104
+  - React-Core/RCTLinkingHeaders (0.61.0-rc.0):
105
+    - Folly (= 2018.10.22.00)
106
+    - glog
107
+    - React-Core/Default
108
+    - React-cxxreact (= 0.61.0-rc.0)
109
+    - React-jsi (= 0.61.0-rc.0)
110
+    - React-jsiexecutor (= 0.61.0-rc.0)
111
+    - yoga (= 0.61.0-rc.0.React)
112
+  - React-Core/RCTNetworkHeaders (0.61.0-rc.0):
113
+    - Folly (= 2018.10.22.00)
114
+    - glog
115
+    - React-Core/Default
116
+    - React-cxxreact (= 0.61.0-rc.0)
117
+    - React-jsi (= 0.61.0-rc.0)
118
+    - React-jsiexecutor (= 0.61.0-rc.0)
119
+    - yoga (= 0.61.0-rc.0.React)
120
+  - React-Core/RCTSettingsHeaders (0.61.0-rc.0):
121
+    - Folly (= 2018.10.22.00)
122
+    - glog
123
+    - React-Core/Default
124
+    - React-cxxreact (= 0.61.0-rc.0)
125
+    - React-jsi (= 0.61.0-rc.0)
126
+    - React-jsiexecutor (= 0.61.0-rc.0)
127
+    - yoga (= 0.61.0-rc.0.React)
128
+  - React-Core/RCTTextHeaders (0.61.0-rc.0):
129
+    - Folly (= 2018.10.22.00)
130
+    - glog
131
+    - React-Core/Default
132
+    - React-cxxreact (= 0.61.0-rc.0)
133
+    - React-jsi (= 0.61.0-rc.0)
134
+    - React-jsiexecutor (= 0.61.0-rc.0)
135
+    - yoga (= 0.61.0-rc.0.React)
136
+  - React-Core/RCTVibrationHeaders (0.61.0-rc.0):
137
+    - Folly (= 2018.10.22.00)
138
+    - glog
139
+    - React-Core/Default
140
+    - React-cxxreact (= 0.61.0-rc.0)
141
+    - React-jsi (= 0.61.0-rc.0)
142
+    - React-jsiexecutor (= 0.61.0-rc.0)
143
+    - yoga (= 0.61.0-rc.0.React)
144
+  - React-Core/RCTWebSocketHeaders (0.61.0-rc.0):
145
+    - Folly (= 2018.10.22.00)
146
+    - glog
147
+    - React-Core/Default
148
+    - React-cxxreact (= 0.61.0-rc.0)
149
+    - React-jsi (= 0.61.0-rc.0)
150
+    - React-jsiexecutor (= 0.61.0-rc.0)
151
+    - yoga (= 0.61.0-rc.0.React)
152
+  - React-CoreModules (0.61.0-rc.0):
153
+    - FBReactNativeSpec (= 0.61.0-rc.0)
154
+    - Folly (= 2018.10.22.00)
155
+    - React-Core/CoreModulesHeaders (= 0.61.0-rc.0)
156
+  - React-cxxreact (0.61.0-rc.0):
157
+    - boost-for-react-native (= 1.63.0)
158
+    - DoubleConversion
159
+    - Folly (= 2018.10.22.00)
160
+    - glog
161
+    - React-jsinspector (= 0.61.0-rc.0)
162
+  - React-DevSupport (0.61.0-rc.0):
163
+    - React-Core/DevSupportHeaders (= 0.61.0-rc.0)
164
+    - React-jsinspector (= 0.61.0-rc.0)
165
+    - React-RCTWebSocket (= 0.61.0-rc.0)
166
+  - React-jsi (0.61.0-rc.0):
167
+    - boost-for-react-native (= 1.63.0)
168
+    - DoubleConversion
169
+    - Folly (= 2018.10.22.00)
170
+    - glog
171
+    - React-jsi/Default (= 0.61.0-rc.0)
172
+  - React-jsi/Default (0.61.0-rc.0):
173
+    - boost-for-react-native (= 1.63.0)
174
+    - DoubleConversion
175
+    - Folly (= 2018.10.22.00)
176
+    - glog
177
+  - React-jsiexecutor (0.61.0-rc.0):
178
+    - DoubleConversion
179
+    - Folly (= 2018.10.22.00)
180
+    - glog
181
+    - React-cxxreact (= 0.61.0-rc.0)
182
+    - React-jsi (= 0.61.0-rc.0)
183
+  - React-jsinspector (0.61.0-rc.0)
184
+  - react-native-webview (7.0.2):
185
+    - React
186
+  - React-RCTActionSheet (0.61.0-rc.0):
187
+    - React-Core/RCTActionSheetHeaders (= 0.61.0-rc.0)
188
+  - React-RCTAnimation (0.61.0-rc.0):
189
+    - React-Core/RCTAnimationHeaders (= 0.61.0-rc.0)
190
+  - React-RCTBlob (0.61.0-rc.0):
191
+    - React-Core/RCTBlobHeaders (= 0.61.0-rc.0)
192
+    - React-jsi (= 0.61.0-rc.0)
193
+    - React-RCTNetwork (= 0.61.0-rc.0)
194
+    - React-RCTWebSocket (= 0.61.0-rc.0)
195
+  - React-RCTImage (0.61.0-rc.0):
196
+    - React-Core/RCTImageHeaders (= 0.61.0-rc.0)
197
+    - React-RCTNetwork (= 0.61.0-rc.0)
198
+  - React-RCTLinking (0.61.0-rc.0):
199
+    - React-Core/RCTLinkingHeaders (= 0.61.0-rc.0)
200
+  - React-RCTNetwork (0.61.0-rc.0):
201
+    - React-Core/RCTNetworkHeaders (= 0.61.0-rc.0)
202
+  - React-RCTSettings (0.61.0-rc.0):
203
+    - React-Core/RCTSettingsHeaders (= 0.61.0-rc.0)
204
+  - React-RCTText (0.61.0-rc.0):
205
+    - React-Core/RCTTextHeaders (= 0.61.0-rc.0)
206
+  - React-RCTVibration (0.61.0-rc.0):
207
+    - React-Core/RCTVibrationHeaders (= 0.61.0-rc.0)
208
+  - React-RCTWebSocket (0.61.0-rc.0):
209
+    - React-Core/RCTWebSocketHeaders (= 0.61.0-rc.0)
210
+  - ReactCommon/jscallinvoker (0.61.0-rc.0):
211
+    - DoubleConversion
212
+    - Folly (= 2018.10.22.00)
213
+    - glog
214
+    - React-cxxreact (= 0.61.0-rc.0)
215
+  - ReactCommon/turbomodule/core (0.61.0-rc.0):
216
+    - DoubleConversion
217
+    - Folly (= 2018.10.22.00)
218
+    - glog
219
+    - React-Core (= 0.61.0-rc.0)
220
+    - React-cxxreact (= 0.61.0-rc.0)
221
+    - React-jsi (= 0.61.0-rc.0)
222
+    - ReactCommon/jscallinvoker (= 0.61.0-rc.0)
223
+  - yoga (0.61.0-rc.0.React)
224
+
225
+DEPENDENCIES:
226
+  - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
227
+  - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
228
+  - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
229
+  - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
230
+  - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
231
+  - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
232
+  - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
233
+  - React (from `../node_modules/react-native/`)
234
+  - React-Core (from `../node_modules/react-native/`)
235
+  - React-CoreModules (from `../node_modules/react-native/React/CoreModules`)
236
+  - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`)
237
+  - React-DevSupport (from `../node_modules/react-native/React`)
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 `../node_modules/react-native-webview`)
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
+  - React-RCTWebSocket (from `../node_modules/react-native/Libraries/WebSocket`)
252
+  - ReactCommon/jscallinvoker (from `../node_modules/react-native/ReactCommon`)
253
+  - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
254
+  - yoga (from `../node_modules/react-native/ReactCommon/yoga`)
255
+
256
+SPEC REPOS:
257
+  https://github.com/cocoapods/specs.git:
258
+    - boost-for-react-native
259
+
260
+EXTERNAL SOURCES:
261
+  DoubleConversion:
262
+    :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
263
+  FBLazyVector:
264
+    :path: "../node_modules/react-native/Libraries/FBLazyVector"
265
+  FBReactNativeSpec:
266
+    :path: "../node_modules/react-native/Libraries/FBReactNativeSpec"
267
+  Folly:
268
+    :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
269
+  glog:
270
+    :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
271
+  RCTRequired:
272
+    :path: "../node_modules/react-native/Libraries/RCTRequired"
273
+  RCTTypeSafety:
274
+    :path: "../node_modules/react-native/Libraries/TypeSafety"
275
+  React:
276
+    :path: "../node_modules/react-native/"
277
+  React-Core:
278
+    :path: "../node_modules/react-native/"
279
+  React-CoreModules:
280
+    :path: "../node_modules/react-native/React/CoreModules"
281
+  React-cxxreact:
282
+    :path: "../node_modules/react-native/ReactCommon/cxxreact"
283
+  React-DevSupport:
284
+    :path: "../node_modules/react-native/React"
285
+  React-jsi:
286
+    :path: "../node_modules/react-native/ReactCommon/jsi"
287
+  React-jsiexecutor:
288
+    :path: "../node_modules/react-native/ReactCommon/jsiexecutor"
289
+  React-jsinspector:
290
+    :path: "../node_modules/react-native/ReactCommon/jsinspector"
291
+  react-native-webview:
292
+    :path: "../node_modules/react-native-webview"
293
+  React-RCTActionSheet:
294
+    :path: "../node_modules/react-native/Libraries/ActionSheetIOS"
295
+  React-RCTAnimation:
296
+    :path: "../node_modules/react-native/Libraries/NativeAnimation"
297
+  React-RCTBlob:
298
+    :path: "../node_modules/react-native/Libraries/Blob"
299
+  React-RCTImage:
300
+    :path: "../node_modules/react-native/Libraries/Image"
301
+  React-RCTLinking:
302
+    :path: "../node_modules/react-native/Libraries/LinkingIOS"
303
+  React-RCTNetwork:
304
+    :path: "../node_modules/react-native/Libraries/Network"
305
+  React-RCTSettings:
306
+    :path: "../node_modules/react-native/Libraries/Settings"
307
+  React-RCTText:
308
+    :path: "../node_modules/react-native/Libraries/Text"
309
+  React-RCTVibration:
310
+    :path: "../node_modules/react-native/Libraries/Vibration"
311
+  React-RCTWebSocket:
312
+    :path: "../node_modules/react-native/Libraries/WebSocket"
313
+  ReactCommon:
314
+    :path: "../node_modules/react-native/ReactCommon"
315
+  yoga:
316
+    :path: "../node_modules/react-native/ReactCommon/yoga"
317
+
318
+SPEC CHECKSUMS:
319
+  boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
320
+  DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
321
+  FBLazyVector: 25cecad00b6c80265d8d221ebbb11f17573833c7
322
+  FBReactNativeSpec: b8bdc1ae4c6b6606f7c356ebdb16d333a973d8f0
323
+  Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
324
+  glog: 1f3da668190260b06b429bb211bfbee5cd790c28
325
+  RCTRequired: c7031be7b2b713281fef367d8f78595cc3cf666f
326
+  RCTTypeSafety: 29eaa44dacd929734e61a518ee085ffc701fe200
327
+  React: 1448d8977594e61ede4ccc692f0e8f1c78d7bab0
328
+  React-Core: c1aa322a8d75c1b851dfa2c55bee6cc7d8ca0836
329
+  React-CoreModules: c4ed55d261f1f4b890cd64ba814c2dc1915d7ae8
330
+  React-cxxreact: 2dbc82ae9cf50b12907c3999f6903e9d5a51e338
331
+  React-DevSupport: 2ddb9d6a0c5f2563947b58b0a7057400a3bfb490
332
+  React-jsi: 4fe147a90aa5029e460cf08a951de9a069fcecde
333
+  React-jsiexecutor: 053c6cada7746e4b49585a5d15f0ee1b0cf4a8db
334
+  React-jsinspector: c16dc81972dfe9c67a0dd8077cbbfd60251033b1
335
+  react-native-webview: 497e33128ff93bf21f1848ea99aa200c97e29e32
336
+  React-RCTActionSheet: cd0dbede154de36b8812bebe70942990f6ff9d5e
337
+  React-RCTAnimation: bbf38485ed1c41b7154f8331efed06760761eaea
338
+  React-RCTBlob: 96720a7efb8dbbe289790e755528259f2b4941ad
339
+  React-RCTImage: 354dc4cfe1cd52903a5104393ea5b22d0b382bc5
340
+  React-RCTLinking: 8949c1f4380adf203d6f59b88d206adb6ea0aee3
341
+  React-RCTNetwork: b8d50f5e01b8c3d2064582c9c5663ebaaf0cbf6e
342
+  React-RCTSettings: 55550351773a9a9fcd7111194004363137621764
343
+  React-RCTText: 2718206f94dd33bd3477f9626179c916a2cf0f66
344
+  React-RCTVibration: 8b6204b1e03c482f3d172ac2f5cb83c4ea6615f7
345
+  React-RCTWebSocket: 594cf4b38755106cd2c0652b76b42bd4ed438510
346
+  ReactCommon: 416920ed8e51d43db9790ec51cbe6cb4f534de02
347
+  yoga: 222f3b97cb4da809f0dd3b69e342853532fd315f
348
+
349
+PODFILE CHECKSUM: 4dfa923e8e730b798cd689bfaf37627329f7ef40
350
+
351
+COCOAPODS: 1.6.1

+ 53
- 0
examples/WebTest/ios/WebTest-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
examples/WebTest/ios/WebTest-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>

+ 923
- 0
examples/WebTest/ios/WebTest.xcodeproj/project.pbxproj View File

@@ -0,0 +1,923 @@
1
+// !$*UTF8*$!
2
+{
3
+	archiveVersion = 1;
4
+	classes = {
5
+	};
6
+	objectVersion = 46;
7
+	objects = {
8
+
9
+/* Begin PBXBuildFile section */
10
+		00E356F31AD99517003FC87E /* WebTestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* WebTestTests.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 /* WebTestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* WebTestTests.m */; };
19
+		73C7150782A89BA8F23935C2 /* libPods-WebTestTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F8A1C5F9DE48F412B3BE575 /* libPods-WebTestTests.a */; };
20
+		A27836EEF84C48B801B97080 /* libPods-WebTest-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F14D59554023643453F62D9 /* libPods-WebTest-tvOS.a */; };
21
+		E077D5578C81FE8E44F850CE /* libPods-WebTest-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF5CE7FD7B21B57F93DCB9CA /* libPods-WebTest-tvOSTests.a */; };
22
+		FAC8157B66E041075386AEE8 /* libPods-WebTest.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 14BCC4166403B7CF7A97F88B /* libPods-WebTest.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 = WebTest;
32
+		};
33
+		2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
34
+			isa = PBXContainerItemProxy;
35
+			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
36
+			proxyType = 1;
37
+			remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
38
+			remoteInfo = "WebTest-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 /* WebTestTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = WebTestTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
45
+		00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
46
+		00E356F21AD99517003FC87E /* WebTestTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = WebTestTests.m; sourceTree = "<group>"; };
47
+		13B07F961A680F5B00A75B9A /* WebTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
48
+		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = WebTest/AppDelegate.h; sourceTree = "<group>"; };
49
+		13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = WebTest/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 = WebTest/Images.xcassets; sourceTree = "<group>"; };
52
+		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = WebTest/Info.plist; sourceTree = "<group>"; };
53
+		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = WebTest/main.m; sourceTree = "<group>"; };
54
+		14BCC4166403B7CF7A97F88B /* libPods-WebTest.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WebTest.a"; sourceTree = BUILT_PRODUCTS_DIR; };
55
+		2D02E47B1E0B4A5D006451C7 /* WebTest-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "WebTest-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
56
+		2D02E4901E0B4A5D006451C7 /* WebTest-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "WebTest-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
57
+		2D09D777360CD553FD6FC423 /* Pods-WebTest-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-WebTest-tvOSTests/Pods-WebTest-tvOSTests.release.xcconfig"; sourceTree = "<group>"; };
58
+		332C7963940177F9256B8C2D /* Pods-WebTest-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest-tvOS.release.xcconfig"; path = "Target Support Files/Pods-WebTest-tvOS/Pods-WebTest-tvOS.release.xcconfig"; sourceTree = "<group>"; };
59
+		5EE62412A791AAA92F7EEE08 /* Pods-WebTest-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-WebTest-tvOSTests/Pods-WebTest-tvOSTests.debug.xcconfig"; sourceTree = "<group>"; };
60
+		5F14D59554023643453F62D9 /* libPods-WebTest-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WebTest-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
61
+		7659528C376824AF19FEAD2C /* Pods-WebTestTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTestTests.debug.xcconfig"; path = "Target Support Files/Pods-WebTestTests/Pods-WebTestTests.debug.xcconfig"; sourceTree = "<group>"; };
62
+		7C4CDD71CB431C5C192D1A1A /* Pods-WebTestTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTestTests.release.xcconfig"; path = "Target Support Files/Pods-WebTestTests/Pods-WebTestTests.release.xcconfig"; sourceTree = "<group>"; };
63
+		9F8A1C5F9DE48F412B3BE575 /* libPods-WebTestTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WebTestTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
64
+		A46F45906D4C959603351B80 /* Pods-WebTest.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest.release.xcconfig"; path = "Target Support Files/Pods-WebTest/Pods-WebTest.release.xcconfig"; sourceTree = "<group>"; };
65
+		AF5CE7FD7B21B57F93DCB9CA /* libPods-WebTest-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WebTest-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
66
+		ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
67
+		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; };
68
+		FAC9F8A78EB284102A0A7642 /* Pods-WebTest.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest.debug.xcconfig"; path = "Target Support Files/Pods-WebTest/Pods-WebTest.debug.xcconfig"; sourceTree = "<group>"; };
69
+		FD63EFFC9B0F1772E9F36B3E /* Pods-WebTest-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WebTest-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-WebTest-tvOS/Pods-WebTest-tvOS.debug.xcconfig"; sourceTree = "<group>"; };
70
+/* End PBXFileReference section */
71
+
72
+/* Begin PBXFrameworksBuildPhase section */
73
+		00E356EB1AD99517003FC87E /* Frameworks */ = {
74
+			isa = PBXFrameworksBuildPhase;
75
+			buildActionMask = 2147483647;
76
+			files = (
77
+				73C7150782A89BA8F23935C2 /* libPods-WebTestTests.a in Frameworks */,
78
+			);
79
+			runOnlyForDeploymentPostprocessing = 0;
80
+		};
81
+		13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
82
+			isa = PBXFrameworksBuildPhase;
83
+			buildActionMask = 2147483647;
84
+			files = (
85
+				FAC8157B66E041075386AEE8 /* libPods-WebTest.a in Frameworks */,
86
+			);
87
+			runOnlyForDeploymentPostprocessing = 0;
88
+		};
89
+		2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
90
+			isa = PBXFrameworksBuildPhase;
91
+			buildActionMask = 2147483647;
92
+			files = (
93
+				A27836EEF84C48B801B97080 /* libPods-WebTest-tvOS.a in Frameworks */,
94
+			);
95
+			runOnlyForDeploymentPostprocessing = 0;
96
+		};
97
+		2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
98
+			isa = PBXFrameworksBuildPhase;
99
+			buildActionMask = 2147483647;
100
+			files = (
101
+				E077D5578C81FE8E44F850CE /* libPods-WebTest-tvOSTests.a in Frameworks */,
102
+			);
103
+			runOnlyForDeploymentPostprocessing = 0;
104
+		};
105
+/* End PBXFrameworksBuildPhase section */
106
+
107
+/* Begin PBXGroup section */
108
+		00E356EF1AD99517003FC87E /* WebTestTests */ = {
109
+			isa = PBXGroup;
110
+			children = (
111
+				00E356F21AD99517003FC87E /* WebTestTests.m */,
112
+				00E356F01AD99517003FC87E /* Supporting Files */,
113
+			);
114
+			path = WebTestTests;
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 /* WebTest */ = {
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 = WebTest;
137
+			sourceTree = "<group>";
138
+		};
139
+		2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
140
+			isa = PBXGroup;
141
+			children = (
142
+				ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
143
+				ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
144
+				14BCC4166403B7CF7A97F88B /* libPods-WebTest.a */,
145
+				5F14D59554023643453F62D9 /* libPods-WebTest-tvOS.a */,
146
+				AF5CE7FD7B21B57F93DCB9CA /* libPods-WebTest-tvOSTests.a */,
147
+				9F8A1C5F9DE48F412B3BE575 /* libPods-WebTestTests.a */,
148
+			);
149
+			name = Frameworks;
150
+			sourceTree = "<group>";
151
+		};
152
+		6B243DA357207150F537400B /* Pods */ = {
153
+			isa = PBXGroup;
154
+			children = (
155
+				FAC9F8A78EB284102A0A7642 /* Pods-WebTest.debug.xcconfig */,
156
+				A46F45906D4C959603351B80 /* Pods-WebTest.release.xcconfig */,
157
+				FD63EFFC9B0F1772E9F36B3E /* Pods-WebTest-tvOS.debug.xcconfig */,
158
+				332C7963940177F9256B8C2D /* Pods-WebTest-tvOS.release.xcconfig */,
159
+				5EE62412A791AAA92F7EEE08 /* Pods-WebTest-tvOSTests.debug.xcconfig */,
160
+				2D09D777360CD553FD6FC423 /* Pods-WebTest-tvOSTests.release.xcconfig */,
161
+				7659528C376824AF19FEAD2C /* Pods-WebTestTests.debug.xcconfig */,
162
+				7C4CDD71CB431C5C192D1A1A /* Pods-WebTestTests.release.xcconfig */,
163
+			);
164
+			name = Pods;
165
+			path = Pods;
166
+			sourceTree = "<group>";
167
+		};
168
+		832341AE1AAA6A7D00B99B32 /* Libraries */ = {
169
+			isa = PBXGroup;
170
+			children = (
171
+			);
172
+			name = Libraries;
173
+			sourceTree = "<group>";
174
+		};
175
+		83CBB9F61A601CBA00E9B192 = {
176
+			isa = PBXGroup;
177
+			children = (
178
+				13B07FAE1A68108700A75B9A /* WebTest */,
179
+				832341AE1AAA6A7D00B99B32 /* Libraries */,
180
+				00E356EF1AD99517003FC87E /* WebTestTests */,
181
+				83CBBA001A601CBA00E9B192 /* Products */,
182
+				2D16E6871FA4F8E400B85C8A /* Frameworks */,
183
+				6B243DA357207150F537400B /* Pods */,
184
+			);
185
+			indentWidth = 2;
186
+			sourceTree = "<group>";
187
+			tabWidth = 2;
188
+			usesTabs = 0;
189
+		};
190
+		83CBBA001A601CBA00E9B192 /* Products */ = {
191
+			isa = PBXGroup;
192
+			children = (
193
+				13B07F961A680F5B00A75B9A /* WebTest.app */,
194
+				00E356EE1AD99517003FC87E /* WebTestTests.xctest */,
195
+				2D02E47B1E0B4A5D006451C7 /* WebTest-tvOS.app */,
196
+				2D02E4901E0B4A5D006451C7 /* WebTest-tvOSTests.xctest */,
197
+			);
198
+			name = Products;
199
+			sourceTree = "<group>";
200
+		};
201
+/* End PBXGroup section */
202
+
203
+/* Begin PBXNativeTarget section */
204
+		00E356ED1AD99517003FC87E /* WebTestTests */ = {
205
+			isa = PBXNativeTarget;
206
+			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "WebTestTests" */;
207
+			buildPhases = (
208
+				C7593ED1F6FAC33E5BFD27A4 /* [CP] Check Pods Manifest.lock */,
209
+				00E356EA1AD99517003FC87E /* Sources */,
210
+				00E356EB1AD99517003FC87E /* Frameworks */,
211
+				00E356EC1AD99517003FC87E /* Resources */,
212
+			);
213
+			buildRules = (
214
+			);
215
+			dependencies = (
216
+				00E356F51AD99517003FC87E /* PBXTargetDependency */,
217
+			);
218
+			name = WebTestTests;
219
+			productName = WebTestTests;
220
+			productReference = 00E356EE1AD99517003FC87E /* WebTestTests.xctest */;
221
+			productType = "com.apple.product-type.bundle.unit-test";
222
+		};
223
+		13B07F861A680F5B00A75B9A /* WebTest */ = {
224
+			isa = PBXNativeTarget;
225
+			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "WebTest" */;
226
+			buildPhases = (
227
+				9DEFA2BC87F483321A5AFD1F /* [CP] Check Pods Manifest.lock */,
228
+				FD10A7F022414F080027D42C /* Start Packager */,
229
+				13B07F871A680F5B00A75B9A /* Sources */,
230
+				13B07F8C1A680F5B00A75B9A /* Frameworks */,
231
+				13B07F8E1A680F5B00A75B9A /* Resources */,
232
+				00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
233
+			);
234
+			buildRules = (
235
+			);
236
+			dependencies = (
237
+			);
238
+			name = WebTest;
239
+			productName = WebTest;
240
+			productReference = 13B07F961A680F5B00A75B9A /* WebTest.app */;
241
+			productType = "com.apple.product-type.application";
242
+		};
243
+		2D02E47A1E0B4A5D006451C7 /* WebTest-tvOS */ = {
244
+			isa = PBXNativeTarget;
245
+			buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "WebTest-tvOS" */;
246
+			buildPhases = (
247
+				AED7EFF31263DFED1EA267C5 /* [CP] Check Pods Manifest.lock */,
248
+				FD10A7F122414F3F0027D42C /* Start Packager */,
249
+				2D02E4771E0B4A5D006451C7 /* Sources */,
250
+				2D02E4781E0B4A5D006451C7 /* Frameworks */,
251
+				2D02E4791E0B4A5D006451C7 /* Resources */,
252
+				2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
253
+			);
254
+			buildRules = (
255
+			);
256
+			dependencies = (
257
+			);
258
+			name = "WebTest-tvOS";
259
+			productName = "WebTest-tvOS";
260
+			productReference = 2D02E47B1E0B4A5D006451C7 /* WebTest-tvOS.app */;
261
+			productType = "com.apple.product-type.application";
262
+		};
263
+		2D02E48F1E0B4A5D006451C7 /* WebTest-tvOSTests */ = {
264
+			isa = PBXNativeTarget;
265
+			buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "WebTest-tvOSTests" */;
266
+			buildPhases = (
267
+				4256376FF065B9D7D0BE6D86 /* [CP] Check Pods Manifest.lock */,
268
+				2D02E48C1E0B4A5D006451C7 /* Sources */,
269
+				2D02E48D1E0B4A5D006451C7 /* Frameworks */,
270
+				2D02E48E1E0B4A5D006451C7 /* Resources */,
271
+			);
272
+			buildRules = (
273
+			);
274
+			dependencies = (
275
+				2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
276
+			);
277
+			name = "WebTest-tvOSTests";
278
+			productName = "WebTest-tvOSTests";
279
+			productReference = 2D02E4901E0B4A5D006451C7 /* WebTest-tvOSTests.xctest */;
280
+			productType = "com.apple.product-type.bundle.unit-test";
281
+		};
282
+/* End PBXNativeTarget section */
283
+
284
+/* Begin PBXProject section */
285
+		83CBB9F71A601CBA00E9B192 /* Project object */ = {
286
+			isa = PBXProject;
287
+			attributes = {
288
+				LastUpgradeCheck = 0940;
289
+				ORGANIZATIONNAME = Facebook;
290
+				TargetAttributes = {
291
+					00E356ED1AD99517003FC87E = {
292
+						CreatedOnToolsVersion = 6.2;
293
+						TestTargetID = 13B07F861A680F5B00A75B9A;
294
+					};
295
+					2D02E47A1E0B4A5D006451C7 = {
296
+						CreatedOnToolsVersion = 8.2.1;
297
+						ProvisioningStyle = Automatic;
298
+					};
299
+					2D02E48F1E0B4A5D006451C7 = {
300
+						CreatedOnToolsVersion = 8.2.1;
301
+						ProvisioningStyle = Automatic;
302
+						TestTargetID = 2D02E47A1E0B4A5D006451C7;
303
+					};
304
+				};
305
+			};
306
+			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "WebTest" */;
307
+			compatibilityVersion = "Xcode 3.2";
308
+			developmentRegion = English;
309
+			hasScannedForEncodings = 0;
310
+			knownRegions = (
311
+				en,
312
+				Base,
313
+			);
314
+			mainGroup = 83CBB9F61A601CBA00E9B192;
315
+			productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
316
+			projectDirPath = "";
317
+			projectRoot = "";
318
+			targets = (
319
+				13B07F861A680F5B00A75B9A /* WebTest */,
320
+				00E356ED1AD99517003FC87E /* WebTestTests */,
321
+				2D02E47A1E0B4A5D006451C7 /* WebTest-tvOS */,
322
+				2D02E48F1E0B4A5D006451C7 /* WebTest-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";
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";
389
+		};
390
+		4256376FF065B9D7D0BE6D86 /* [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-WebTest-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
+		9DEFA2BC87F483321A5AFD1F /* [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-WebTest-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
+		AED7EFF31263DFED1EA267C5 /* [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-WebTest-tvOS-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
+		C7593ED1F6FAC33E5BFD27A4 /* [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-WebTestTests-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 /* WebTestTests.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 /* WebTestTests.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 /* WebTest */;
559
+			targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
560
+		};
561
+		2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
562
+			isa = PBXTargetDependency;
563
+			target = 2D02E47A1E0B4A5D006451C7 /* WebTest-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 = WebTest;
576
+			sourceTree = "<group>";
577
+		};
578
+/* End PBXVariantGroup section */
579
+
580
+/* Begin XCBuildConfiguration section */
581
+		00E356F61AD99517003FC87E /* Debug */ = {
582
+			isa = XCBuildConfiguration;
583
+			baseConfigurationReference = 7659528C376824AF19FEAD2C /* Pods-WebTestTests.debug.xcconfig */;
584
+			buildSettings = {
585
+				BUNDLE_LOADER = "$(TEST_HOST)";
586
+				GCC_PREPROCESSOR_DEFINITIONS = (
587
+					"DEBUG=1",
588
+					"$(inherited)",
589
+				);
590
+				INFOPLIST_FILE = WebTestTests/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)/WebTest.app/WebTest";
601
+			};
602
+			name = Debug;
603
+		};
604
+		00E356F71AD99517003FC87E /* Release */ = {
605
+			isa = XCBuildConfiguration;
606
+			baseConfigurationReference = 7C4CDD71CB431C5C192D1A1A /* Pods-WebTestTests.release.xcconfig */;
607
+			buildSettings = {
608
+				BUNDLE_LOADER = "$(TEST_HOST)";
609
+				COPY_PHASE_STRIP = NO;
610
+				INFOPLIST_FILE = WebTestTests/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)/WebTest.app/WebTest";
621
+			};
622
+			name = Release;
623
+		};
624
+		13B07F941A680F5B00A75B9A /* Debug */ = {
625
+			isa = XCBuildConfiguration;
626
+			baseConfigurationReference = FAC9F8A78EB284102A0A7642 /* Pods-WebTest.debug.xcconfig */;
627
+			buildSettings = {
628
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
629
+				CURRENT_PROJECT_VERSION = 1;
630
+				DEAD_CODE_STRIPPING = NO;
631
+				INFOPLIST_FILE = WebTest/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 = WebTest;
640
+				VERSIONING_SYSTEM = "apple-generic";
641
+			};
642
+			name = Debug;
643
+		};
644
+		13B07F951A680F5B00A75B9A /* Release */ = {
645
+			isa = XCBuildConfiguration;
646
+			baseConfigurationReference = A46F45906D4C959603351B80 /* Pods-WebTest.release.xcconfig */;
647
+			buildSettings = {
648
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
649
+				CURRENT_PROJECT_VERSION = 1;
650
+				INFOPLIST_FILE = WebTest/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 = WebTest;
659
+				VERSIONING_SYSTEM = "apple-generic";
660
+			};
661
+			name = Release;
662
+		};
663
+		2D02E4971E0B4A5E006451C7 /* Debug */ = {
664
+			isa = XCBuildConfiguration;
665
+			baseConfigurationReference = FD63EFFC9B0F1772E9F36B3E /* Pods-WebTest-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 = "WebTest-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.WebTest-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 = 332C7963940177F9256B8C2D /* Pods-WebTest-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 = "WebTest-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.WebTest-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 = 5EE62412A791AAA92F7EEE08 /* Pods-WebTest-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 = "WebTest-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.WebTest-tvOSTests";
739
+				PRODUCT_NAME = "$(TARGET_NAME)";
740
+				SDKROOT = appletvos;
741
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WebTest-tvOS.app/WebTest-tvOS";
742
+				TVOS_DEPLOYMENT_TARGET = 10.1;
743
+			};
744
+			name = Debug;
745
+		};
746
+		2D02E49A1E0B4A5E006451C7 /* Release */ = {
747
+			isa = XCBuildConfiguration;
748
+			baseConfigurationReference = 2D09D777360CD553FD6FC423 /* Pods-WebTest-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 = "WebTest-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.WebTest-tvOSTests";
766
+				PRODUCT_NAME = "$(TARGET_NAME)";
767
+				SDKROOT = appletvos;
768
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/WebTest-tvOS.app/WebTest-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_CXX_LANGUAGE_STANDARD = "gnu++0x";
778
+				CLANG_CXX_LIBRARY = "libc++";
779
+				CLANG_ENABLE_MODULES = YES;
780
+				CLANG_ENABLE_OBJC_ARC = YES;
781
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
782
+				CLANG_WARN_BOOL_CONVERSION = YES;
783
+				CLANG_WARN_COMMA = YES;
784
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
785
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
786
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
787
+				CLANG_WARN_EMPTY_BODY = YES;
788
+				CLANG_WARN_ENUM_CONVERSION = YES;
789
+				CLANG_WARN_INFINITE_RECURSION = YES;
790
+				CLANG_WARN_INT_CONVERSION = YES;
791
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
792
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
793
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
794
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
795
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
796
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
797
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
798
+				CLANG_WARN_UNREACHABLE_CODE = YES;
799
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
800
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
801
+				COPY_PHASE_STRIP = NO;
802
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
803
+				ENABLE_TESTABILITY = YES;
804
+				GCC_C_LANGUAGE_STANDARD = gnu99;
805
+				GCC_DYNAMIC_NO_PIC = NO;
806
+				GCC_NO_COMMON_BLOCKS = YES;
807
+				GCC_OPTIMIZATION_LEVEL = 0;
808
+				GCC_PREPROCESSOR_DEFINITIONS = (
809
+					"DEBUG=1",
810
+					"$(inherited)",
811
+				);
812
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
813
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
814
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
815
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
816
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
817
+				GCC_WARN_UNUSED_FUNCTION = YES;
818
+				GCC_WARN_UNUSED_VARIABLE = YES;
819
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
820
+				MTL_ENABLE_DEBUG_INFO = YES;
821
+				ONLY_ACTIVE_ARCH = YES;
822
+				SDKROOT = iphoneos;
823
+			};
824
+			name = Debug;
825
+		};
826
+		83CBBA211A601CBA00E9B192 /* Release */ = {
827
+			isa = XCBuildConfiguration;
828
+			buildSettings = {
829
+				ALWAYS_SEARCH_USER_PATHS = NO;
830
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
831
+				CLANG_CXX_LIBRARY = "libc++";
832
+				CLANG_ENABLE_MODULES = YES;
833
+				CLANG_ENABLE_OBJC_ARC = YES;
834
+				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
835
+				CLANG_WARN_BOOL_CONVERSION = YES;
836
+				CLANG_WARN_COMMA = YES;
837
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
838
+				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
839
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
840
+				CLANG_WARN_EMPTY_BODY = YES;
841
+				CLANG_WARN_ENUM_CONVERSION = YES;
842
+				CLANG_WARN_INFINITE_RECURSION = YES;
843
+				CLANG_WARN_INT_CONVERSION = YES;
844
+				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
845
+				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
846
+				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
847
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
848
+				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
849
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
850
+				CLANG_WARN_SUSPICIOUS_MOVE = YES;
851
+				CLANG_WARN_UNREACHABLE_CODE = YES;
852
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
853
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
854
+				COPY_PHASE_STRIP = YES;
855
+				ENABLE_NS_ASSERTIONS = NO;
856
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
857
+				GCC_C_LANGUAGE_STANDARD = gnu99;
858
+				GCC_NO_COMMON_BLOCKS = YES;
859
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
860
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
861
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
862
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
863
+				GCC_WARN_UNUSED_FUNCTION = YES;
864
+				GCC_WARN_UNUSED_VARIABLE = YES;
865
+				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
866
+				MTL_ENABLE_DEBUG_INFO = NO;
867
+				SDKROOT = iphoneos;
868
+				VALIDATE_PRODUCT = YES;
869
+			};
870
+			name = Release;
871
+		};
872
+/* End XCBuildConfiguration section */
873
+
874
+/* Begin XCConfigurationList section */
875
+		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "WebTestTests" */ = {
876
+			isa = XCConfigurationList;
877
+			buildConfigurations = (
878
+				00E356F61AD99517003FC87E /* Debug */,
879
+				00E356F71AD99517003FC87E /* Release */,
880
+			);
881
+			defaultConfigurationIsVisible = 0;
882
+			defaultConfigurationName = Release;
883
+		};
884
+		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "WebTest" */ = {
885
+			isa = XCConfigurationList;
886
+			buildConfigurations = (
887
+				13B07F941A680F5B00A75B9A /* Debug */,
888
+				13B07F951A680F5B00A75B9A /* Release */,
889
+			);
890
+			defaultConfigurationIsVisible = 0;
891
+			defaultConfigurationName = Release;
892
+		};
893
+		2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "WebTest-tvOS" */ = {
894
+			isa = XCConfigurationList;
895
+			buildConfigurations = (
896
+				2D02E4971E0B4A5E006451C7 /* Debug */,
897
+				2D02E4981E0B4A5E006451C7 /* Release */,
898
+			);
899
+			defaultConfigurationIsVisible = 0;
900
+			defaultConfigurationName = Release;
901
+		};
902
+		2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "WebTest-tvOSTests" */ = {
903
+			isa = XCConfigurationList;
904
+			buildConfigurations = (
905
+				2D02E4991E0B4A5E006451C7 /* Debug */,
906
+				2D02E49A1E0B4A5E006451C7 /* Release */,
907
+			);
908
+			defaultConfigurationIsVisible = 0;
909
+			defaultConfigurationName = Release;
910
+		};
911
+		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "WebTest" */ = {
912
+			isa = XCConfigurationList;
913
+			buildConfigurations = (
914
+				83CBBA201A601CBA00E9B192 /* Debug */,
915
+				83CBBA211A601CBA00E9B192 /* Release */,
916
+			);
917
+			defaultConfigurationIsVisible = 0;
918
+			defaultConfigurationName = Release;
919
+		};
920
+/* End XCConfigurationList section */
921
+	};
922
+	rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
923
+}

+ 10
- 0
examples/WebTest/ios/WebTest.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:WebTest.xcodeproj">
6
+   </FileRef>
7
+   <FileRef
8
+      location = "group:Pods/Pods.xcodeproj">
9
+   </FileRef>
10
+</Workspace>

+ 15
- 0
examples/WebTest/ios/WebTest/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
examples/WebTest/ios/WebTest/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:@"WebTest"
21
+                                            initialProperties:nil];
22
+
23
+  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
24
+
25
+  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
26
+  UIViewController *rootViewController = [UIViewController new];
27
+  rootViewController.view = rootView;
28
+  self.window.rootViewController = rootViewController;
29
+  [self.window makeKeyAndVisible];
30
+  return YES;
31
+}
32
+
33
+- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
34
+{
35
+#if DEBUG
36
+  return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
37
+#else
38
+  return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
39
+#endif
40
+}
41
+
42
+@end

+ 42
- 0
examples/WebTest/ios/WebTest/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="WebTest" 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
examples/WebTest/ios/WebTest/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
examples/WebTest/ios/WebTest/Images.xcassets/Contents.json View File

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

+ 57
- 0
examples/WebTest/ios/WebTest/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>WebTest</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
examples/WebTest/ios/WebTest/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
examples/WebTest/ios/WebTestTests/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
examples/WebTest/ios/WebTestTests/WebTestTests.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 WebTestTests : XCTestCase
18
+
19
+@end
20
+
21
+@implementation WebTestTests
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

+ 17
- 0
examples/WebTest/metro.config.js View File

@@ -0,0 +1,17 @@
1
+/**
2
+ * Metro configuration for React Native
3
+ * https://github.com/facebook/react-native
4
+ *
5
+ * @format
6
+ */
7
+
8
+module.exports = {
9
+  transformer: {
10
+    getTransformOptions: async () => ({
11
+      transform: {
12
+        experimentalImportSupport: false,
13
+        inlineRequires: false,
14
+      },
15
+    }),
16
+  },
17
+};

+ 45
- 0
examples/WebTest/package.json View File

@@ -0,0 +1,45 @@
1
+{
2
+  "name": "WebTest",
3
+  "version": "0.0.1",
4
+  "private": true,
5
+  "scripts": {
6
+    "start": "react-native start",
7
+    "test": "detox",
8
+    "detox-ios": "detox build --configuration ios.sim.debug && detox test --configuration ios.sim.debug",
9
+    "detox-android": "detox build --configuration android.emu.debug && detox test --configuration android.emu.debug",
10
+    "detox": "npm run detox-ios && npm run detox-android"
11
+  },
12
+  "dependencies": {
13
+    "react": "16.9.0",
14
+    "react-native": "0.61.0-rc.0",
15
+    "react-native-webview": "^7.0.2"
16
+  },
17
+  "devDependencies": {
18
+    "@babel/core": "^7.5.5",
19
+    "@babel/runtime": "^7.5.5",
20
+    "babel-jest": "^24.9.0",
21
+    "detox": "^14.0.3",
22
+    "jest": "^24.9.0",
23
+    "metro-react-native-babel-preset": "^0.56.0"
24
+  },
25
+  "jest": {
26
+    "preset": "react-native"
27
+  },
28
+  "detox": {
29
+    "configurations": {
30
+      "ios.sim.debug": {
31
+        "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/WebTest.app",
32
+        "build": "xcodebuild -workspace ios/WebTest.xcworkspace -scheme WebTest -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
33
+        "type": "ios.simulator",
34
+        "name": "iPhone X, iOS 12.4"
35
+      },
36
+      "android.emu.debug": {
37
+        "binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
38
+        "build": "cd android && ./gradlew assembleDebug assembleAndroidTest -DtestBuildType=debug && cd ..",
39
+        "type": "android.emulator",
40
+        "name": "Pixel_2_API_28"
41
+      }
42
+    },
43
+    "test-runner": "jest"
44
+  }
45
+}

+ 6559
- 0
examples/WebTest/yarn.lock
File diff suppressed because it is too large
View File


+ 2
- 4
jest.config.js View File

@@ -61,9 +61,7 @@ module.exports = {
61 61
   // globals: {},
62 62
 
63 63
   // An array of directory names to be searched recursively up from the requiring module's location
64
-  // moduleDirectories: [
65
-  //   "node_modules"
66
-  // ],
64
+  moduleDirectories: ['./node_modules'],
67 65
 
68 66
   // An array of file extensions your modules use
69 67
   // moduleFileExtensions: [
@@ -79,7 +77,7 @@ module.exports = {
79 77
   // moduleNameMapper: {},
80 78
 
81 79
   // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
82
-  // modulePathIgnorePatterns: [],
80
+  modulePathIgnorePatterns: ['./examples/'],
83 81
 
84 82
   // Activates notifications for test results
85 83
   // notify: false,