瀏覽代碼

add default width (screen width); add example

iou90 8 年之前
父節點
當前提交
afa3b4e372
共有 46 個文件被更改,包括 2376 次插入0 次删除
  1. 4
    0
      autoHeightWebView/index.android.js
  2. 4
    0
      autoHeightWebView/index.ios.js
  3. 3
    0
      examples/autoHeightWebViewExplorer/.babelrc
  4. 6
    0
      examples/autoHeightWebViewExplorer/.buckconfig
  5. 44
    0
      examples/autoHeightWebViewExplorer/.flowconfig
  6. 1
    0
      examples/autoHeightWebViewExplorer/.gitattributes
  7. 53
    0
      examples/autoHeightWebViewExplorer/.gitignore
  8. 1
    0
      examples/autoHeightWebViewExplorer/.watchmanconfig
  9. 12
    0
      examples/autoHeightWebViewExplorer/__tests__/index.android.js
  10. 12
    0
      examples/autoHeightWebViewExplorer/__tests__/index.ios.js
  11. 66
    0
      examples/autoHeightWebViewExplorer/android/app/BUCK
  12. 140
    0
      examples/autoHeightWebViewExplorer/android/app/build.gradle
  13. 66
    0
      examples/autoHeightWebViewExplorer/android/app/proguard-rules.pro
  14. 31
    0
      examples/autoHeightWebViewExplorer/android/app/src/main/AndroidManifest.xml
  15. 15
    0
      examples/autoHeightWebViewExplorer/android/app/src/main/java/com/autoheightwebviewexplorer/MainActivity.java
  16. 44
    0
      examples/autoHeightWebViewExplorer/android/app/src/main/java/com/autoheightwebviewexplorer/MainApplication.java
  17. 二進制
      examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  18. 二進制
      examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  19. 二進制
      examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  20. 二進制
      examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  21. 3
    0
      examples/autoHeightWebViewExplorer/android/app/src/main/res/values/strings.xml
  22. 8
    0
      examples/autoHeightWebViewExplorer/android/app/src/main/res/values/styles.xml
  23. 24
    0
      examples/autoHeightWebViewExplorer/android/build.gradle
  24. 20
    0
      examples/autoHeightWebViewExplorer/android/gradle.properties
  25. 二進制
      examples/autoHeightWebViewExplorer/android/gradle/wrapper/gradle-wrapper.jar
  26. 5
    0
      examples/autoHeightWebViewExplorer/android/gradle/wrapper/gradle-wrapper.properties
  27. 164
    0
      examples/autoHeightWebViewExplorer/android/gradlew
  28. 90
    0
      examples/autoHeightWebViewExplorer/android/gradlew.bat
  29. 8
    0
      examples/autoHeightWebViewExplorer/android/keystores/BUCK
  30. 4
    0
      examples/autoHeightWebViewExplorer/android/keystores/debug.keystore.properties
  31. 5
    0
      examples/autoHeightWebViewExplorer/android/settings.gradle
  32. 85
    0
      examples/autoHeightWebViewExplorer/explorer.js
  33. 9
    0
      examples/autoHeightWebViewExplorer/index.android.js
  34. 9
    0
      examples/autoHeightWebViewExplorer/index.ios.js
  35. 988
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer.xcodeproj/project.pbxproj
  36. 129
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer.xcodeproj/xcshareddata/xcschemes/autoHeightWebViewExplorer.xcscheme
  37. 16
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/AppDelegate.h
  38. 37
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/AppDelegate.m
  39. 42
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Base.lproj/LaunchScreen.xib
  40. 38
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Images.xcassets/AppIcon.appiconset/Contents.json
  41. 54
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Info.plist
  42. 18
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/main.m
  43. 24
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorerTests/Info.plist
  44. 70
    0
      examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorerTests/autoHeightWebViewExplorerTests.m
  45. 23
    0
      examples/autoHeightWebViewExplorer/package.json
  46. 1
    0
      package.json

+ 4
- 0
autoHeightWebView/index.android.js 查看文件

@@ -7,6 +7,7 @@ import React, {
7 7
 
8 8
 import {
9 9
     requireNativeComponent,
10
+    Dimensions,
10 11
     View,
11 12
     WebView
12 13
 } from 'react-native';
@@ -80,6 +81,7 @@ export default class AutoHeightWebView extends Component {
80 81
         } : { html: this.props.html };
81 82
         return (
82 83
             <View style={[{
84
+                width: ScreenWidth,
83 85
                 height: this.state.height + this.props.heightOffset
84 86
             }, this.props.style]}>
85 87
                 <RCTAutoHeightWebView
@@ -117,6 +119,8 @@ AutoHeightWebView.defaultProps = {
117 119
     heightOffset: 25
118 120
 }
119 121
 
122
+const ScreenWidth = Dimensions.get('window').width;
123
+
120 124
 const BaseScript =
121 125
     `
122 126
     ; (function () {

+ 4
- 0
autoHeightWebView/index.ios.js 查看文件

@@ -6,6 +6,7 @@ import React, {
6 6
 } from 'react';
7 7
 
8 8
 import {
9
+    Dimensions,
9 10
     View,
10 11
     WebView
11 12
 } from 'react-native';
@@ -59,6 +60,7 @@ export default class AutoHeightWebView extends Component {
59 60
     render() {
60 61
         return (
61 62
             <View style={[{
63
+                width: ScreenWidth,
62 64
                 height: this.state.height + this.props.heightOffset,
63 65
             }, this.props.style]}>
64 66
                 <WebView
@@ -93,6 +95,8 @@ AutoHeightWebView.defaultProps = {
93 95
     heightOffset: 12
94 96
 }
95 97
 
98
+const ScreenWidth = Dimensions.get('window').width;
99
+
96 100
 const BaseScript =
97 101
     `
98 102
     ; (function () {

+ 3
- 0
examples/autoHeightWebViewExplorer/.babelrc 查看文件

@@ -0,0 +1,3 @@
1
+{
2
+"presets": ["react-native"]
3
+}

+ 6
- 0
examples/autoHeightWebViewExplorer/.buckconfig 查看文件

@@ -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

+ 44
- 0
examples/autoHeightWebViewExplorer/.flowconfig 查看文件

@@ -0,0 +1,44 @@
1
+[ignore]
2
+; We fork some components by platform
3
+.*/*[.]android.js
4
+
5
+; Ignore "BUCK" generated dirs
6
+<PROJECT_ROOT>/\.buckd/
7
+
8
+; Ignore unexpected extra "@providesModule"
9
+.*/node_modules/.*/node_modules/fbjs/.*
10
+
11
+; Ignore duplicate module providers
12
+; For RN Apps installed via npm, "Libraries" folder is inside
13
+; "node_modules/react-native" but in the source repo it is in the root
14
+.*/Libraries/react-native/React.js
15
+.*/Libraries/react-native/ReactNative.js
16
+
17
+[include]
18
+
19
+[libs]
20
+node_modules/react-native/Libraries/react-native/react-native-interface.js
21
+node_modules/react-native/flow
22
+flow/
23
+
24
+[options]
25
+module.system=haste
26
+
27
+experimental.strict_type_args=true
28
+
29
+munge_underscores=true
30
+
31
+module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
32
+
33
+suppress_type=$FlowIssue
34
+suppress_type=$FlowFixMe
35
+suppress_type=$FixMe
36
+
37
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-6]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
38
+suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-6]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
39
+suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
40
+
41
+unsafe.enable_getters_and_setters=true
42
+
43
+[version]
44
+^0.36.0

+ 1
- 0
examples/autoHeightWebViewExplorer/.gitattributes 查看文件

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

+ 53
- 0
examples/autoHeightWebViewExplorer/.gitignore 查看文件

@@ -0,0 +1,53 @@
1
+# OSX
2
+#
3
+.DS_Store
4
+
5
+# Xcode
6
+#
7
+build/
8
+*.pbxuser
9
+!default.pbxuser
10
+*.mode1v3
11
+!default.mode1v3
12
+*.mode2v3
13
+!default.mode2v3
14
+*.perspectivev3
15
+!default.perspectivev3
16
+xcuserdata
17
+*.xccheckout
18
+*.moved-aside
19
+DerivedData
20
+*.hmap
21
+*.ipa
22
+*.xcuserstate
23
+project.xcworkspace
24
+
25
+# Android/IntelliJ
26
+#
27
+build/
28
+.idea
29
+.gradle
30
+local.properties
31
+*.iml
32
+
33
+# node.js
34
+#
35
+node_modules/
36
+npm-debug.log
37
+
38
+# BUCK
39
+buck-out/
40
+\.buckd/
41
+android/app/libs
42
+*.keystore
43
+
44
+# fastlane
45
+#
46
+# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
47
+# screenshots whenever they are needed.
48
+# For more information about the recommended setup visit:
49
+# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
50
+
51
+fastlane/report.xml
52
+fastlane/Preview.html
53
+fastlane/screenshots

+ 1
- 0
examples/autoHeightWebViewExplorer/.watchmanconfig 查看文件

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

+ 12
- 0
examples/autoHeightWebViewExplorer/__tests__/index.android.js 查看文件

@@ -0,0 +1,12 @@
1
+import 'react-native';
2
+import React from 'react';
3
+import Index from '../index.android.js';
4
+
5
+// Note: test renderer must be required after react-native.
6
+import renderer from 'react-test-renderer';
7
+
8
+it('renders correctly', () => {
9
+  const tree = renderer.create(
10
+    <Index />
11
+  );
12
+});

+ 12
- 0
examples/autoHeightWebViewExplorer/__tests__/index.ios.js 查看文件

@@ -0,0 +1,12 @@
1
+import 'react-native';
2
+import React from 'react';
3
+import Index from '../index.ios.js';
4
+
5
+// Note: test renderer must be required after react-native.
6
+import renderer from 'react-test-renderer';
7
+
8
+it('renders correctly', () => {
9
+  const tree = renderer.create(
10
+    <Index />
11
+  );
12
+});

+ 66
- 0
examples/autoHeightWebViewExplorer/android/app/BUCK 查看文件

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

+ 140
- 0
examples/autoHeightWebViewExplorer/android/app/build.gradle 查看文件

@@ -0,0 +1,140 @@
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
+ *   // whether to bundle JS and assets in debug mode
22
+ *   bundleInDebug: false,
23
+ *
24
+ *   // whether to bundle JS and assets in release mode
25
+ *   bundleInRelease: true,
26
+ *
27
+ *   // whether to bundle JS and assets in another build variant (if configured).
28
+ *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
29
+ *   // The configuration property can be in the following formats
30
+ *   //         'bundleIn${productFlavor}${buildType}'
31
+ *   //         'bundleIn${buildType}'
32
+ *   // bundleInFreeDebug: true,
33
+ *   // bundleInPaidRelease: true,
34
+ *   // bundleInBeta: true,
35
+ *
36
+ *   // the root of your project, i.e. where "package.json" lives
37
+ *   root: "../../",
38
+ *
39
+ *   // where to put the JS bundle asset in debug mode
40
+ *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
41
+ *
42
+ *   // where to put the JS bundle asset in release mode
43
+ *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
44
+ *
45
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
46
+ *   // require('./image.png')), in debug mode
47
+ *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
48
+ *
49
+ *   // where to put drawable resources / React Native assets, e.g. the ones you use via
50
+ *   // require('./image.png')), in release mode
51
+ *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
52
+ *
53
+ *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
54
+ *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
55
+ *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
56
+ *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
57
+ *   // for example, you might want to remove it from here.
58
+ *   inputExcludes: ["android/**", "ios/**"],
59
+ *
60
+ *   // override which node gets called and with what additional arguments
61
+ *   nodeExecutableAndArgs: ["node"]
62
+ *
63
+ *   // supply additional arguments to the packager
64
+ *   extraPackagerArgs: []
65
+ * ]
66
+ */
67
+
68
+apply from: "../../node_modules/react-native/react.gradle"
69
+
70
+/**
71
+ * Set this to true to create two separate APKs instead of one:
72
+ *   - An APK that only works on ARM devices
73
+ *   - An APK that only works on x86 devices
74
+ * The advantage is the size of the APK is reduced by about 4MB.
75
+ * Upload all the APKs to the Play Store and people will download
76
+ * the correct one based on the CPU architecture of their device.
77
+ */
78
+def enableSeparateBuildPerCPUArchitecture = false
79
+
80
+/**
81
+ * Run Proguard to shrink the Java bytecode in release builds.
82
+ */
83
+def enableProguardInReleaseBuilds = false
84
+
85
+android {
86
+    compileSdkVersion 23
87
+    buildToolsVersion "23.0.1"
88
+
89
+    defaultConfig {
90
+        applicationId "com.autoheightwebviewexplorer"
91
+        minSdkVersion 16
92
+        targetSdkVersion 22
93
+        versionCode 1
94
+        versionName "1.0"
95
+        ndk {
96
+            abiFilters "armeabi-v7a", "x86"
97
+        }
98
+    }
99
+    splits {
100
+        abi {
101
+            reset()
102
+            enable enableSeparateBuildPerCPUArchitecture
103
+            universalApk false  // If true, also generate a universal APK
104
+            include "armeabi-v7a", "x86"
105
+        }
106
+    }
107
+    buildTypes {
108
+        release {
109
+            minifyEnabled enableProguardInReleaseBuilds
110
+            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
111
+        }
112
+    }
113
+    // applicationVariants are e.g. debug, release
114
+    applicationVariants.all { variant ->
115
+        variant.outputs.each { output ->
116
+            // For each separate APK per architecture, set a unique version code as described here:
117
+            // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
118
+            def versionCodes = ["armeabi-v7a":1, "x86":2]
119
+            def abi = output.getFilter(OutputFile.ABI)
120
+            if (abi != null) {  // null for the universal-debug, universal-release variants
121
+                output.versionCodeOverride =
122
+                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
123
+            }
124
+        }
125
+    }
126
+}
127
+
128
+dependencies {
129
+    compile project(':react-native-autoheightwebview')
130
+    compile fileTree(dir: "libs", include: ["*.jar"])
131
+    compile "com.android.support:appcompat-v7:23.0.1"
132
+    compile "com.facebook.react:react-native:+"  // From node_modules
133
+}
134
+
135
+// Run this once to be able to run the application with BUCK
136
+// puts all compile dependencies into folder libs for BUCK to use
137
+task copyDownloadableDepsToLibs(type: Copy) {
138
+    from configurations.compile
139
+    into 'libs'
140
+}

+ 66
- 0
examples/autoHeightWebViewExplorer/android/app/proguard-rules.pro 查看文件

@@ -0,0 +1,66 @@
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:
11
+
12
+# If your project uses WebView with JS, uncomment the following
13
+# and specify the fully qualified class name to the JavaScript interface
14
+# class:
15
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16
+#   public *;
17
+#}
18
+
19
+# Disabling obfuscation is useful if you collect stack traces from production crashes
20
+# (unless you are using a system that supports de-obfuscate the stack traces).
21
+-dontobfuscate
22
+
23
+# React Native
24
+
25
+# Keep our interfaces so they can be used by other ProGuard rules.
26
+# See http://sourceforge.net/p/proguard/bugs/466/
27
+-keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip
28
+-keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters
29
+-keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
30
+
31
+# Do not strip any method/class that is annotated with @DoNotStrip
32
+-keep @com.facebook.proguard.annotations.DoNotStrip class *
33
+-keep @com.facebook.common.internal.DoNotStrip class *
34
+-keepclassmembers class * {
35
+    @com.facebook.proguard.annotations.DoNotStrip *;
36
+    @com.facebook.common.internal.DoNotStrip *;
37
+}
38
+
39
+-keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * {
40
+  void set*(***);
41
+  *** get*();
42
+}
43
+
44
+-keep class * extends com.facebook.react.bridge.JavaScriptModule { *; }
45
+-keep class * extends com.facebook.react.bridge.NativeModule { *; }
46
+-keepclassmembers,includedescriptorclasses class * { native <methods>; }
47
+-keepclassmembers class *  { @com.facebook.react.uimanager.UIProp <fields>; }
48
+-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactProp <methods>; }
49
+-keepclassmembers class *  { @com.facebook.react.uimanager.annotations.ReactPropGroup <methods>; }
50
+
51
+-dontwarn com.facebook.react.**
52
+
53
+# okhttp
54
+
55
+-keepattributes Signature
56
+-keepattributes *Annotation*
57
+-keep class okhttp3.** { *; }
58
+-keep interface okhttp3.** { *; }
59
+-dontwarn okhttp3.**
60
+
61
+# okio
62
+
63
+-keep class sun.misc.Unsafe { *; }
64
+-dontwarn java.nio.file.*
65
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
66
+-dontwarn okio.**

+ 31
- 0
examples/autoHeightWebViewExplorer/android/app/src/main/AndroidManifest.xml 查看文件

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

+ 15
- 0
examples/autoHeightWebViewExplorer/android/app/src/main/java/com/autoheightwebviewexplorer/MainActivity.java 查看文件

@@ -0,0 +1,15 @@
1
+package com.autoheightwebviewexplorer;
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.
9
+     * This is used to schedule rendering of the component.
10
+     */
11
+    @Override
12
+    protected String getMainComponentName() {
13
+        return "autoHeightWebViewExplorer";
14
+    }
15
+}

+ 44
- 0
examples/autoHeightWebViewExplorer/android/app/src/main/java/com/autoheightwebviewexplorer/MainApplication.java 查看文件

@@ -0,0 +1,44 @@
1
+package com.autoheightwebviewexplorer;
2
+
3
+import android.app.Application;
4
+import android.util.Log;
5
+
6
+import com.facebook.react.ReactApplication;
7
+import com.dscj.autoheightwebview.AutoHeightWebViewPackage;
8
+import com.facebook.react.ReactInstanceManager;
9
+import com.facebook.react.ReactNativeHost;
10
+import com.facebook.react.ReactPackage;
11
+import com.facebook.react.shell.MainReactPackage;
12
+import com.facebook.soloader.SoLoader;
13
+
14
+import java.util.Arrays;
15
+import java.util.List;
16
+
17
+public class MainApplication extends Application implements ReactApplication {
18
+
19
+  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
20
+    @Override
21
+    protected boolean getUseDeveloperSupport() {
22
+      return BuildConfig.DEBUG;
23
+    }
24
+
25
+    @Override
26
+    protected List<ReactPackage> getPackages() {
27
+      return Arrays.<ReactPackage>asList(
28
+          new MainReactPackage(),
29
+            new AutoHeightWebViewPackage()
30
+      );
31
+    }
32
+  };
33
+
34
+  @Override
35
+  public ReactNativeHost getReactNativeHost() {
36
+    return mReactNativeHost;
37
+  }
38
+
39
+  @Override
40
+  public void onCreate() {
41
+    super.onCreate();
42
+    SoLoader.init(this, /* native exopackage */ false);
43
+  }
44
+}

二進制
examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-hdpi/ic_launcher.png 查看文件


二進制
examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-mdpi/ic_launcher.png 查看文件


二進制
examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png 查看文件


二進制
examples/autoHeightWebViewExplorer/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png 查看文件


+ 3
- 0
examples/autoHeightWebViewExplorer/android/app/src/main/res/values/strings.xml 查看文件

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

+ 8
- 0
examples/autoHeightWebViewExplorer/android/app/src/main/res/values/styles.xml 查看文件

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

+ 24
- 0
examples/autoHeightWebViewExplorer/android/build.gradle 查看文件

@@ -0,0 +1,24 @@
1
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
2
+
3
+buildscript {
4
+    repositories {
5
+        jcenter()
6
+    }
7
+    dependencies {
8
+        classpath 'com.android.tools.build:gradle:1.3.1'
9
+
10
+        // NOTE: Do not place your application dependencies here; they belong
11
+        // in the individual module build.gradle files
12
+    }
13
+}
14
+
15
+allprojects {
16
+    repositories {
17
+        mavenLocal()
18
+        jcenter()
19
+        maven {
20
+            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
21
+            url "$rootDir/../node_modules/react-native/android"
22
+        }
23
+    }
24
+}

+ 20
- 0
examples/autoHeightWebViewExplorer/android/gradle.properties 查看文件

@@ -0,0 +1,20 @@
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.useDeprecatedNdk=true

二進制
examples/autoHeightWebViewExplorer/android/gradle/wrapper/gradle-wrapper.jar 查看文件


+ 5
- 0
examples/autoHeightWebViewExplorer/android/gradle/wrapper/gradle-wrapper.properties 查看文件

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

+ 164
- 0
examples/autoHeightWebViewExplorer/android/gradlew 查看文件

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

+ 90
- 0
examples/autoHeightWebViewExplorer/android/gradlew.bat 查看文件

@@ -0,0 +1,90 @@
1
+@if "%DEBUG%" == "" @echo off
2
+@rem ##########################################################################
3
+@rem
4
+@rem  Gradle startup script for Windows
5
+@rem
6
+@rem ##########################################################################
7
+
8
+@rem Set local scope for the variables with windows NT shell
9
+if "%OS%"=="Windows_NT" setlocal
10
+
11
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12
+set DEFAULT_JVM_OPTS=
13
+
14
+set DIRNAME=%~dp0
15
+if "%DIRNAME%" == "" set DIRNAME=.
16
+set APP_BASE_NAME=%~n0
17
+set APP_HOME=%DIRNAME%
18
+
19
+@rem Find java.exe
20
+if defined JAVA_HOME goto findJavaFromJavaHome
21
+
22
+set JAVA_EXE=java.exe
23
+%JAVA_EXE% -version >NUL 2>&1
24
+if "%ERRORLEVEL%" == "0" goto init
25
+
26
+echo.
27
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28
+echo.
29
+echo Please set the JAVA_HOME variable in your environment to match the
30
+echo location of your Java installation.
31
+
32
+goto fail
33
+
34
+:findJavaFromJavaHome
35
+set JAVA_HOME=%JAVA_HOME:"=%
36
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37
+
38
+if exist "%JAVA_EXE%" goto init
39
+
40
+echo.
41
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42
+echo.
43
+echo Please set the JAVA_HOME variable in your environment to match the
44
+echo location of your Java installation.
45
+
46
+goto fail
47
+
48
+:init
49
+@rem Get command-line arguments, handling Windowz variants
50
+
51
+if not "%OS%" == "Windows_NT" goto win9xME_args
52
+if "%@eval[2+2]" == "4" goto 4NT_args
53
+
54
+:win9xME_args
55
+@rem Slurp the command line arguments.
56
+set CMD_LINE_ARGS=
57
+set _SKIP=2
58
+
59
+:win9xME_args_slurp
60
+if "x%~1" == "x" goto execute
61
+
62
+set CMD_LINE_ARGS=%*
63
+goto execute
64
+
65
+:4NT_args
66
+@rem Get arguments from the 4NT Shell from JP Software
67
+set CMD_LINE_ARGS=%$
68
+
69
+:execute
70
+@rem Setup the command line
71
+
72
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73
+
74
+@rem Execute Gradle
75
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76
+
77
+:end
78
+@rem End local scope for the variables with windows NT shell
79
+if "%ERRORLEVEL%"=="0" goto mainEnd
80
+
81
+:fail
82
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83
+rem the _cmd.exe /c_ return code!
84
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85
+exit /b 1
86
+
87
+:mainEnd
88
+if "%OS%"=="Windows_NT" endlocal
89
+
90
+:omega

+ 8
- 0
examples/autoHeightWebViewExplorer/android/keystores/BUCK 查看文件

@@ -0,0 +1,8 @@
1
+keystore(
2
+  name = 'debug',
3
+  store = 'debug.keystore',
4
+  properties = 'debug.keystore.properties',
5
+  visibility = [
6
+    'PUBLIC',
7
+  ],
8
+)

+ 4
- 0
examples/autoHeightWebViewExplorer/android/keystores/debug.keystore.properties 查看文件

@@ -0,0 +1,4 @@
1
+key.store=debug.keystore
2
+key.alias=androiddebugkey
3
+key.store.password=android
4
+key.alias.password=android

+ 5
- 0
examples/autoHeightWebViewExplorer/android/settings.gradle 查看文件

@@ -0,0 +1,5 @@
1
+rootProject.name = 'autoHeightWebViewExplorer'
2
+include ':react-native-autoheightwebview'
3
+project(':react-native-autoheightwebview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-autoheightwebview/android')
4
+
5
+include ':app'

+ 85
- 0
examples/autoHeightWebViewExplorer/explorer.js 查看文件

@@ -0,0 +1,85 @@
1
+'use strict'
2
+
3
+import React, {
4
+    Component,
5
+    PropTypes
6
+} from 'react';
7
+
8
+import {
9
+    Platform,
10
+    ScrollView,
11
+    StyleSheet,
12
+    Text,
13
+    TouchableOpacity,
14
+    View,
15
+    WebView
16
+} from 'react-native';
17
+
18
+import AutoHeightWebView from 'react-native-autoheightwebview';
19
+
20
+export default class Explorer extends Component {
21
+    constructor(props) {
22
+        super(props);
23
+        this.html0 = `<p style="font-weight: 400;font-style: normal;font-size: 21px;line-height: 1.58;letter-spacing: -.003em;">Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span style="background-color: transparent !important;background-image: linear-gradient(to bottom, rgba(146, 249, 190, 1), rgba(146, 249, 190, 1));">If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
24
+        this.html1 = `<p>Tags are great for describing the essence of your story in a single word or phrase, but stories are rarely about a single thing. <span>If I pen a story about moving across the country to start a new job in a car with my husband, two cats, a dog, and a tarantula, I wouldn’t only tag the piece with “moving”. I’d also use the tags “pets”, “marriage”, “career change”, and “travel tips”.</span></p>`;
25
+        this.script0 = '';
26
+        this.script1 = `document.body.style.background = 'lightyellow';`;
27
+        this.changeHtml = this.changeHtml.bind(this);
28
+        this.changeScript = this.changeScript.bind(this);
29
+        this.state = {
30
+            html: this.html0,
31
+            script: this.script0
32
+        };
33
+    }
34
+
35
+    changeHtml() {
36
+        this.setState(prevState => ({
37
+            html: prevState.html === this.html0 ? this.html1 : this.html0
38
+        }));
39
+    }
40
+
41
+    changeScript() {
42
+        this.changeHtml();
43
+        this.setState(prevState => ({
44
+            script: prevState.script === this.script0 ? this.script1 : this.script0
45
+        }));
46
+    }
47
+
48
+    render() {
49
+        return (
50
+            <ScrollView
51
+                style={{
52
+                    backgroundColor: 'lightyellow'
53
+                }}
54
+                contentContainerStyle={{
55
+                    justifyContent: 'center',
56
+                    alignItems: 'center'
57
+                }}>
58
+                {
59
+                    <AutoHeightWebView
60
+                        html={this.state.html}
61
+                        customScript={this.state.script} />
62
+                }
63
+                <TouchableOpacity
64
+                    onPress={this.changeHtml}
65
+                    style={Styles.button}>
66
+                    <Text>change html</Text>
67
+                </TouchableOpacity>
68
+                <TouchableOpacity
69
+                    onPress={this.changeScript}
70
+                    style={Styles.button}>
71
+                    <Text>change script (have to change html to reload)</Text>
72
+                </TouchableOpacity>
73
+            </ScrollView>
74
+        );
75
+    }
76
+}
77
+
78
+const Styles = StyleSheet.create({
79
+    button: {
80
+        marginTop: 15,
81
+        backgroundColor: 'aliceblue',
82
+        borderRadius: 5,
83
+        padding: 5
84
+    }
85
+});

+ 9
- 0
examples/autoHeightWebViewExplorer/index.android.js 查看文件

@@ -0,0 +1,9 @@
1
+'use strict'
2
+
3
+import React from 'react';
4
+
5
+import { AppRegistry } from 'react-native';
6
+
7
+import Explorer from './explorer'
8
+
9
+AppRegistry.registerComponent('autoHeightWebViewExplorer', () => Explorer);

+ 9
- 0
examples/autoHeightWebViewExplorer/index.ios.js 查看文件

@@ -0,0 +1,9 @@
1
+'use strict'
2
+
3
+import React from 'react';
4
+
5
+import { AppRegistry } from 'react-native';
6
+
7
+import Explorer from './explorer'
8
+
9
+AppRegistry.registerComponent('autoHeightWebViewExplorer', () => Explorer);

+ 988
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer.xcodeproj/project.pbxproj 查看文件

@@ -0,0 +1,988 @@
1
+// !$*UTF8*$!
2
+{
3
+	archiveVersion = 1;
4
+	classes = {
5
+	};
6
+	objectVersion = 46;
7
+	objects = {
8
+
9
+/* Begin PBXBuildFile section */
10
+		00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; };
11
+		00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; };
12
+		00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; };
13
+		00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; };
14
+		00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; };
15
+		00E356F31AD99517003FC87E /* autoHeightWebViewExplorerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* autoHeightWebViewExplorerTests.m */; };
16
+		133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; };
17
+		139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; };
18
+		139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
19
+		13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
20
+		13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
21
+		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
22
+		13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
23
+		140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
24
+		146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
25
+		5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
26
+		832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
27
+/* End PBXBuildFile section */
28
+
29
+/* Begin PBXContainerItemProxy section */
30
+		00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = {
31
+			isa = PBXContainerItemProxy;
32
+			containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
33
+			proxyType = 2;
34
+			remoteGlobalIDString = 134814201AA4EA6300B7C361;
35
+			remoteInfo = RCTActionSheet;
36
+		};
37
+		00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = {
38
+			isa = PBXContainerItemProxy;
39
+			containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
40
+			proxyType = 2;
41
+			remoteGlobalIDString = 134814201AA4EA6300B7C361;
42
+			remoteInfo = RCTGeolocation;
43
+		};
44
+		00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = {
45
+			isa = PBXContainerItemProxy;
46
+			containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
47
+			proxyType = 2;
48
+			remoteGlobalIDString = 58B5115D1A9E6B3D00147676;
49
+			remoteInfo = RCTImage;
50
+		};
51
+		00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = {
52
+			isa = PBXContainerItemProxy;
53
+			containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
54
+			proxyType = 2;
55
+			remoteGlobalIDString = 58B511DB1A9E6C8500147676;
56
+			remoteInfo = RCTNetwork;
57
+		};
58
+		00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = {
59
+			isa = PBXContainerItemProxy;
60
+			containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
61
+			proxyType = 2;
62
+			remoteGlobalIDString = 832C81801AAF6DEF007FA2F7;
63
+			remoteInfo = RCTVibration;
64
+		};
65
+		00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
66
+			isa = PBXContainerItemProxy;
67
+			containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
68
+			proxyType = 1;
69
+			remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
70
+			remoteInfo = autoHeightWebViewExplorer;
71
+		};
72
+		139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = {
73
+			isa = PBXContainerItemProxy;
74
+			containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
75
+			proxyType = 2;
76
+			remoteGlobalIDString = 134814201AA4EA6300B7C361;
77
+			remoteInfo = RCTSettings;
78
+		};
79
+		139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = {
80
+			isa = PBXContainerItemProxy;
81
+			containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
82
+			proxyType = 2;
83
+			remoteGlobalIDString = 3C86DF461ADF2C930047B81A;
84
+			remoteInfo = RCTWebSocket;
85
+		};
86
+		146834031AC3E56700842450 /* PBXContainerItemProxy */ = {
87
+			isa = PBXContainerItemProxy;
88
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
89
+			proxyType = 2;
90
+			remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192;
91
+			remoteInfo = React;
92
+		};
93
+		3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */ = {
94
+			isa = PBXContainerItemProxy;
95
+			containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
96
+			proxyType = 2;
97
+			remoteGlobalIDString = 2D2A283A1D9B042B00D4039D;
98
+			remoteInfo = "RCTImage-tvOS";
99
+		};
100
+		3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */ = {
101
+			isa = PBXContainerItemProxy;
102
+			containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
103
+			proxyType = 2;
104
+			remoteGlobalIDString = 2D2A28471D9B043800D4039D;
105
+			remoteInfo = "RCTLinking-tvOS";
106
+		};
107
+		3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
108
+			isa = PBXContainerItemProxy;
109
+			containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
110
+			proxyType = 2;
111
+			remoteGlobalIDString = 2D2A28541D9B044C00D4039D;
112
+			remoteInfo = "RCTNetwork-tvOS";
113
+		};
114
+		3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
115
+			isa = PBXContainerItemProxy;
116
+			containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
117
+			proxyType = 2;
118
+			remoteGlobalIDString = 2D2A28611D9B046600D4039D;
119
+			remoteInfo = "RCTSettings-tvOS";
120
+		};
121
+		3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */ = {
122
+			isa = PBXContainerItemProxy;
123
+			containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
124
+			proxyType = 2;
125
+			remoteGlobalIDString = 2D2A287B1D9B048500D4039D;
126
+			remoteInfo = "RCTText-tvOS";
127
+		};
128
+		3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */ = {
129
+			isa = PBXContainerItemProxy;
130
+			containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
131
+			proxyType = 2;
132
+			remoteGlobalIDString = 2D2A28881D9B049200D4039D;
133
+			remoteInfo = "RCTWebSocket-tvOS";
134
+		};
135
+		3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */ = {
136
+			isa = PBXContainerItemProxy;
137
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
138
+			proxyType = 2;
139
+			remoteGlobalIDString = 2D2A28131D9B038B00D4039D;
140
+			remoteInfo = "React-tvOS";
141
+		};
142
+		3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */ = {
143
+			isa = PBXContainerItemProxy;
144
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
145
+			proxyType = 2;
146
+			remoteGlobalIDString = 3D3C059A1DE3340900C268FA;
147
+			remoteInfo = yoga;
148
+		};
149
+		3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */ = {
150
+			isa = PBXContainerItemProxy;
151
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
152
+			proxyType = 2;
153
+			remoteGlobalIDString = 3D3C06751DE3340C00C268FA;
154
+			remoteInfo = "yoga-tvOS";
155
+		};
156
+		3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */ = {
157
+			isa = PBXContainerItemProxy;
158
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
159
+			proxyType = 2;
160
+			remoteGlobalIDString = 3D3CD9251DE5FBEC00167DC4;
161
+			remoteInfo = cxxreact;
162
+		};
163
+		3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
164
+			isa = PBXContainerItemProxy;
165
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
166
+			proxyType = 2;
167
+			remoteGlobalIDString = 3D3CD9321DE5FBEE00167DC4;
168
+			remoteInfo = "cxxreact-tvOS";
169
+		};
170
+		3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
171
+			isa = PBXContainerItemProxy;
172
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
173
+			proxyType = 2;
174
+			remoteGlobalIDString = 3D3CD90B1DE5FBD600167DC4;
175
+			remoteInfo = jschelpers;
176
+		};
177
+		3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */ = {
178
+			isa = PBXContainerItemProxy;
179
+			containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */;
180
+			proxyType = 2;
181
+			remoteGlobalIDString = 3D3CD9181DE5FBD800167DC4;
182
+			remoteInfo = "jschelpers-tvOS";
183
+		};
184
+		5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
185
+			isa = PBXContainerItemProxy;
186
+			containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
187
+			proxyType = 2;
188
+			remoteGlobalIDString = 134814201AA4EA6300B7C361;
189
+			remoteInfo = RCTAnimation;
190
+		};
191
+		5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */ = {
192
+			isa = PBXContainerItemProxy;
193
+			containerPortal = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
194
+			proxyType = 2;
195
+			remoteGlobalIDString = 2D2A28201D9B03D100D4039D;
196
+			remoteInfo = "RCTAnimation-tvOS";
197
+		};
198
+		78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = {
199
+			isa = PBXContainerItemProxy;
200
+			containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
201
+			proxyType = 2;
202
+			remoteGlobalIDString = 134814201AA4EA6300B7C361;
203
+			remoteInfo = RCTLinking;
204
+		};
205
+		832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = {
206
+			isa = PBXContainerItemProxy;
207
+			containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
208
+			proxyType = 2;
209
+			remoteGlobalIDString = 58B5119B1A9E6C1200147676;
210
+			remoteInfo = RCTText;
211
+		};
212
+/* End PBXContainerItemProxy section */
213
+
214
+/* Begin PBXFileReference section */
215
+		008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
216
+		00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = "<group>"; };
217
+		00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = "<group>"; };
218
+		00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = "<group>"; };
219
+		00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = "<group>"; };
220
+		00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = "<group>"; };
221
+		00E356EE1AD99517003FC87E /* autoHeightWebViewExplorerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = autoHeightWebViewExplorerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
222
+		00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
223
+		00E356F21AD99517003FC87E /* autoHeightWebViewExplorerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = autoHeightWebViewExplorerTests.m; sourceTree = "<group>"; };
224
+		139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = "<group>"; };
225
+		139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = "<group>"; };
226
+		13B07F961A680F5B00A75B9A /* autoHeightWebViewExplorer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = autoHeightWebViewExplorer.app; sourceTree = BUILT_PRODUCTS_DIR; };
227
+		13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = autoHeightWebViewExplorer/AppDelegate.h; sourceTree = "<group>"; };
228
+		13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = autoHeightWebViewExplorer/AppDelegate.m; sourceTree = "<group>"; };
229
+		13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
230
+		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = autoHeightWebViewExplorer/Images.xcassets; sourceTree = "<group>"; };
231
+		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = autoHeightWebViewExplorer/Info.plist; sourceTree = "<group>"; };
232
+		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = autoHeightWebViewExplorer/main.m; sourceTree = "<group>"; };
233
+		146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
234
+		5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAnimation.xcodeproj; path = "../node_modules/react-native/Libraries/NativeAnimation/RCTAnimation.xcodeproj"; sourceTree = "<group>"; };
235
+		78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = "<group>"; };
236
+		832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = "<group>"; };
237
+/* End PBXFileReference section */
238
+
239
+/* Begin PBXFrameworksBuildPhase section */
240
+		00E356EB1AD99517003FC87E /* Frameworks */ = {
241
+			isa = PBXFrameworksBuildPhase;
242
+			buildActionMask = 2147483647;
243
+			files = (
244
+				140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */,
245
+			);
246
+			runOnlyForDeploymentPostprocessing = 0;
247
+		};
248
+		13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
249
+			isa = PBXFrameworksBuildPhase;
250
+			buildActionMask = 2147483647;
251
+			files = (
252
+				5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */,
253
+				146834051AC3E58100842450 /* libReact.a in Frameworks */,
254
+				00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */,
255
+				00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */,
256
+				00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */,
257
+				133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */,
258
+				00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */,
259
+				139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */,
260
+				832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */,
261
+				00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
262
+				139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
263
+			);
264
+			runOnlyForDeploymentPostprocessing = 0;
265
+		};
266
+/* End PBXFrameworksBuildPhase section */
267
+
268
+/* Begin PBXGroup section */
269
+		00C302A81ABCB8CE00DB3ED1 /* Products */ = {
270
+			isa = PBXGroup;
271
+			children = (
272
+				00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */,
273
+			);
274
+			name = Products;
275
+			sourceTree = "<group>";
276
+		};
277
+		00C302B61ABCB90400DB3ED1 /* Products */ = {
278
+			isa = PBXGroup;
279
+			children = (
280
+				00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */,
281
+			);
282
+			name = Products;
283
+			sourceTree = "<group>";
284
+		};
285
+		00C302BC1ABCB91800DB3ED1 /* Products */ = {
286
+			isa = PBXGroup;
287
+			children = (
288
+				00C302C01ABCB91800DB3ED1 /* libRCTImage.a */,
289
+				3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */,
290
+			);
291
+			name = Products;
292
+			sourceTree = "<group>";
293
+		};
294
+		00C302D41ABCB9D200DB3ED1 /* Products */ = {
295
+			isa = PBXGroup;
296
+			children = (
297
+				00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */,
298
+				3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */,
299
+			);
300
+			name = Products;
301
+			sourceTree = "<group>";
302
+		};
303
+		00C302E01ABCB9EE00DB3ED1 /* Products */ = {
304
+			isa = PBXGroup;
305
+			children = (
306
+				00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */,
307
+			);
308
+			name = Products;
309
+			sourceTree = "<group>";
310
+		};
311
+		00E356EF1AD99517003FC87E /* autoHeightWebViewExplorerTests */ = {
312
+			isa = PBXGroup;
313
+			children = (
314
+				00E356F21AD99517003FC87E /* autoHeightWebViewExplorerTests.m */,
315
+				00E356F01AD99517003FC87E /* Supporting Files */,
316
+			);
317
+			path = autoHeightWebViewExplorerTests;
318
+			sourceTree = "<group>";
319
+		};
320
+		00E356F01AD99517003FC87E /* Supporting Files */ = {
321
+			isa = PBXGroup;
322
+			children = (
323
+				00E356F11AD99517003FC87E /* Info.plist */,
324
+			);
325
+			name = "Supporting Files";
326
+			sourceTree = "<group>";
327
+		};
328
+		139105B71AF99BAD00B5F7CC /* Products */ = {
329
+			isa = PBXGroup;
330
+			children = (
331
+				139105C11AF99BAD00B5F7CC /* libRCTSettings.a */,
332
+				3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */,
333
+			);
334
+			name = Products;
335
+			sourceTree = "<group>";
336
+		};
337
+		139FDEE71B06529A00C62182 /* Products */ = {
338
+			isa = PBXGroup;
339
+			children = (
340
+				139FDEF41B06529B00C62182 /* libRCTWebSocket.a */,
341
+				3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */,
342
+			);
343
+			name = Products;
344
+			sourceTree = "<group>";
345
+		};
346
+		13B07FAE1A68108700A75B9A /* autoHeightWebViewExplorer */ = {
347
+			isa = PBXGroup;
348
+			children = (
349
+				008F07F21AC5B25A0029DE68 /* main.jsbundle */,
350
+				13B07FAF1A68108700A75B9A /* AppDelegate.h */,
351
+				13B07FB01A68108700A75B9A /* AppDelegate.m */,
352
+				13B07FB51A68108700A75B9A /* Images.xcassets */,
353
+				13B07FB61A68108700A75B9A /* Info.plist */,
354
+				13B07FB11A68108700A75B9A /* LaunchScreen.xib */,
355
+				13B07FB71A68108700A75B9A /* main.m */,
356
+			);
357
+			name = autoHeightWebViewExplorer;
358
+			sourceTree = "<group>";
359
+		};
360
+		146834001AC3E56700842450 /* Products */ = {
361
+			isa = PBXGroup;
362
+			children = (
363
+				146834041AC3E56700842450 /* libReact.a */,
364
+				3DAD3EA31DF850E9000B6D8A /* libReact.a */,
365
+				3DAD3EA51DF850E9000B6D8A /* libyoga.a */,
366
+				3DAD3EA71DF850E9000B6D8A /* libyoga.a */,
367
+				3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */,
368
+				3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */,
369
+				3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */,
370
+				3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */,
371
+			);
372
+			name = Products;
373
+			sourceTree = "<group>";
374
+		};
375
+		5E91572E1DD0AC6500FF2AA8 /* Products */ = {
376
+			isa = PBXGroup;
377
+			children = (
378
+				5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */,
379
+				5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */,
380
+			);
381
+			name = Products;
382
+			sourceTree = "<group>";
383
+		};
384
+		78C398B11ACF4ADC00677621 /* Products */ = {
385
+			isa = PBXGroup;
386
+			children = (
387
+				78C398B91ACF4ADC00677621 /* libRCTLinking.a */,
388
+				3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */,
389
+			);
390
+			name = Products;
391
+			sourceTree = "<group>";
392
+		};
393
+		832341AE1AAA6A7D00B99B32 /* Libraries */ = {
394
+			isa = PBXGroup;
395
+			children = (
396
+				5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */,
397
+				146833FF1AC3E56700842450 /* React.xcodeproj */,
398
+				00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */,
399
+				00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */,
400
+				00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */,
401
+				78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */,
402
+				00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */,
403
+				139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */,
404
+				832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */,
405
+				00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
406
+				139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
407
+			);
408
+			name = Libraries;
409
+			sourceTree = "<group>";
410
+		};
411
+		832341B11AAA6A8300B99B32 /* Products */ = {
412
+			isa = PBXGroup;
413
+			children = (
414
+				832341B51AAA6A8300B99B32 /* libRCTText.a */,
415
+				3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */,
416
+			);
417
+			name = Products;
418
+			sourceTree = "<group>";
419
+		};
420
+		83CBB9F61A601CBA00E9B192 = {
421
+			isa = PBXGroup;
422
+			children = (
423
+				13B07FAE1A68108700A75B9A /* autoHeightWebViewExplorer */,
424
+				832341AE1AAA6A7D00B99B32 /* Libraries */,
425
+				00E356EF1AD99517003FC87E /* autoHeightWebViewExplorerTests */,
426
+				83CBBA001A601CBA00E9B192 /* Products */,
427
+			);
428
+			indentWidth = 2;
429
+			sourceTree = "<group>";
430
+			tabWidth = 2;
431
+		};
432
+		83CBBA001A601CBA00E9B192 /* Products */ = {
433
+			isa = PBXGroup;
434
+			children = (
435
+				13B07F961A680F5B00A75B9A /* autoHeightWebViewExplorer.app */,
436
+				00E356EE1AD99517003FC87E /* autoHeightWebViewExplorerTests.xctest */,
437
+			);
438
+			name = Products;
439
+			sourceTree = "<group>";
440
+		};
441
+/* End PBXGroup section */
442
+
443
+/* Begin PBXNativeTarget section */
444
+		00E356ED1AD99517003FC87E /* autoHeightWebViewExplorerTests */ = {
445
+			isa = PBXNativeTarget;
446
+			buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "autoHeightWebViewExplorerTests" */;
447
+			buildPhases = (
448
+				00E356EA1AD99517003FC87E /* Sources */,
449
+				00E356EB1AD99517003FC87E /* Frameworks */,
450
+				00E356EC1AD99517003FC87E /* Resources */,
451
+			);
452
+			buildRules = (
453
+			);
454
+			dependencies = (
455
+				00E356F51AD99517003FC87E /* PBXTargetDependency */,
456
+			);
457
+			name = autoHeightWebViewExplorerTests;
458
+			productName = autoHeightWebViewExplorerTests;
459
+			productReference = 00E356EE1AD99517003FC87E /* autoHeightWebViewExplorerTests.xctest */;
460
+			productType = "com.apple.product-type.bundle.unit-test";
461
+		};
462
+		13B07F861A680F5B00A75B9A /* autoHeightWebViewExplorer */ = {
463
+			isa = PBXNativeTarget;
464
+			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "autoHeightWebViewExplorer" */;
465
+			buildPhases = (
466
+				13B07F871A680F5B00A75B9A /* Sources */,
467
+				13B07F8C1A680F5B00A75B9A /* Frameworks */,
468
+				13B07F8E1A680F5B00A75B9A /* Resources */,
469
+				00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
470
+			);
471
+			buildRules = (
472
+			);
473
+			dependencies = (
474
+			);
475
+			name = autoHeightWebViewExplorer;
476
+			productName = "Hello World";
477
+			productReference = 13B07F961A680F5B00A75B9A /* autoHeightWebViewExplorer.app */;
478
+			productType = "com.apple.product-type.application";
479
+		};
480
+/* End PBXNativeTarget section */
481
+
482
+/* Begin PBXProject section */
483
+		83CBB9F71A601CBA00E9B192 /* Project object */ = {
484
+			isa = PBXProject;
485
+			attributes = {
486
+				LastUpgradeCheck = 0610;
487
+				ORGANIZATIONNAME = Facebook;
488
+				TargetAttributes = {
489
+					00E356ED1AD99517003FC87E = {
490
+						CreatedOnToolsVersion = 6.2;
491
+						TestTargetID = 13B07F861A680F5B00A75B9A;
492
+					};
493
+				};
494
+			};
495
+			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "autoHeightWebViewExplorer" */;
496
+			compatibilityVersion = "Xcode 3.2";
497
+			developmentRegion = English;
498
+			hasScannedForEncodings = 0;
499
+			knownRegions = (
500
+				en,
501
+				Base,
502
+			);
503
+			mainGroup = 83CBB9F61A601CBA00E9B192;
504
+			productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
505
+			projectDirPath = "";
506
+			projectReferences = (
507
+				{
508
+					ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */;
509
+					ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */;
510
+				},
511
+				{
512
+					ProductGroup = 5E91572E1DD0AC6500FF2AA8 /* Products */;
513
+					ProjectRef = 5E91572D1DD0AC6500FF2AA8 /* RCTAnimation.xcodeproj */;
514
+				},
515
+				{
516
+					ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */;
517
+					ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */;
518
+				},
519
+				{
520
+					ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */;
521
+					ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */;
522
+				},
523
+				{
524
+					ProductGroup = 78C398B11ACF4ADC00677621 /* Products */;
525
+					ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */;
526
+				},
527
+				{
528
+					ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */;
529
+					ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */;
530
+				},
531
+				{
532
+					ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */;
533
+					ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */;
534
+				},
535
+				{
536
+					ProductGroup = 832341B11AAA6A8300B99B32 /* Products */;
537
+					ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */;
538
+				},
539
+				{
540
+					ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */;
541
+					ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */;
542
+				},
543
+				{
544
+					ProductGroup = 139FDEE71B06529A00C62182 /* Products */;
545
+					ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */;
546
+				},
547
+				{
548
+					ProductGroup = 146834001AC3E56700842450 /* Products */;
549
+					ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
550
+				},
551
+			);
552
+			projectRoot = "";
553
+			targets = (
554
+				13B07F861A680F5B00A75B9A /* autoHeightWebViewExplorer */,
555
+				00E356ED1AD99517003FC87E /* autoHeightWebViewExplorerTests */,
556
+			);
557
+		};
558
+/* End PBXProject section */
559
+
560
+/* Begin PBXReferenceProxy section */
561
+		00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = {
562
+			isa = PBXReferenceProxy;
563
+			fileType = archive.ar;
564
+			path = libRCTActionSheet.a;
565
+			remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */;
566
+			sourceTree = BUILT_PRODUCTS_DIR;
567
+		};
568
+		00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = {
569
+			isa = PBXReferenceProxy;
570
+			fileType = archive.ar;
571
+			path = libRCTGeolocation.a;
572
+			remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */;
573
+			sourceTree = BUILT_PRODUCTS_DIR;
574
+		};
575
+		00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = {
576
+			isa = PBXReferenceProxy;
577
+			fileType = archive.ar;
578
+			path = libRCTImage.a;
579
+			remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */;
580
+			sourceTree = BUILT_PRODUCTS_DIR;
581
+		};
582
+		00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = {
583
+			isa = PBXReferenceProxy;
584
+			fileType = archive.ar;
585
+			path = libRCTNetwork.a;
586
+			remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */;
587
+			sourceTree = BUILT_PRODUCTS_DIR;
588
+		};
589
+		00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = {
590
+			isa = PBXReferenceProxy;
591
+			fileType = archive.ar;
592
+			path = libRCTVibration.a;
593
+			remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */;
594
+			sourceTree = BUILT_PRODUCTS_DIR;
595
+		};
596
+		139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = {
597
+			isa = PBXReferenceProxy;
598
+			fileType = archive.ar;
599
+			path = libRCTSettings.a;
600
+			remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */;
601
+			sourceTree = BUILT_PRODUCTS_DIR;
602
+		};
603
+		139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = {
604
+			isa = PBXReferenceProxy;
605
+			fileType = archive.ar;
606
+			path = libRCTWebSocket.a;
607
+			remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */;
608
+			sourceTree = BUILT_PRODUCTS_DIR;
609
+		};
610
+		146834041AC3E56700842450 /* libReact.a */ = {
611
+			isa = PBXReferenceProxy;
612
+			fileType = archive.ar;
613
+			path = libReact.a;
614
+			remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */;
615
+			sourceTree = BUILT_PRODUCTS_DIR;
616
+		};
617
+		3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */ = {
618
+			isa = PBXReferenceProxy;
619
+			fileType = archive.ar;
620
+			path = "libRCTImage-tvOS.a";
621
+			remoteRef = 3DAD3E831DF850E9000B6D8A /* PBXContainerItemProxy */;
622
+			sourceTree = BUILT_PRODUCTS_DIR;
623
+		};
624
+		3DAD3E881DF850E9000B6D8A /* libRCTLinking-tvOS.a */ = {
625
+			isa = PBXReferenceProxy;
626
+			fileType = archive.ar;
627
+			path = "libRCTLinking-tvOS.a";
628
+			remoteRef = 3DAD3E871DF850E9000B6D8A /* PBXContainerItemProxy */;
629
+			sourceTree = BUILT_PRODUCTS_DIR;
630
+		};
631
+		3DAD3E8C1DF850E9000B6D8A /* libRCTNetwork-tvOS.a */ = {
632
+			isa = PBXReferenceProxy;
633
+			fileType = archive.ar;
634
+			path = "libRCTNetwork-tvOS.a";
635
+			remoteRef = 3DAD3E8B1DF850E9000B6D8A /* PBXContainerItemProxy */;
636
+			sourceTree = BUILT_PRODUCTS_DIR;
637
+		};
638
+		3DAD3E901DF850E9000B6D8A /* libRCTSettings-tvOS.a */ = {
639
+			isa = PBXReferenceProxy;
640
+			fileType = archive.ar;
641
+			path = "libRCTSettings-tvOS.a";
642
+			remoteRef = 3DAD3E8F1DF850E9000B6D8A /* PBXContainerItemProxy */;
643
+			sourceTree = BUILT_PRODUCTS_DIR;
644
+		};
645
+		3DAD3E941DF850E9000B6D8A /* libRCTText-tvOS.a */ = {
646
+			isa = PBXReferenceProxy;
647
+			fileType = archive.ar;
648
+			path = "libRCTText-tvOS.a";
649
+			remoteRef = 3DAD3E931DF850E9000B6D8A /* PBXContainerItemProxy */;
650
+			sourceTree = BUILT_PRODUCTS_DIR;
651
+		};
652
+		3DAD3E991DF850E9000B6D8A /* libRCTWebSocket-tvOS.a */ = {
653
+			isa = PBXReferenceProxy;
654
+			fileType = archive.ar;
655
+			path = "libRCTWebSocket-tvOS.a";
656
+			remoteRef = 3DAD3E981DF850E9000B6D8A /* PBXContainerItemProxy */;
657
+			sourceTree = BUILT_PRODUCTS_DIR;
658
+		};
659
+		3DAD3EA31DF850E9000B6D8A /* libReact.a */ = {
660
+			isa = PBXReferenceProxy;
661
+			fileType = archive.ar;
662
+			path = libReact.a;
663
+			remoteRef = 3DAD3EA21DF850E9000B6D8A /* PBXContainerItemProxy */;
664
+			sourceTree = BUILT_PRODUCTS_DIR;
665
+		};
666
+		3DAD3EA51DF850E9000B6D8A /* libyoga.a */ = {
667
+			isa = PBXReferenceProxy;
668
+			fileType = archive.ar;
669
+			path = libyoga.a;
670
+			remoteRef = 3DAD3EA41DF850E9000B6D8A /* PBXContainerItemProxy */;
671
+			sourceTree = BUILT_PRODUCTS_DIR;
672
+		};
673
+		3DAD3EA71DF850E9000B6D8A /* libyoga.a */ = {
674
+			isa = PBXReferenceProxy;
675
+			fileType = archive.ar;
676
+			path = libyoga.a;
677
+			remoteRef = 3DAD3EA61DF850E9000B6D8A /* PBXContainerItemProxy */;
678
+			sourceTree = BUILT_PRODUCTS_DIR;
679
+		};
680
+		3DAD3EA91DF850E9000B6D8A /* libcxxreact.a */ = {
681
+			isa = PBXReferenceProxy;
682
+			fileType = archive.ar;
683
+			path = libcxxreact.a;
684
+			remoteRef = 3DAD3EA81DF850E9000B6D8A /* PBXContainerItemProxy */;
685
+			sourceTree = BUILT_PRODUCTS_DIR;
686
+		};
687
+		3DAD3EAB1DF850E9000B6D8A /* libcxxreact.a */ = {
688
+			isa = PBXReferenceProxy;
689
+			fileType = archive.ar;
690
+			path = libcxxreact.a;
691
+			remoteRef = 3DAD3EAA1DF850E9000B6D8A /* PBXContainerItemProxy */;
692
+			sourceTree = BUILT_PRODUCTS_DIR;
693
+		};
694
+		3DAD3EAD1DF850E9000B6D8A /* libjschelpers.a */ = {
695
+			isa = PBXReferenceProxy;
696
+			fileType = archive.ar;
697
+			path = libjschelpers.a;
698
+			remoteRef = 3DAD3EAC1DF850E9000B6D8A /* PBXContainerItemProxy */;
699
+			sourceTree = BUILT_PRODUCTS_DIR;
700
+		};
701
+		3DAD3EAF1DF850E9000B6D8A /* libjschelpers.a */ = {
702
+			isa = PBXReferenceProxy;
703
+			fileType = archive.ar;
704
+			path = libjschelpers.a;
705
+			remoteRef = 3DAD3EAE1DF850E9000B6D8A /* PBXContainerItemProxy */;
706
+			sourceTree = BUILT_PRODUCTS_DIR;
707
+		};
708
+		5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */ = {
709
+			isa = PBXReferenceProxy;
710
+			fileType = archive.ar;
711
+			path = libRCTAnimation.a;
712
+			remoteRef = 5E9157321DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
713
+			sourceTree = BUILT_PRODUCTS_DIR;
714
+		};
715
+		5E9157351DD0AC6500FF2AA8 /* libRCTAnimation-tvOS.a */ = {
716
+			isa = PBXReferenceProxy;
717
+			fileType = archive.ar;
718
+			path = "libRCTAnimation-tvOS.a";
719
+			remoteRef = 5E9157341DD0AC6500FF2AA8 /* PBXContainerItemProxy */;
720
+			sourceTree = BUILT_PRODUCTS_DIR;
721
+		};
722
+		78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = {
723
+			isa = PBXReferenceProxy;
724
+			fileType = archive.ar;
725
+			path = libRCTLinking.a;
726
+			remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */;
727
+			sourceTree = BUILT_PRODUCTS_DIR;
728
+		};
729
+		832341B51AAA6A8300B99B32 /* libRCTText.a */ = {
730
+			isa = PBXReferenceProxy;
731
+			fileType = archive.ar;
732
+			path = libRCTText.a;
733
+			remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */;
734
+			sourceTree = BUILT_PRODUCTS_DIR;
735
+		};
736
+/* End PBXReferenceProxy section */
737
+
738
+/* Begin PBXResourcesBuildPhase section */
739
+		00E356EC1AD99517003FC87E /* Resources */ = {
740
+			isa = PBXResourcesBuildPhase;
741
+			buildActionMask = 2147483647;
742
+			files = (
743
+			);
744
+			runOnlyForDeploymentPostprocessing = 0;
745
+		};
746
+		13B07F8E1A680F5B00A75B9A /* Resources */ = {
747
+			isa = PBXResourcesBuildPhase;
748
+			buildActionMask = 2147483647;
749
+			files = (
750
+				13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
751
+				13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
752
+			);
753
+			runOnlyForDeploymentPostprocessing = 0;
754
+		};
755
+/* End PBXResourcesBuildPhase section */
756
+
757
+/* Begin PBXShellScriptBuildPhase section */
758
+		00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
759
+			isa = PBXShellScriptBuildPhase;
760
+			buildActionMask = 2147483647;
761
+			files = (
762
+			);
763
+			inputPaths = (
764
+			);
765
+			name = "Bundle React Native code and images";
766
+			outputPaths = (
767
+			);
768
+			runOnlyForDeploymentPostprocessing = 0;
769
+			shellPath = /bin/sh;
770
+			shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh";
771
+		};
772
+/* End PBXShellScriptBuildPhase section */
773
+
774
+/* Begin PBXSourcesBuildPhase section */
775
+		00E356EA1AD99517003FC87E /* Sources */ = {
776
+			isa = PBXSourcesBuildPhase;
777
+			buildActionMask = 2147483647;
778
+			files = (
779
+				00E356F31AD99517003FC87E /* autoHeightWebViewExplorerTests.m in Sources */,
780
+			);
781
+			runOnlyForDeploymentPostprocessing = 0;
782
+		};
783
+		13B07F871A680F5B00A75B9A /* Sources */ = {
784
+			isa = PBXSourcesBuildPhase;
785
+			buildActionMask = 2147483647;
786
+			files = (
787
+				13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
788
+				13B07FC11A68108700A75B9A /* main.m in Sources */,
789
+			);
790
+			runOnlyForDeploymentPostprocessing = 0;
791
+		};
792
+/* End PBXSourcesBuildPhase section */
793
+
794
+/* Begin PBXTargetDependency section */
795
+		00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
796
+			isa = PBXTargetDependency;
797
+			target = 13B07F861A680F5B00A75B9A /* autoHeightWebViewExplorer */;
798
+			targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
799
+		};
800
+/* End PBXTargetDependency section */
801
+
802
+/* Begin PBXVariantGroup section */
803
+		13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = {
804
+			isa = PBXVariantGroup;
805
+			children = (
806
+				13B07FB21A68108700A75B9A /* Base */,
807
+			);
808
+			name = LaunchScreen.xib;
809
+			path = autoHeightWebViewExplorer;
810
+			sourceTree = "<group>";
811
+		};
812
+/* End PBXVariantGroup section */
813
+
814
+/* Begin XCBuildConfiguration section */
815
+		00E356F61AD99517003FC87E /* Debug */ = {
816
+			isa = XCBuildConfiguration;
817
+			buildSettings = {
818
+				BUNDLE_LOADER = "$(TEST_HOST)";
819
+				GCC_PREPROCESSOR_DEFINITIONS = (
820
+					"DEBUG=1",
821
+					"$(inherited)",
822
+				);
823
+				INFOPLIST_FILE = autoHeightWebViewExplorerTests/Info.plist;
824
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
825
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
826
+				PRODUCT_NAME = "$(TARGET_NAME)";
827
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/autoHeightWebViewExplorer.app/autoHeightWebViewExplorer";
828
+			};
829
+			name = Debug;
830
+		};
831
+		00E356F71AD99517003FC87E /* Release */ = {
832
+			isa = XCBuildConfiguration;
833
+			buildSettings = {
834
+				BUNDLE_LOADER = "$(TEST_HOST)";
835
+				COPY_PHASE_STRIP = NO;
836
+				INFOPLIST_FILE = autoHeightWebViewExplorerTests/Info.plist;
837
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
838
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
839
+				PRODUCT_NAME = "$(TARGET_NAME)";
840
+				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/autoHeightWebViewExplorer.app/autoHeightWebViewExplorer";
841
+			};
842
+			name = Release;
843
+		};
844
+		13B07F941A680F5B00A75B9A /* Debug */ = {
845
+			isa = XCBuildConfiguration;
846
+			buildSettings = {
847
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
848
+				CURRENT_PROJECT_VERSION = 1;
849
+				DEAD_CODE_STRIPPING = NO;
850
+				INFOPLIST_FILE = autoHeightWebViewExplorer/Info.plist;
851
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
852
+				OTHER_LDFLAGS = (
853
+					"$(inherited)",
854
+					"-ObjC",
855
+					"-lc++",
856
+				);
857
+				PRODUCT_NAME = autoHeightWebViewExplorer;
858
+				VERSIONING_SYSTEM = "apple-generic";
859
+			};
860
+			name = Debug;
861
+		};
862
+		13B07F951A680F5B00A75B9A /* Release */ = {
863
+			isa = XCBuildConfiguration;
864
+			buildSettings = {
865
+				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
866
+				CURRENT_PROJECT_VERSION = 1;
867
+				INFOPLIST_FILE = autoHeightWebViewExplorer/Info.plist;
868
+				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
869
+				OTHER_LDFLAGS = (
870
+					"$(inherited)",
871
+					"-ObjC",
872
+					"-lc++",
873
+				);
874
+				PRODUCT_NAME = autoHeightWebViewExplorer;
875
+				VERSIONING_SYSTEM = "apple-generic";
876
+			};
877
+			name = Release;
878
+		};
879
+		83CBBA201A601CBA00E9B192 /* Debug */ = {
880
+			isa = XCBuildConfiguration;
881
+			buildSettings = {
882
+				ALWAYS_SEARCH_USER_PATHS = NO;
883
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
884
+				CLANG_CXX_LIBRARY = "libc++";
885
+				CLANG_ENABLE_MODULES = YES;
886
+				CLANG_ENABLE_OBJC_ARC = YES;
887
+				CLANG_WARN_BOOL_CONVERSION = YES;
888
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
889
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
890
+				CLANG_WARN_EMPTY_BODY = YES;
891
+				CLANG_WARN_ENUM_CONVERSION = YES;
892
+				CLANG_WARN_INT_CONVERSION = YES;
893
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
894
+				CLANG_WARN_UNREACHABLE_CODE = YES;
895
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
896
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
897
+				COPY_PHASE_STRIP = NO;
898
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
899
+				GCC_C_LANGUAGE_STANDARD = gnu99;
900
+				GCC_DYNAMIC_NO_PIC = NO;
901
+				GCC_OPTIMIZATION_LEVEL = 0;
902
+				GCC_PREPROCESSOR_DEFINITIONS = (
903
+					"DEBUG=1",
904
+					"$(inherited)",
905
+				);
906
+				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
907
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
908
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
909
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
910
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
911
+				GCC_WARN_UNUSED_FUNCTION = YES;
912
+				GCC_WARN_UNUSED_VARIABLE = YES;
913
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
914
+				MTL_ENABLE_DEBUG_INFO = YES;
915
+				ONLY_ACTIVE_ARCH = YES;
916
+				SDKROOT = iphoneos;
917
+			};
918
+			name = Debug;
919
+		};
920
+		83CBBA211A601CBA00E9B192 /* Release */ = {
921
+			isa = XCBuildConfiguration;
922
+			buildSettings = {
923
+				ALWAYS_SEARCH_USER_PATHS = NO;
924
+				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
925
+				CLANG_CXX_LIBRARY = "libc++";
926
+				CLANG_ENABLE_MODULES = YES;
927
+				CLANG_ENABLE_OBJC_ARC = YES;
928
+				CLANG_WARN_BOOL_CONVERSION = YES;
929
+				CLANG_WARN_CONSTANT_CONVERSION = YES;
930
+				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
931
+				CLANG_WARN_EMPTY_BODY = YES;
932
+				CLANG_WARN_ENUM_CONVERSION = YES;
933
+				CLANG_WARN_INT_CONVERSION = YES;
934
+				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
935
+				CLANG_WARN_UNREACHABLE_CODE = YES;
936
+				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
937
+				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
938
+				COPY_PHASE_STRIP = YES;
939
+				ENABLE_NS_ASSERTIONS = NO;
940
+				ENABLE_STRICT_OBJC_MSGSEND = YES;
941
+				GCC_C_LANGUAGE_STANDARD = gnu99;
942
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
943
+				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
944
+				GCC_WARN_UNDECLARED_SELECTOR = YES;
945
+				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
946
+				GCC_WARN_UNUSED_FUNCTION = YES;
947
+				GCC_WARN_UNUSED_VARIABLE = YES;
948
+				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
949
+				MTL_ENABLE_DEBUG_INFO = NO;
950
+				SDKROOT = iphoneos;
951
+				VALIDATE_PRODUCT = YES;
952
+			};
953
+			name = Release;
954
+		};
955
+/* End XCBuildConfiguration section */
956
+
957
+/* Begin XCConfigurationList section */
958
+		00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "autoHeightWebViewExplorerTests" */ = {
959
+			isa = XCConfigurationList;
960
+			buildConfigurations = (
961
+				00E356F61AD99517003FC87E /* Debug */,
962
+				00E356F71AD99517003FC87E /* Release */,
963
+			);
964
+			defaultConfigurationIsVisible = 0;
965
+			defaultConfigurationName = Release;
966
+		};
967
+		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "autoHeightWebViewExplorer" */ = {
968
+			isa = XCConfigurationList;
969
+			buildConfigurations = (
970
+				13B07F941A680F5B00A75B9A /* Debug */,
971
+				13B07F951A680F5B00A75B9A /* Release */,
972
+			);
973
+			defaultConfigurationIsVisible = 0;
974
+			defaultConfigurationName = Release;
975
+		};
976
+		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "autoHeightWebViewExplorer" */ = {
977
+			isa = XCConfigurationList;
978
+			buildConfigurations = (
979
+				83CBBA201A601CBA00E9B192 /* Debug */,
980
+				83CBBA211A601CBA00E9B192 /* Release */,
981
+			);
982
+			defaultConfigurationIsVisible = 0;
983
+			defaultConfigurationName = Release;
984
+		};
985
+/* End XCConfigurationList section */
986
+	};
987
+	rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
988
+}

+ 129
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer.xcodeproj/xcshareddata/xcschemes/autoHeightWebViewExplorer.xcscheme 查看文件

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

+ 16
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/AppDelegate.h 查看文件

@@ -0,0 +1,16 @@
1
+/**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+#import <UIKit/UIKit.h>
11
+
12
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
13
+
14
+@property (nonatomic, strong) UIWindow *window;
15
+
16
+@end

+ 37
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/AppDelegate.m 查看文件

@@ -0,0 +1,37 @@
1
+/**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+#import "AppDelegate.h"
11
+
12
+#import <React/RCTBundleURLProvider.h>
13
+#import <React/RCTRootView.h>
14
+
15
+@implementation AppDelegate
16
+
17
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
18
+{
19
+  NSURL *jsCodeLocation;
20
+
21
+  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
22
+
23
+  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
24
+                                                      moduleName:@"autoHeightWebViewExplorer"
25
+                                               initialProperties:nil
26
+                                                   launchOptions:launchOptions];
27
+  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
28
+
29
+  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
30
+  UIViewController *rootViewController = [UIViewController new];
31
+  rootViewController.view = rootView;
32
+  self.window.rootViewController = rootViewController;
33
+  [self.window makeKeyAndVisible];
34
+  return YES;
35
+}
36
+
37
+@end

+ 42
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Base.lproj/LaunchScreen.xib 查看文件

@@ -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="autoHeightWebViewExplorer" 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/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Images.xcassets/AppIcon.appiconset/Contents.json 查看文件

@@ -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
+}

+ 54
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/Info.plist 查看文件

@@ -0,0 +1,54 @@
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>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>UILaunchStoryboardName</key>
26
+	<string>LaunchScreen</string>
27
+	<key>UIRequiredDeviceCapabilities</key>
28
+	<array>
29
+		<string>armv7</string>
30
+	</array>
31
+	<key>UISupportedInterfaceOrientations</key>
32
+	<array>
33
+		<string>UIInterfaceOrientationPortrait</string>
34
+		<string>UIInterfaceOrientationLandscapeLeft</string>
35
+		<string>UIInterfaceOrientationLandscapeRight</string>
36
+	</array>
37
+	<key>UIViewControllerBasedStatusBarAppearance</key>
38
+	<false/>
39
+	<key>NSLocationWhenInUseUsageDescription</key>
40
+	<string></string>
41
+	<key>NSAppTransportSecurity</key>
42
+	<!--See http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ -->
43
+	<dict>
44
+		<key>NSExceptionDomains</key>
45
+		<dict>
46
+			<key>localhost</key>
47
+			<dict>
48
+				<key>NSExceptionAllowsInsecureHTTPLoads</key>
49
+				<true/>
50
+			</dict>
51
+		</dict>
52
+	</dict>
53
+</dict>
54
+</plist>

+ 18
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorer/main.m 查看文件

@@ -0,0 +1,18 @@
1
+/**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+#import <UIKit/UIKit.h>
11
+
12
+#import "AppDelegate.h"
13
+
14
+int main(int argc, char * argv[]) {
15
+  @autoreleasepool {
16
+    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
17
+  }
18
+}

+ 24
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorerTests/Info.plist 查看文件

@@ -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>

+ 70
- 0
examples/autoHeightWebViewExplorer/ios/autoHeightWebViewExplorerTests/autoHeightWebViewExplorerTests.m 查看文件

@@ -0,0 +1,70 @@
1
+/**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+#import <UIKit/UIKit.h>
11
+#import <XCTest/XCTest.h>
12
+
13
+#import <React/RCTLog.h>
14
+#import <React/RCTRootView.h>
15
+
16
+#define TIMEOUT_SECONDS 600
17
+#define TEXT_TO_LOOK_FOR @"Welcome to React Native!"
18
+
19
+@interface autoHeightWebViewExplorerTests : XCTestCase
20
+
21
+@end
22
+
23
+@implementation autoHeightWebViewExplorerTests
24
+
25
+- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test
26
+{
27
+  if (test(view)) {
28
+    return YES;
29
+  }
30
+  for (UIView *subview in [view subviews]) {
31
+    if ([self findSubviewInView:subview matching:test]) {
32
+      return YES;
33
+    }
34
+  }
35
+  return NO;
36
+}
37
+
38
+- (void)testRendersWelcomeScreen
39
+{
40
+  UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController];
41
+  NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS];
42
+  BOOL foundElement = NO;
43
+
44
+  __block NSString *redboxError = nil;
45
+  RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) {
46
+    if (level >= RCTLogLevelError) {
47
+      redboxError = message;
48
+    }
49
+  });
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
+  RCTSetLogFunction(RCTDefaultLogFunction);
64
+
65
+  XCTAssertNil(redboxError, @"RedBox error: %@", redboxError);
66
+  XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS);
67
+}
68
+
69
+
70
+@end

+ 23
- 0
examples/autoHeightWebViewExplorer/package.json 查看文件

@@ -0,0 +1,23 @@
1
+{
2
+  "name": "autoHeightWebViewExplorer",
3
+  "version": "0.0.1",
4
+  "private": true,
5
+  "scripts": {
6
+    "start": "node node_modules/react-native/local-cli/cli.js start",
7
+    "test": "jest"
8
+  },
9
+  "dependencies": {
10
+    "react": "15.4.2",
11
+    "react-native": "0.40.0",
12
+    "react-native-autoheightwebview": "../.."
13
+  },
14
+  "devDependencies": {
15
+    "babel-jest": "18.0.0",
16
+    "babel-preset-react-native": "1.9.1",
17
+    "jest": "18.1.0",
18
+    "react-test-renderer": "15.4.2"
19
+  },
20
+  "jest": {
21
+    "preset": "react-native"
22
+  }
23
+}

+ 1
- 0
package.json 查看文件

@@ -3,6 +3,7 @@
3 3
   "version": "0.0.6",
4 4
   "description": "An auto height webview for React Native",
5 5
   "main": "autoHeightWebView",
6
+  "files": ["android/", "autoHeightWebView/"],
6 7
   "scripts": {
7 8
     "test": "echo \"Error: no test specified\" && exit 1"
8 9
   },