Browse Source

embed the example in an example folder

Gaëtan Renaudeau 7 years ago
parent
commit
1cbcf0d1d5
80 changed files with 9887 additions and 2 deletions
  1. 41
    0
      .npmignore
  2. 2
    2
      README.md
  3. 3
    0
      example/.babelrc
  4. 6
    0
      example/.buckconfig
  5. 44
    0
      example/.flowconfig
  6. 1
    0
      example/.gitattributes
  7. 53
    0
      example/.gitignore
  8. 1
    0
      example/.watchmanconfig
  9. 397
    0
      example/App.js
  10. 355
    0
      example/App.windows.js
  11. 39
    0
      example/Btn.js
  12. 12
    0
      example/README.md
  13. 66
    0
      example/android/app/BUCK
  14. 143
    0
      example/android/app/build.gradle
  15. 66
    0
      example/android/app/proguard-rules.pro
  16. 35
    0
      example/android/app/src/main/AndroidManifest.xml
  17. 15
    0
      example/android/app/src/main/java/com/viewshotexample/MainActivity.java
  18. 51
    0
      example/android/app/src/main/java/com/viewshotexample/MainApplication.java
  19. BIN
      example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  20. BIN
      example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  21. BIN
      example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  22. BIN
      example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  23. 3
    0
      example/android/app/src/main/res/values/strings.xml
  24. 8
    0
      example/android/app/src/main/res/values/styles.xml
  25. 24
    0
      example/android/build.gradle
  26. 20
    0
      example/android/gradle.properties
  27. BIN
      example/android/gradle/wrapper/gradle-wrapper.jar
  28. 6
    0
      example/android/gradle/wrapper/gradle-wrapper.properties
  29. 164
    0
      example/android/gradlew
  30. 90
    0
      example/android/gradlew.bat
  31. 8
    0
      example/android/keystores/BUCK
  32. 4
    0
      example/android/keystores/debug.keystore.properties
  33. 14
    0
      example/android/settings.gradle
  34. BIN
      example/broadchurch.mp4
  35. BIN
      example/docs/android.png
  36. BIN
      example/docs/ios.png
  37. BIN
      example/docs/recursive.gif
  38. 4
    0
      example/index.android.js
  39. 4
    0
      example/index.ios.js
  40. 4
    0
      example/index.windows.js
  41. 1069
    0
      example/ios/ViewShotExample.xcodeproj/project.pbxproj
  42. 105
    0
      example/ios/ViewShotExample.xcodeproj/xcshareddata/xcschemes/ViewShotExample.xcscheme
  43. 16
    0
      example/ios/ViewShotExample/AppDelegate.h
  44. 39
    0
      example/ios/ViewShotExample/AppDelegate.m
  45. 42
    0
      example/ios/ViewShotExample/Base.lproj/LaunchScreen.xib
  46. 38
    0
      example/ios/ViewShotExample/Images.xcassets/AppIcon.appiconset/Contents.json
  47. 54
    0
      example/ios/ViewShotExample/Info.plist
  48. 18
    0
      example/ios/ViewShotExample/main.m
  49. 24
    0
      example/ios/ViewShotExampleTests/Info.plist
  50. 70
    0
      example/ios/ViewShotExampleTests/ViewShotExampleTests.m
  51. 24
    0
      example/package.json
  52. 89
    0
      example/windows/.gitignore
  53. 6
    0
      example/windows/ViewShotExample.Net46/App.config
  54. 8
    0
      example/windows/ViewShotExample.Net46/App.xaml
  55. 101
    0
      example/windows/ViewShotExample.Net46/App.xaml.cs
  56. 32
    0
      example/windows/ViewShotExample.Net46/AppReactPage.cs
  57. 55
    0
      example/windows/ViewShotExample.Net46/Properties/AssemblyInfo.cs
  58. 71
    0
      example/windows/ViewShotExample.Net46/Properties/Resources.Designer.cs
  59. 117
    0
      example/windows/ViewShotExample.Net46/Properties/Resources.resx
  60. 30
    0
      example/windows/ViewShotExample.Net46/Properties/Settings.Designer.cs
  61. 7
    0
      example/windows/ViewShotExample.Net46/Properties/Settings.settings
  62. 130
    0
      example/windows/ViewShotExample.Net46/ViewShotExample.Net46.csproj
  63. 209
    0
      example/windows/ViewShotExample.sln
  64. 8
    0
      example/windows/ViewShotExample/App.xaml
  65. 147
    0
      example/windows/ViewShotExample/App.xaml.cs
  66. BIN
      example/windows/ViewShotExample/Assets/LockScreenLogo.scale-200.png
  67. BIN
      example/windows/ViewShotExample/Assets/SplashScreen.scale-200.png
  68. BIN
      example/windows/ViewShotExample/Assets/Square150x150Logo.scale-200.png
  69. BIN
      example/windows/ViewShotExample/Assets/Square44x44Logo.scale-200.png
  70. BIN
      example/windows/ViewShotExample/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
  71. BIN
      example/windows/ViewShotExample/Assets/StoreLogo.png
  72. BIN
      example/windows/ViewShotExample/Assets/Wide310x150Logo.scale-200.png
  73. 56
    0
      example/windows/ViewShotExample/MainPage.cs
  74. 49
    0
      example/windows/ViewShotExample/Package.appxmanifest
  75. 29
    0
      example/windows/ViewShotExample/Properties/AssemblyInfo.cs
  76. 31
    0
      example/windows/ViewShotExample/Properties/Default.rd.xml
  77. 234
    0
      example/windows/ViewShotExample/ViewShotExample.csproj
  78. BIN
      example/windows/ViewShotExample/ViewShotExample_TemporaryKey.pfx
  79. 17
    0
      example/windows/ViewShotExample/project.json
  80. 5279
    0
      example/yarn.lock

+ 41
- 0
.npmignore View File

@@ -0,0 +1,41 @@
1
+example
2
+
3
+# OSX
4
+#
5
+.DS_Store
6
+
7
+# Xcode
8
+#
9
+build/
10
+*.pbxuser
11
+!default.pbxuser
12
+*.mode1v3
13
+!default.mode1v3
14
+*.mode2v3
15
+!default.mode2v3
16
+*.perspectivev3
17
+!default.perspectivev3
18
+xcuserdata
19
+*.xccheckout
20
+*.moved-aside
21
+DerivedData
22
+*.hmap
23
+*.ipa
24
+*.xcuserstate
25
+project.xcworkspace
26
+
27
+# node.js
28
+#
29
+node_modules/
30
+npm-debug.log
31
+
32
+# android
33
+#
34
+android/build/
35
+android/.gradle/
36
+android/.idea/
37
+android/android.iml
38
+android/gradle/
39
+android/gradlew
40
+android/gradlew.bat
41
+android/local.properties

+ 2
- 2
README.md View File

@@ -3,7 +3,7 @@
3 3
 
4 4
 Capture a React Native view to an image.
5 5
 
6
-<img src="https://github.com/gre/react-native-view-shot-example/raw/master/docs/recursive.gif" width=300 />
6
+<img src="./example/docs/recursive.gif" width=300 />
7 7
 
8 8
 ## Install
9 9
 
@@ -112,7 +112,7 @@ NB: the tmpfile captures are automatically cleaned out after the app closes, so
112 112
 
113 113
 ### Advanced Examples
114 114
 
115
-[Checkout react-native-view-shot-example](https://github.com/gre/react-native-view-shot-example)
115
+[Checkout react-native-view-shot-example](example)
116 116
 
117 117
 ## Interoperability Table
118 118
 

+ 3
- 0
example/.babelrc View File

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

+ 6
- 0
example/.buckconfig View File

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

+ 44
- 0
example/.flowconfig View File

@@ -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
example/.gitattributes View File

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

+ 53
- 0
example/.gitignore View File

@@ -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
example/.watchmanconfig View File

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

+ 397
- 0
example/App.js View File

@@ -0,0 +1,397 @@
1
+import React, { Component } from "react";
2
+import {
3
+  StyleSheet,
4
+  Text,
5
+  View,
6
+  ScrollView,
7
+  Image,
8
+  Switch,
9
+  TextInput,
10
+  Picker,
11
+  Slider,
12
+  WebView
13
+} from "react-native";
14
+import omit from "lodash/omit";
15
+import { captureRef } from "react-native-view-shot";
16
+import { Surface } from "gl-react-native";
17
+import GL from "gl-react";
18
+import MapView from "react-native-maps";
19
+import Video from "react-native-video";
20
+import Btn from "./Btn";
21
+
22
+const catsSource = {
23
+  uri: "https://i.imgur.com/5EOyTDQ.jpg"
24
+};
25
+
26
+const shaders = GL.Shaders.create({
27
+  helloGL: {
28
+    frag: `
29
+precision highp float;
30
+varying vec2 uv;
31
+uniform float blue;
32
+void main () {
33
+  gl_FragColor = vec4(uv.x, uv.y, blue, 1.0);
34
+}`
35
+  }
36
+});
37
+
38
+const HelloGL = GL.createComponent(
39
+  ({ blue }) => <GL.Node shader={shaders.helloGL} uniforms={{ blue }} />,
40
+  { displayName: "HelloGL" }
41
+);
42
+
43
+export default class App extends Component {
44
+  state = {
45
+    previewSource: catsSource,
46
+    error: null,
47
+    res: null,
48
+    value: {
49
+      format: "png",
50
+      quality: 0.9,
51
+      result: "tmpfile",
52
+      snapshotContentContainer: false
53
+    }
54
+  };
55
+
56
+  snapshot = refname => () =>
57
+    captureRef(this.refs[refname], this.state.value)
58
+      .then(
59
+        res =>
60
+          this.state.value.result !== "tmpfile"
61
+            ? res
62
+            : new Promise((success, failure) =>
63
+                // just a test to ensure res can be used in Image.getSize
64
+                Image.getSize(
65
+                  res,
66
+                  (width, height) => (
67
+                    console.log(res, width, height), success(res)
68
+                  ),
69
+                  failure
70
+                )
71
+              )
72
+      )
73
+      .then(res =>
74
+        this.setState({
75
+          error: null,
76
+          res,
77
+          previewSource: {
78
+            uri:
79
+              this.state.value.result === "base64"
80
+                ? "data:image/" + this.state.value.format + ";base64," + res
81
+                : res
82
+          }
83
+        })
84
+      )
85
+      .catch(
86
+        error => (
87
+          console.warn(error),
88
+          this.setState({ error, res: null, previewSource: null })
89
+        )
90
+      );
91
+
92
+  render() {
93
+    const { value, previewSource, error, res } = this.state;
94
+    const {
95
+      format,
96
+      quality,
97
+      width,
98
+      height,
99
+      result,
100
+      snapshotContentContainer
101
+    } = value;
102
+    return (
103
+      <ScrollView
104
+        ref="full"
105
+        style={styles.root}
106
+        contentContainerStyle={styles.container}
107
+      >
108
+        <View ref="header" style={styles.header}>
109
+          <Text style={styles.title}>😃 ViewShot Example 😜</Text>
110
+          <View style={styles.p1}>
111
+            <Text style={styles.text}>This is a </Text>
112
+            <Text style={styles.code}>react-native-view-shot</Text>
113
+            <Text style={styles.text}> showcase.</Text>
114
+          </View>
115
+          <View style={styles.preview}>
116
+            {error ? (
117
+              <Text style={styles.previewError}>
118
+                {"" + (error.message || error)}
119
+              </Text>
120
+            ) : (
121
+              <Image
122
+                fadeDuration={0}
123
+                resizeMode="contain"
124
+                style={styles.previewImage}
125
+                source={previewSource}
126
+              />
127
+            )}
128
+          </View>
129
+          <Text numberOfLines={1} style={styles.previewUriText}>
130
+            {res ? res.slice(0, 200) : ""}
131
+          </Text>
132
+        </View>
133
+        <View ref="form" style={styles.form}>
134
+          <View style={styles.btns}>
135
+            <Btn
136
+              label="😻 Reset"
137
+              onPress={() => this.setState({ previewSource: catsSource })}
138
+            />
139
+            <Btn label="📷 Head Section" onPress={this.snapshot("header")} />
140
+            <Btn label="📷 Form" onPress={this.snapshot("form")} />
141
+            <Btn
142
+              label="📷 Experimental Section"
143
+              onPress={this.snapshot("complex")}
144
+            />
145
+            <Btn label="📷 All (ScrollView)" onPress={this.snapshot("full")} />
146
+            <Btn label="📷 GL React" onPress={this.snapshot("gl")} />
147
+            <Btn label="📷 MapView" onPress={this.snapshot("mapview")} />
148
+            <Btn label="📷 WebView" onPress={this.snapshot("webview")} />
149
+            <Btn label="📷 Video" onPress={this.snapshot("video")} />
150
+            <Btn
151
+              label="📷 Empty View (should crash)"
152
+              onPress={this.snapshot("empty")}
153
+            />
154
+          </View>
155
+          <View style={styles.field}>
156
+            <Text style={styles.label}>Format</Text>
157
+            <Picker
158
+              style={styles.input}
159
+              selectedValue={format}
160
+              onValueChange={format =>
161
+                this.setState({ value: { ...value, format } })}
162
+            >
163
+              <Picker.Item label="PNG" value="png" />
164
+              <Picker.Item label="JPEG" value="jpeg" />
165
+              <Picker.Item label="WEBM (android only)" value="webm" />
166
+              <Picker.Item label="INVALID" value="_invalid_" />
167
+            </Picker>
168
+          </View>
169
+          <View style={styles.field}>
170
+            <Text style={styles.label}>Quality</Text>
171
+            <Slider
172
+              style={styles.input}
173
+              value={quality}
174
+              onValueChange={quality =>
175
+                this.setState({ value: { ...value, quality } })}
176
+            />
177
+            <Text>{(quality * 100).toFixed(0)}%</Text>
178
+          </View>
179
+          <View style={styles.field}>
180
+            <Text style={styles.label}>Size</Text>
181
+            <Switch
182
+              style={styles.switch}
183
+              value={width !== undefined}
184
+              onValueChange={checked =>
185
+                this.setState({
186
+                  value: omit(
187
+                    {
188
+                      ...value,
189
+                      width: 300,
190
+                      height: 300
191
+                    },
192
+                    checked ? [] : ["width", "height"]
193
+                  )
194
+                })}
195
+            />
196
+            {width !== undefined ? (
197
+              <TextInput
198
+                style={styles.inputText}
199
+                value={"" + width}
200
+                keyboardType="number-pad"
201
+                onChangeText={txt =>
202
+                  !isNaN(txt) &&
203
+                  this.setState({
204
+                    value: { ...value, width: parseInt(txt, 10) }
205
+                  })}
206
+              />
207
+            ) : (
208
+              <Text style={styles.inputText}>(auto)</Text>
209
+            )}
210
+            <Text>x</Text>
211
+            {height !== undefined ? (
212
+              <TextInput
213
+                style={styles.inputText}
214
+                value={"" + height}
215
+                keyboardType="number-pad"
216
+                onChangeText={txt =>
217
+                  !isNaN(txt) &&
218
+                  this.setState({
219
+                    value: { ...value, height: parseInt(txt, 10) }
220
+                  })}
221
+              />
222
+            ) : (
223
+              <Text style={styles.inputText}>(auto)</Text>
224
+            )}
225
+          </View>
226
+          <View style={styles.field}>
227
+            <Text style={styles.label}>Result</Text>
228
+            <Picker
229
+              style={styles.input}
230
+              selectedValue={result}
231
+              onValueChange={result =>
232
+                this.setState({ value: { ...value, result } })}
233
+            >
234
+              <Picker.Item label="tmpfile" value="tmpfile" />
235
+              <Picker.Item label="base64" value="base64" />
236
+              <Picker.Item label="data URI" value="data-uri" />
237
+              <Picker.Item label="INVALID" value="_invalid_" />
238
+            </Picker>
239
+          </View>
240
+          <View style={styles.field}>
241
+            <Text style={styles.label}>snapshotContentContainer</Text>
242
+            <Switch
243
+              style={styles.switch}
244
+              value={snapshotContentContainer}
245
+              onValueChange={snapshotContentContainer =>
246
+                this.setState({
247
+                  value: { ...value, snapshotContentContainer }
248
+                })}
249
+            />
250
+          </View>
251
+        </View>
252
+        <View ref="empty" collapsable={false} />
253
+        <View style={styles.experimental} ref="complex" collapsable={false}>
254
+          <Text style={styles.experimentalTitle}>Experimental Stuff</Text>
255
+          <Surface ref="gl" width={300} height={300}>
256
+            <HelloGL blue={0.5} />
257
+          </Surface>
258
+          <MapView
259
+            ref="mapview"
260
+            initialRegion={{
261
+              latitude: 37.78825,
262
+              longitude: -122.4324,
263
+              latitudeDelta: 0.0922,
264
+              longitudeDelta: 0.0421
265
+            }}
266
+            style={{ width: 300, height: 300 }}
267
+          />
268
+          <View
269
+            ref="webview"
270
+            collapsable={false}
271
+            style={{ width: 300, height: 300 }}
272
+          >
273
+            <WebView
274
+              source={{
275
+                uri: "https://github.com/gre/react-native-view-shot"
276
+              }}
277
+            />
278
+          </View>
279
+          <Video
280
+            ref="video"
281
+            style={{ width: 300, height: 300 }}
282
+            source={require("./broadchurch.mp4")}
283
+            volume={0}
284
+            repeat
285
+          />
286
+        </View>
287
+      </ScrollView>
288
+    );
289
+  }
290
+}
291
+
292
+const styles = StyleSheet.create({
293
+  root: {
294
+    flex: 1,
295
+    backgroundColor: "#f6f6f6"
296
+  },
297
+  container: {
298
+    paddingVertical: 20,
299
+    backgroundColor: "#f6f6f6"
300
+  },
301
+  title: {
302
+    fontSize: 20,
303
+    textAlign: "center",
304
+    margin: 10
305
+  },
306
+  experimental: {
307
+    padding: 10,
308
+    flexDirection: "column",
309
+    alignItems: "center"
310
+  },
311
+  experimentalTitle: {
312
+    fontSize: 16,
313
+    margin: 10
314
+  },
315
+  p1: {
316
+    marginBottom: 10,
317
+    flexDirection: "row",
318
+    flexWrap: "wrap",
319
+    justifyContent: "center",
320
+    alignItems: "center"
321
+  },
322
+  text: {
323
+    color: "#333"
324
+  },
325
+  code: {
326
+    fontWeight: "bold",
327
+    color: "#000"
328
+  },
329
+  field: {
330
+    flexDirection: "row",
331
+    alignItems: "center",
332
+    paddingVertical: 4,
333
+    paddingHorizontal: 10
334
+  },
335
+  label: {
336
+    minWidth: 80,
337
+    fontStyle: "italic",
338
+    color: "#888"
339
+  },
340
+  switch: {
341
+    marginRight: 50
342
+  },
343
+  input: {
344
+    flex: 1,
345
+    marginHorizontal: 5
346
+  },
347
+  inputText: {
348
+    flex: 1,
349
+    marginHorizontal: 5,
350
+    color: "red",
351
+    textAlign: "center"
352
+  },
353
+  preview: {
354
+    flexDirection: "row",
355
+    alignItems: "center",
356
+    justifyContent: "space-around"
357
+  },
358
+  previewImage: {
359
+    width: 375,
360
+    height: 300
361
+  },
362
+  previewUriText: {
363
+    fontSize: 12,
364
+    fontStyle: "italic",
365
+    color: "#666",
366
+    textAlign: "center",
367
+    padding: 10,
368
+    paddingBottom: 0
369
+  },
370
+  previewError: {
371
+    width: 375,
372
+    height: 300,
373
+    paddingTop: 20,
374
+    textAlign: "center",
375
+    fontSize: 20,
376
+    fontWeight: "bold",
377
+    color: "#fff",
378
+    backgroundColor: "#c00"
379
+  },
380
+  header: {
381
+    backgroundColor: "#f6f6f6",
382
+    borderColor: "#000",
383
+    borderWidth: 1,
384
+    paddingBottom: 20
385
+  },
386
+  form: {
387
+    backgroundColor: "#fff"
388
+  },
389
+  btns: {
390
+    flexDirection: "row",
391
+    flexWrap: "wrap",
392
+    alignItems: "center",
393
+    justifyContent: "center",
394
+    paddingVertical: 10,
395
+    margin: 4
396
+  }
397
+});

+ 355
- 0
example/App.windows.js View File

@@ -0,0 +1,355 @@
1
+import React, { Component } from "react";
2
+import {
3
+  StyleSheet,
4
+  Text,
5
+  View,
6
+  ScrollView,
7
+  Image,
8
+  Switch,
9
+  TextInput,
10
+  Picker,
11
+  Slider,
12
+  WebView,
13
+} from "react-native";
14
+import omit from "lodash/omit";
15
+import { takeSnapshot } from "react-native-view-shot";
16
+// import { Surface } from "gl-react-native";
17
+// import GL from "gl-react";
18
+// import MapView from "react-native-maps";
19
+import Video from "react-native-video";
20
+import Btn from "./Btn";
21
+
22
+const catsSource = {
23
+  uri: "https://i.imgur.com/5EOyTDQ.jpg",
24
+};
25
+
26
+/*const shaders = GL.Shaders.create({
27
+  helloGL: {
28
+    frag: `
29
+precision highp float;
30
+varying vec2 uv;
31
+uniform float blue;
32
+void main () {
33
+  gl_FragColor = vec4(uv.x, uv.y, blue, 1.0);
34
+}`
35
+  }
36
+});
37
+
38
+const HelloGL = GL.createComponent(
39
+  ({ blue }) =>
40
+  <GL.Node
41
+    shader={shaders.helloGL}
42
+    uniforms={{ blue }}
43
+  />,
44
+  { displayName: "HelloGL" });*/
45
+
46
+export default class App extends Component {
47
+  state = {
48
+    previewSource: catsSource,
49
+    error: null,
50
+    res: null,
51
+    value: {
52
+      format: "png",
53
+      quality: 0.9,
54
+      result: "file",
55
+      snapshotContentContainer: false,
56
+    },
57
+  };
58
+
59
+  snapshot = refname => () =>
60
+    takeSnapshot(this.refs[refname], this.state.value)
61
+    .then(res =>
62
+      this.state.value.result !== "file"
63
+      ? res
64
+      : new Promise((success, failure) =>
65
+      // just a test to ensure res can be used in Image.getSize
66
+      Image.getSize(
67
+        res,
68
+        (width, height) => (console.log(res,width,height), success(res)),
69
+        failure)))
70
+    .then(res => this.setState({
71
+      error: null,
72
+      res,
73
+      previewSource: { uri:
74
+        this.state.value.result === "base64"
75
+        ? "data:image/"+this.state.value.format+";base64,"+res
76
+        : res }
77
+    }))
78
+    .catch(error => (console.warn(error), this.setState({ error, res: null, previewSource: null })));
79
+
80
+  render() {
81
+    const { value, previewSource, error, res } = this.state;
82
+    const { format, quality, width, height, result, snapshotContentContainer } = value;
83
+    return (
84
+      <ScrollView
85
+        ref="full"
86
+        style={styles.root}
87
+        contentContainerStyle={styles.container}>
88
+        <View
89
+          ref="header"
90
+          style={styles.header}>
91
+          <Text style={styles.title}>
92
+            😃 ViewShot Example 😜
93
+          </Text>
94
+          <View style={styles.p1}>
95
+            <Text style={styles.text}>
96
+              This is a{" "}
97
+            </Text>
98
+            <Text style={styles.code}>
99
+              react-native-view-shot
100
+            </Text>
101
+            <Text style={styles.text}>
102
+            {" "}showcase.
103
+            </Text>
104
+          </View>
105
+          <View style={styles.preview}>
106
+            { error
107
+              ? <Text style={styles.previewError}>
108
+                  {""+(error.message || error)}
109
+                </Text>
110
+              : <Image
111
+                  fadeDuration={0}
112
+                  resizeMode="contain"
113
+                  style={styles.previewImage}
114
+                  source={previewSource}
115
+                /> }
116
+          </View>
117
+          <Text numberOfLines={1} style={styles.previewUriText}>
118
+          {res ? res.slice(0, 200) : ""}
119
+          </Text>
120
+        </View>
121
+        <View
122
+          ref="form"
123
+          style={styles.form}>
124
+          <View style={styles.btns}>
125
+            <Btn label="😻 Reset" onPress={() => this.setState({ previewSource: catsSource })} />
126
+            <Btn label="📷 Head Section" onPress={this.snapshot("header")} />
127
+            <Btn label="📷 Form" onPress={this.snapshot("form")} />
128
+            <Btn label="📷 Experimental Section" onPress={this.snapshot("complex")} />
129
+            <Btn label="📷 All (ScrollView)" onPress={this.snapshot("full")} />
130
+            <Btn label="📷 GL React" onPress={this.snapshot("gl")} />
131
+            <Btn label="📷 MapView" onPress={this.snapshot("mapview")} />
132
+            <Btn label="📷 WebView" onPress={this.snapshot("webview")} />
133
+            <Btn label="📷 Video" onPress={this.snapshot("video")} />
134
+            <Btn label="📷 Empty View (should crash)" onPress={this.snapshot("empty")} />
135
+          </View>
136
+          <View style={styles.field}>
137
+            <Text style={styles.label}>Format</Text>
138
+            <Picker
139
+              style={styles.input}
140
+              selectedValue={format}
141
+              onValueChange={format => this.setState({ value: { ...value, format } })}>
142
+              <Picker.Item label="PNG" value="png" />
143
+              <Picker.Item label="JPEG" value="jpeg" />
144
+              <Picker.Item label="WEBM (android only)" value="webm" />
145
+              <Picker.Item label="INVALID" value="_invalid_" />
146
+            </Picker>
147
+          </View>
148
+          <View style={styles.field}>
149
+            <Text style={styles.label}>Quality</Text>
150
+            <Slider
151
+              style={styles.input}
152
+              value={quality}
153
+              onValueChange={quality => this.setState({ value: { ...value, quality } })}
154
+            />
155
+            <Text>{(quality*100).toFixed(0)}%</Text>
156
+          </View>
157
+          <View style={styles.field}>
158
+            <Text style={styles.label}>Size</Text>
159
+            <Switch
160
+              style={styles.switch}
161
+              value={width!==undefined}
162
+              onValueChange={checked => this.setState({
163
+                value: omit({
164
+                  ...value,
165
+                  width: 300,
166
+                  height: 300,
167
+                }, checked ? [] : ["width","height"])
168
+              })}
169
+            />
170
+            { width!==undefined ? <TextInput
171
+              style={styles.inputText}
172
+              value={""+width}
173
+              keyboardType="number-pad"
174
+              onChangeText={txt => !isNaN(txt) && this.setState({
175
+                value: { ...value, width: parseInt(txt, 10) }
176
+              })}
177
+            /> : <Text style={styles.inputText}>(auto)</Text> }
178
+            <Text>x</Text>
179
+            { height!==undefined ? <TextInput
180
+              style={styles.inputText}
181
+              value={""+height}
182
+              keyboardType="number-pad"
183
+              onChangeText={txt => !isNaN(txt) && this.setState({
184
+                value: { ...value, height: parseInt(txt, 10) }
185
+              })}
186
+            /> : <Text style={styles.inputText}>(auto)</Text> }
187
+          </View>
188
+          <View style={styles.field}>
189
+            <Text style={styles.label}>Result</Text>
190
+            <Picker
191
+              style={styles.input}
192
+              selectedValue={result}
193
+              onValueChange={result => this.setState({ value: { ...value, result } })}>
194
+              <Picker.Item label="file" value="file" />
195
+              <Picker.Item label="base64" value="base64" />
196
+              <Picker.Item label="data URI" value="data-uri" />
197
+              <Picker.Item label="INVALID" value="_invalid_" />
198
+            </Picker>
199
+          </View>
200
+          <View style={styles.field}>
201
+            <Text style={styles.label}>snapshotContentContainer</Text>
202
+            <Switch
203
+              style={styles.switch}
204
+              value={snapshotContentContainer}
205
+              onValueChange={snapshotContentContainer => this.setState({
206
+                value: { ...value, snapshotContentContainer }
207
+              })}
208
+            />
209
+          </View>
210
+        </View>
211
+        <View ref="empty" collapsable={false} />
212
+        <View style={styles.experimental} ref="complex" collapsable={false}>
213
+          <Text style={styles.experimentalTitle}>Experimental Stuff</Text>
214
+          {/*<Surface ref="gl" width={300} height={300}>
215
+            <HelloGL blue={0.5} />
216
+          </Surface>
217
+          <MapView
218
+             ref="mapview"
219
+            initialRegion={{
220
+              latitude: 37.78825,
221
+              longitude: -122.4324,
222
+              latitudeDelta: 0.0922,
223
+              longitudeDelta: 0.0421,
224
+            }}
225
+            style={{ width: 300, height: 300 }}
226
+          />*/}
227
+          <View
228
+            ref="webview"
229
+            collapsable={false}
230
+            style={{ width: 300, height: 300 }}>
231
+            <WebView
232
+              source={{
233
+                uri: "https://github.com/gre/react-native-view-shot"
234
+              }}
235
+            />
236
+          </View>
237
+          <Video
238
+            ref="video"
239
+            style={{ width: 300, height: 300 }}
240
+            source={require("./broadchurch.mp4")}
241
+            volume={0}
242
+            repeat
243
+          />
244
+        </View>
245
+      </ScrollView>
246
+    );
247
+  }
248
+}
249
+
250
+const styles = StyleSheet.create({
251
+  root: {
252
+    flex: 1,
253
+    backgroundColor: "#f6f6f6",
254
+  },
255
+  container: {
256
+    paddingVertical: 20,
257
+    backgroundColor: "#f6f6f6",
258
+  },
259
+  title: {
260
+    fontSize: 20,
261
+    textAlign: "center",
262
+    margin: 10,
263
+  },
264
+  experimental: {
265
+    padding: 10,
266
+    flexDirection: "column",
267
+    alignItems: "center",
268
+  },
269
+  experimentalTitle: {
270
+    fontSize: 16,
271
+    margin: 10,
272
+  },
273
+  p1: {
274
+    marginBottom: 10,
275
+    flexDirection: "row",
276
+    flexWrap: "wrap",
277
+    justifyContent: "center",
278
+    alignItems: "center",
279
+  },
280
+  text: {
281
+    color: "#333",
282
+  },
283
+  code: {
284
+    fontWeight: "bold",
285
+    color: "#000",
286
+  },
287
+  field: {
288
+    flexDirection: "row",
289
+    alignItems: "center",
290
+    paddingVertical: 4,
291
+    paddingHorizontal: 10,
292
+  },
293
+  label: {
294
+    minWidth: 80,
295
+    fontStyle: "italic",
296
+    color: "#888",
297
+  },
298
+  switch: {
299
+    marginRight: 50,
300
+  },
301
+  input: {
302
+    flex: 1,
303
+    marginHorizontal: 5,
304
+  },
305
+  inputText: {
306
+    flex: 1,
307
+    marginHorizontal: 5,
308
+    color: "red",
309
+    textAlign: "center",
310
+  },
311
+  preview: {
312
+    flexDirection: "row",
313
+    alignItems: "center",
314
+    justifyContent: "space-around",
315
+  },
316
+  previewImage: {
317
+    width: 375,
318
+    height: 300,
319
+  },
320
+  previewUriText: {
321
+    fontSize: 12,
322
+    fontStyle: "italic",
323
+    color: "#666",
324
+    textAlign: "center",
325
+    padding: 10,
326
+    paddingBottom: 0,
327
+  },
328
+  previewError: {
329
+    width: 375,
330
+    height: 300,
331
+    paddingTop: 20,
332
+    textAlign: "center",
333
+    fontSize: 20,
334
+    fontWeight: "bold",
335
+    color: "#fff",
336
+    backgroundColor: "#c00",
337
+  },
338
+  header: {
339
+    backgroundColor: "#f6f6f6",
340
+    borderColor: "#000",
341
+    borderWidth: 1,
342
+    paddingBottom: 20,
343
+  },
344
+  form: {
345
+    backgroundColor: "#fff",
346
+  },
347
+  btns: {
348
+    flexDirection: "row",
349
+    flexWrap: "wrap",
350
+    alignItems: "center",
351
+    justifyContent: "center",
352
+    paddingVertical: 10,
353
+    margin: 4,
354
+  }
355
+});

+ 39
- 0
example/Btn.js View File

@@ -0,0 +1,39 @@
1
+//@flow
2
+import React, {
3
+  Component,
4
+  PropTypes,
5
+} from "react";
6
+import {
7
+  Text,
8
+  TouchableOpacity,
9
+  StyleSheet,
10
+} from "react-native";
11
+
12
+const styles = StyleSheet.create({
13
+  root: {
14
+    margin: 3,
15
+    paddingVertical: 4,
16
+    paddingHorizontal: 8,
17
+    color: "#36f",
18
+    borderWidth: 1,
19
+    borderColor: "#36f",
20
+    fontSize: 12,
21
+  }
22
+});
23
+
24
+export default class Btn extends Component {
25
+  static propTypes = {
26
+    onPress: PropTypes.func.isRequired,
27
+    label: PropTypes.string.isRequired,
28
+  };
29
+  render () {
30
+    const { onPress, label } = this.props;
31
+    return (
32
+      <TouchableOpacity onPress={onPress}>
33
+        <Text style={styles.root}>
34
+          {label}
35
+        </Text>
36
+      </TouchableOpacity>
37
+    );
38
+  }
39
+}

+ 12
- 0
example/README.md View File

@@ -0,0 +1,12 @@
1
+## react-native-view-shot-example
2
+
3
+Example for [react-native-view-shot](https://github.com/gre/react-native-view-shot).
4
+
5
+<img src="docs/recursive.gif" width=300 />
6
+
7
+
8
+## Support for iOS and Android
9
+
10
+<img src="docs/android.png" width=300 />
11
+
12
+<img src="docs/ios.png" width=300 />

+ 66
- 0
example/android/app/BUCK View File

@@ -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.viewshotexample',
50
+)
51
+
52
+android_resource(
53
+  name = 'res',
54
+  res = 'src/main/res',
55
+  package = 'com.viewshotexample',
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
+)

+ 143
- 0
example/android/app/build.gradle View File

@@ -0,0 +1,143 @@
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.viewshotexample"
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 fileTree(dir: "libs", include: ["*.jar"])
130
+    compile "com.android.support:appcompat-v7:23.0.1"
131
+    compile "com.facebook.react:react-native:+"  // From node_modules
132
+    compile project(':react-native-view-shot')
133
+    compile project(':gl-react-native')
134
+    compile project(':react-native-maps')
135
+    compile project(':react-native-video')
136
+}
137
+
138
+// Run this once to be able to run the application with BUCK
139
+// puts all compile dependencies into folder libs for BUCK to use
140
+task copyDownloadableDepsToLibs(type: Copy) {
141
+    from configurations.compile
142
+    into 'libs'
143
+}

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

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

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

@@ -0,0 +1,35 @@
1
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+    package="com.viewshotexample"
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
+      <meta-data
20
+        android:name="com.google.android.geo.API_KEY"
21
+        android:value="AIzaSyBizL7n_wUI-J2h2JMuFzNGzZ0NOoWLoHo"
22
+      />
23
+      <activity
24
+        android:name=".MainActivity"
25
+        android:label="@string/app_name"
26
+        android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
27
+        <intent-filter>
28
+            <action android:name="android.intent.action.MAIN" />
29
+            <category android:name="android.intent.category.LAUNCHER" />
30
+        </intent-filter>
31
+      </activity>
32
+      <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
33
+    </application>
34
+
35
+</manifest>

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

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

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

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

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


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


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


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


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

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

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

@@ -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
example/android/build.gradle View File

@@ -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:2.2.3'
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
example/android/gradle.properties View File

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

BIN
example/android/gradle/wrapper/gradle-wrapper.jar View File


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

@@ -0,0 +1,6 @@
1
+#Tue Jan 10 10:28:13 CET 2017
2
+distributionBase=GRADLE_USER_HOME
3
+distributionPath=wrapper/dists
4
+zipStoreBase=GRADLE_USER_HOME
5
+zipStorePath=wrapper/dists
6
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip

+ 164
- 0
example/android/gradlew View File

@@ -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
example/android/gradlew.bat View File

@@ -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
example/android/keystores/BUCK View File

@@ -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
example/android/keystores/debug.keystore.properties View File

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

+ 14
- 0
example/android/settings.gradle View File

@@ -0,0 +1,14 @@
1
+rootProject.name = 'ViewShotExample'
2
+
3
+include ':app'
4
+include ':react-native-view-shot'
5
+project(':react-native-view-shot').projectDir = new File(rootProject.projectDir, '../android')
6
+
7
+include ':react-native-maps'
8
+project(':react-native-maps').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-maps/lib/android')
9
+
10
+include ':gl-react-native'
11
+project(':gl-react-native').projectDir = new File(rootProject.projectDir, '../node_modules/gl-react-native/android')
12
+
13
+include ':react-native-video'
14
+project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android')

BIN
example/broadchurch.mp4 View File


BIN
example/docs/android.png View File


BIN
example/docs/ios.png View File


BIN
example/docs/recursive.gif View File


+ 4
- 0
example/index.android.js View File

@@ -0,0 +1,4 @@
1
+//@flow
2
+import { AppRegistry } from "react-native";
3
+import App from "./App";
4
+AppRegistry.registerComponent("ViewShotExample", () => App);

+ 4
- 0
example/index.ios.js View File

@@ -0,0 +1,4 @@
1
+//@flow
2
+import { AppRegistry } from "react-native";
3
+import App from "./App";
4
+AppRegistry.registerComponent("ViewShotExample", () => App);

+ 4
- 0
example/index.windows.js View File

@@ -0,0 +1,4 @@
1
+//@flow
2
+import { AppRegistry } from "react-native";
3
+import App from "./App";
4
+AppRegistry.registerComponent("ViewShotExample", () => App);

+ 1069
- 0
example/ios/ViewShotExample.xcodeproj/project.pbxproj
File diff suppressed because it is too large
View File


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

@@ -0,0 +1,105 @@
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 = "ViewShotExample.app"
33
+               BlueprintName = "ViewShotExample"
34
+               ReferencedContainer = "container:ViewShotExample.xcodeproj">
35
+            </BuildableReference>
36
+         </BuildActionEntry>
37
+      </BuildActionEntries>
38
+   </BuildAction>
39
+   <TestAction
40
+      buildConfiguration = "Debug"
41
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
42
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
43
+      shouldUseLaunchSchemeArgsEnv = "YES">
44
+      <Testables>
45
+      </Testables>
46
+      <MacroExpansion>
47
+         <BuildableReference
48
+            BuildableIdentifier = "primary"
49
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
50
+            BuildableName = "ViewShotExample.app"
51
+            BlueprintName = "ViewShotExample"
52
+            ReferencedContainer = "container:ViewShotExample.xcodeproj">
53
+         </BuildableReference>
54
+      </MacroExpansion>
55
+      <AdditionalOptions>
56
+      </AdditionalOptions>
57
+   </TestAction>
58
+   <LaunchAction
59
+      buildConfiguration = "Debug"
60
+      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
61
+      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
62
+      launchStyle = "0"
63
+      useCustomWorkingDirectory = "NO"
64
+      ignoresPersistentStateOnLaunch = "NO"
65
+      debugDocumentVersioning = "YES"
66
+      debugServiceExtension = "internal"
67
+      allowLocationSimulation = "YES">
68
+      <BuildableProductRunnable
69
+         runnableDebuggingMode = "0">
70
+         <BuildableReference
71
+            BuildableIdentifier = "primary"
72
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
73
+            BuildableName = "ViewShotExample.app"
74
+            BlueprintName = "ViewShotExample"
75
+            ReferencedContainer = "container:ViewShotExample.xcodeproj">
76
+         </BuildableReference>
77
+      </BuildableProductRunnable>
78
+      <AdditionalOptions>
79
+      </AdditionalOptions>
80
+   </LaunchAction>
81
+   <ProfileAction
82
+      buildConfiguration = "Release"
83
+      shouldUseLaunchSchemeArgsEnv = "YES"
84
+      savedToolIdentifier = ""
85
+      useCustomWorkingDirectory = "NO"
86
+      debugDocumentVersioning = "YES">
87
+      <BuildableProductRunnable
88
+         runnableDebuggingMode = "0">
89
+         <BuildableReference
90
+            BuildableIdentifier = "primary"
91
+            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
92
+            BuildableName = "ViewShotExample.app"
93
+            BlueprintName = "ViewShotExample"
94
+            ReferencedContainer = "container:ViewShotExample.xcodeproj">
95
+         </BuildableReference>
96
+      </BuildableProductRunnable>
97
+   </ProfileAction>
98
+   <AnalyzeAction
99
+      buildConfiguration = "Debug">
100
+   </AnalyzeAction>
101
+   <ArchiveAction
102
+      buildConfiguration = "Release"
103
+      revealArchiveInOrganizer = "YES">
104
+   </ArchiveAction>
105
+</Scheme>

+ 16
- 0
example/ios/ViewShotExample/AppDelegate.h View File

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

+ 39
- 0
example/ios/ViewShotExample/AppDelegate.m View File

@@ -0,0 +1,39 @@
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
+#import <AVFoundation/AVFoundation.h>
15
+
16
+@implementation AppDelegate
17
+
18
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
19
+{
20
+  NSURL *jsCodeLocation;
21
+
22
+  jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];
23
+
24
+  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
25
+                                                      moduleName:@"ViewShotExample"
26
+                                               initialProperties:nil
27
+                                                   launchOptions:launchOptions];
28
+  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
29
+
30
+  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
31
+  UIViewController *rootViewController = [UIViewController new];
32
+  rootViewController.view = rootView;
33
+  self.window.rootViewController = rootViewController;
34
+  [self.window makeKeyAndVisible];
35
+  [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
36
+  return YES;
37
+}
38
+
39
+@end

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

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

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

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

+ 54
- 0
example/ios/ViewShotExample/Info.plist View File

@@ -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
example/ios/ViewShotExample/main.m View File

@@ -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
example/ios/ViewShotExampleTests/Info.plist View File

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

+ 70
- 0
example/ios/ViewShotExampleTests/ViewShotExampleTests.m View File

@@ -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 ViewShotExampleTests : XCTestCase
20
+
21
+@end
22
+
23
+@implementation ViewShotExampleTests
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

+ 24
- 0
example/package.json View File

@@ -0,0 +1,24 @@
1
+{
2
+  "name": "ViewShotExample",
3
+  "version": "0.1.0",
4
+  "private": true,
5
+  "scripts": {
6
+    "start": "react-native start",
7
+    "android": "react-native run-android",
8
+    "ios": "react-native run-ios"
9
+  },
10
+  "dependencies": {
11
+    "gl-react": "^2.2.10",
12
+    "gl-react-native": "^2.47.0",
13
+    "lodash": "4.17.4",
14
+    "react": "16.0.0-alpha.12",
15
+    "react-native": "^0.47.0",
16
+    "react-native-windows": "^0.47.0-rc.4",
17
+    "react-native-view-shot": "file:..",
18
+    "react-native-maps": "^0.16.2",
19
+    "react-native-video": "^2.0.0"
20
+  },
21
+  "devDependencies": {
22
+    "rnpm-plugin-windows": "^0.2.4"
23
+  }
24
+}

+ 89
- 0
example/windows/.gitignore View File

@@ -0,0 +1,89 @@
1
+*AppPackages*
2
+*BundleArtifacts*
3
+*ReactAssets*
4
+
5
+#OS junk files
6
+[Tt]humbs.db
7
+*.DS_Store
8
+
9
+#Visual Studio files
10
+*.[Oo]bj
11
+*.user
12
+*.aps
13
+*.pch
14
+*.vspscc
15
+*.vssscc
16
+*_i.c
17
+*_p.c
18
+*.ncb
19
+*.suo
20
+*.tlb
21
+*.tlh
22
+*.bak
23
+*.[Cc]ache
24
+*.ilk
25
+*.log
26
+*.lib
27
+*.sbr
28
+*.sdf
29
+*.opensdf
30
+*.opendb
31
+*.unsuccessfulbuild
32
+ipch/
33
+[Oo]bj/
34
+[Bb]in
35
+[Dd]ebug*/
36
+[Rr]elease*/
37
+Ankh.NoLoad
38
+
39
+# Visual C++ cache files
40
+ipch/
41
+*.aps
42
+*.ncb
43
+*.opendb
44
+*.opensdf
45
+*.sdf
46
+*.cachefile
47
+*.VC.db
48
+*.VC.VC.opendb
49
+
50
+#MonoDevelop
51
+*.pidb
52
+*.userprefs
53
+
54
+#Tooling
55
+_ReSharper*/
56
+*.resharper
57
+[Tt]est[Rr]esult*
58
+*.sass-cache
59
+
60
+#Project files
61
+[Bb]uild/
62
+
63
+#Subversion files
64
+.svn
65
+
66
+# Office Temp Files
67
+~$*
68
+
69
+# vim Temp Files
70
+*~
71
+
72
+#NuGet
73
+packages/
74
+*.nupkg
75
+
76
+#ncrunch
77
+*ncrunch*
78
+*crunch*.local.xml
79
+
80
+# visual studio database projects
81
+*.dbmdl
82
+
83
+#Test files
84
+*.testsettings
85
+
86
+#Other files
87
+*.DotSettings
88
+.vs/
89
+*project.lock.json

+ 6
- 0
example/windows/ViewShotExample.Net46/App.config View File

@@ -0,0 +1,6 @@
1
+<?xml version="1.0" encoding="utf-8" ?>
2
+<configuration>
3
+    <startup> 
4
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
5
+    </startup>
6
+</configuration>

+ 8
- 0
example/windows/ViewShotExample.Net46/App.xaml View File

@@ -0,0 +1,8 @@
1
+<Application x:Class="ViewShotExample.Net46.App"
2
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4
+             xmlns:local="clr-namespace:ViewShotExample.Net46">
5
+    <Application.Resources>
6
+         
7
+    </Application.Resources>
8
+</Application>

+ 101
- 0
example/windows/ViewShotExample.Net46/App.xaml.cs View File

@@ -0,0 +1,101 @@
1
+using System;
2
+using System.Windows;
3
+using System.Windows.Controls;
4
+using System.Windows.Navigation;
5
+
6
+namespace ViewShotExample.Net46
7
+{
8
+    /// <summary>
9
+    /// Provides application-specific behavior to supplement the default Application class.
10
+    /// </summary>
11
+    public partial class App : Application
12
+    {
13
+        private readonly AppReactPage _reactPage = new AppReactPage();
14
+
15
+        /// <summary>
16
+        /// Initializes the singleton application object.  This is the first line of authored code
17
+        /// executed, and as such is the logical equivalent of main() or WinMain().
18
+        /// </summary>
19
+        public App()
20
+        {
21
+        }
22
+
23
+        /// <summary>
24
+        /// Override method fired prior to the Startup event when the Run method of the Application object is called...
25
+        /// </summary>
26
+        /// <param name="e"></param>
27
+        protected override void OnStartup(StartupEventArgs e)
28
+        {
29
+            base.OnStartup(e);
30
+            OnCreate(e.Args);
31
+        }
32
+
33
+        /// <summary>
34
+        /// Called whenever the app is opened to initialized...
35
+        /// </summary>
36
+        /// <param name="arguments"></param>
37
+        private void OnCreate(string[] arguments)
38
+        {
39
+            var shellWindow = Application.Current.MainWindow;
40
+
41
+            if (shellWindow == null)
42
+            {
43
+                shellWindow = new Window
44
+                {
45
+                    ShowActivated = true,
46
+                    ShowInTaskbar = true,
47
+                    Title = "ViewShotExample.Net46",
48
+                    Height = 768,
49
+                    Width = 1024,
50
+                    WindowStartupLocation = WindowStartupLocation.CenterScreen
51
+                };
52
+
53
+                Application.Current.MainWindow = shellWindow;
54
+            }
55
+
56
+            //Show Window if it is not already active...
57
+            if (!shellWindow.IsLoaded)
58
+            {
59
+                shellWindow.Show();
60
+            }
61
+
62
+            var rootFrame = shellWindow.Content as Frame;
63
+
64
+            // Do not repeat app initialization when the Window already has content,
65
+            // just ensure that the window is active
66
+            if (rootFrame == null)
67
+            {
68
+                _reactPage.OnCreate(arguments);
69
+
70
+                // Create a Frame to act as the navigation context and navigate to the first page
71
+                rootFrame = new Frame();
72
+
73
+                rootFrame.NavigationFailed += OnNavigationFailed;
74
+
75
+                // Place the frame in the current Window
76
+                shellWindow.Content = rootFrame;
77
+            }
78
+
79
+            if (rootFrame.Content == null)
80
+            {
81
+                // When the navigation stack isn't restored navigate to the first page,
82
+                // configuring the new page by passing required information as a navigation
83
+                // parameter
84
+                rootFrame.Content = _reactPage;
85
+            }
86
+
87
+            // Ensure the current window is active
88
+            shellWindow.Activate();
89
+        }
90
+
91
+        /// <summary>
92
+        /// Invoked when Navigation to a certain page fails
93
+        /// </summary>
94
+        /// <param name="sender">The Frame which failed navigation</param>
95
+        /// <param name="e">Details about the navigation failure</param>
96
+        private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
97
+        {
98
+            throw new Exception("Failed to load Page...");
99
+        }
100
+    }
101
+}

+ 32
- 0
example/windows/ViewShotExample.Net46/AppReactPage.cs View File

@@ -0,0 +1,32 @@
1
+using ReactNative;
2
+using ReactNative.Bridge;
3
+using ReactNative.Modules.Core;
4
+using ReactNative.Shell;
5
+using ReactNative.UIManager;
6
+using System;
7
+using System.Collections.Generic;
8
+using ReactNativeVideo;
9
+using RNViewShot;
10
+
11
+namespace ViewShotExample.Net46
12
+{
13
+    internal class AppReactPage : ReactPage
14
+    {
15
+        public override string MainComponentName => "ViewShotExample";
16
+
17
+        public override List<IReactPackage> Packages => new List<IReactPackage>
18
+        {
19
+            new MainReactPackage(),
20
+            new RNViewShotPackage(),
21
+            new ReactVideoPackage(),
22
+        };
23
+
24
+        public override bool UseDeveloperSupport
25
+        {
26
+            get
27
+            {
28
+                return true;
29
+            }
30
+        }
31
+    }
32
+}

+ 55
- 0
example/windows/ViewShotExample.Net46/Properties/AssemblyInfo.cs View File

@@ -0,0 +1,55 @@
1
+using System.Reflection;
2
+using System.Resources;
3
+using System.Runtime.CompilerServices;
4
+using System.Runtime.InteropServices;
5
+using System.Windows;
6
+
7
+// General Information about an assembly is controlled through the following 
8
+// set of attributes. Change these attribute values to modify the information
9
+// associated with an assembly.
10
+[assembly: AssemblyTitle("ViewShotExample.Net46")]
11
+[assembly: AssemblyDescription("")]
12
+[assembly: AssemblyConfiguration("")]
13
+[assembly: AssemblyCompany("")]
14
+[assembly: AssemblyProduct("ViewShotExample.Net46")]
15
+[assembly: AssemblyCopyright("Copyright ©  2017")]
16
+[assembly: AssemblyTrademark("")]
17
+[assembly: AssemblyCulture("")]
18
+
19
+// Setting ComVisible to false makes the types in this assembly not visible 
20
+// to COM components.  If you need to access a type in this assembly from 
21
+// COM, set the ComVisible attribute to true on that type.
22
+[assembly: ComVisible(false)]
23
+
24
+//In order to begin building localizable applications, set 
25
+//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
26
+//inside a <PropertyGroup>.  For example, if you are using US english
27
+//in your source files, set the <UICulture> to en-US.  Then uncomment
28
+//the NeutralResourceLanguage attribute below.  Update the "en-US" in
29
+//the line below to match the UICulture setting in the project file.
30
+
31
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
32
+
33
+
34
+[assembly: ThemeInfo(
35
+    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
36
+                                     //(used if a resource is not found in the page, 
37
+                                     // or application resource dictionaries)
38
+    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
39
+                                              //(used if a resource is not found in the page, 
40
+                                              // app, or any theme specific resource dictionaries)
41
+)]
42
+
43
+
44
+// Version information for an assembly consists of the following four values:
45
+//
46
+//      Major Version
47
+//      Minor Version 
48
+//      Build Number
49
+//      Revision
50
+//
51
+// You can specify all the values or you can default the Build and Revision Numbers 
52
+// by using the '*' as shown below:
53
+// [assembly: AssemblyVersion("1.0.*")]
54
+[assembly: AssemblyVersion("1.0.0.0")]
55
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 71
- 0
example/windows/ViewShotExample.Net46/Properties/Resources.Designer.cs View File

@@ -0,0 +1,71 @@
1
+//------------------------------------------------------------------------------
2
+// <auto-generated>
3
+//     This code was generated by a tool.
4
+//     Runtime Version:4.0.30319.42000
5
+//
6
+//     Changes to this file may cause incorrect behavior and will be lost if
7
+//     the code is regenerated.
8
+// </auto-generated>
9
+//------------------------------------------------------------------------------
10
+
11
+namespace ViewShotExample.Net46.Properties
12
+{
13
+
14
+
15
+    /// <summary>
16
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
17
+    /// </summary>
18
+    // This class was auto-generated by the StronglyTypedResourceBuilder
19
+    // class via a tool like ResGen or Visual Studio.
20
+    // To add or remove a member, edit your .ResX file then rerun ResGen
21
+    // with the /str option, or rebuild your VS project.
22
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25
+    internal class Resources
26
+    {
27
+
28
+        private static global::System.Resources.ResourceManager resourceMan;
29
+
30
+        private static global::System.Globalization.CultureInfo resourceCulture;
31
+
32
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33
+        internal Resources()
34
+        {
35
+        }
36
+
37
+        /// <summary>
38
+        ///   Returns the cached ResourceManager instance used by this class.
39
+        /// </summary>
40
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41
+        internal static global::System.Resources.ResourceManager ResourceManager
42
+        {
43
+            get
44
+            {
45
+                if ((resourceMan == null))
46
+                {
47
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ViewShotExample.Net46.Properties.Resources", typeof(Resources).Assembly);
48
+                    resourceMan = temp;
49
+                }
50
+                return resourceMan;
51
+            }
52
+        }
53
+
54
+        /// <summary>
55
+        ///   Overrides the current thread's CurrentUICulture property for all
56
+        ///   resource lookups using this strongly typed resource class.
57
+        /// </summary>
58
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59
+        internal static global::System.Globalization.CultureInfo Culture
60
+        {
61
+            get
62
+            {
63
+                return resourceCulture;
64
+            }
65
+            set
66
+            {
67
+                resourceCulture = value;
68
+            }
69
+        }
70
+    }
71
+}

+ 117
- 0
example/windows/ViewShotExample.Net46/Properties/Resources.resx View File

@@ -0,0 +1,117 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<root>
3
+  <!-- 
4
+    Microsoft ResX Schema 
5
+    
6
+    Version 2.0
7
+    
8
+    The primary goals of this format is to allow a simple XML format 
9
+    that is mostly human readable. The generation and parsing of the 
10
+    various data types are done through the TypeConverter classes 
11
+    associated with the data types.
12
+    
13
+    Example:
14
+    
15
+    ... ado.net/XML headers & schema ...
16
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
17
+    <resheader name="version">2.0</resheader>
18
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
24
+    </data>
25
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27
+        <comment>This is a comment</comment>
28
+    </data>
29
+                
30
+    There are any number of "resheader" rows that contain simple 
31
+    name/value pairs.
32
+    
33
+    Each data row contains a name, and value. The row also contains a 
34
+    type or mimetype. Type corresponds to a .NET class that support 
35
+    text/value conversion through the TypeConverter architecture. 
36
+    Classes that don't support this are serialized and stored with the 
37
+    mimetype set.
38
+    
39
+    The mimetype is used for serialized objects, and tells the 
40
+    ResXResourceReader how to depersist the object. This is currently not 
41
+    extensible. For a given mimetype the value must be set accordingly:
42
+    
43
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
44
+    that the ResXResourceWriter will generate, however the reader can 
45
+    read any of the formats listed below.
46
+    
47
+    mimetype: application/x-microsoft.net.object.binary.base64
48
+    value   : The object must be serialized with 
49
+            : System.Serialization.Formatters.Binary.BinaryFormatter
50
+            : and then encoded with base64 encoding.
51
+    
52
+    mimetype: application/x-microsoft.net.object.soap.base64
53
+    value   : The object must be serialized with 
54
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55
+            : and then encoded with base64 encoding.
56
+
57
+    mimetype: application/x-microsoft.net.object.bytearray.base64
58
+    value   : The object must be serialized into a byte array 
59
+            : using a System.ComponentModel.TypeConverter
60
+            : and then encoded with base64 encoding.
61
+    -->
62
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
63
+    <xsd:element name="root" msdata:IsDataSet="true">
64
+      <xsd:complexType>
65
+        <xsd:choice maxOccurs="unbounded">
66
+          <xsd:element name="metadata">
67
+            <xsd:complexType>
68
+              <xsd:sequence>
69
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
70
+              </xsd:sequence>
71
+              <xsd:attribute name="name" type="xsd:string" />
72
+              <xsd:attribute name="type" type="xsd:string" />
73
+              <xsd:attribute name="mimetype" type="xsd:string" />
74
+            </xsd:complexType>
75
+          </xsd:element>
76
+          <xsd:element name="assembly">
77
+            <xsd:complexType>
78
+              <xsd:attribute name="alias" type="xsd:string" />
79
+              <xsd:attribute name="name" type="xsd:string" />
80
+            </xsd:complexType>
81
+          </xsd:element>
82
+          <xsd:element name="data">
83
+            <xsd:complexType>
84
+              <xsd:sequence>
85
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
86
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
87
+              </xsd:sequence>
88
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
89
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
90
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
91
+            </xsd:complexType>
92
+          </xsd:element>
93
+          <xsd:element name="resheader">
94
+            <xsd:complexType>
95
+              <xsd:sequence>
96
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
97
+              </xsd:sequence>
98
+              <xsd:attribute name="name" type="xsd:string" use="required" />
99
+            </xsd:complexType>
100
+          </xsd:element>
101
+        </xsd:choice>
102
+      </xsd:complexType>
103
+    </xsd:element>
104
+  </xsd:schema>
105
+  <resheader name="resmimetype">
106
+    <value>text/microsoft-resx</value>
107
+  </resheader>
108
+  <resheader name="version">
109
+    <value>2.0</value>
110
+  </resheader>
111
+  <resheader name="reader">
112
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
113
+  </resheader>
114
+  <resheader name="writer">
115
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116
+  </resheader>
117
+</root>

+ 30
- 0
example/windows/ViewShotExample.Net46/Properties/Settings.Designer.cs View File

@@ -0,0 +1,30 @@
1
+//------------------------------------------------------------------------------
2
+// <auto-generated>
3
+//     This code was generated by a tool.
4
+//     Runtime Version:4.0.30319.42000
5
+//
6
+//     Changes to this file may cause incorrect behavior and will be lost if
7
+//     the code is regenerated.
8
+// </auto-generated>
9
+//------------------------------------------------------------------------------
10
+
11
+namespace ViewShotExample.Net46.Properties
12
+{
13
+
14
+
15
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18
+    {
19
+
20
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21
+
22
+        public static Settings Default
23
+        {
24
+            get
25
+            {
26
+                return defaultInstance;
27
+            }
28
+        }
29
+    }
30
+}

+ 7
- 0
example/windows/ViewShotExample.Net46/Properties/Settings.settings View File

@@ -0,0 +1,7 @@
1
+<?xml version='1.0' encoding='utf-8'?>
2
+<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
3
+  <Profiles>
4
+    <Profile Name="(Default)" />
5
+  </Profiles>
6
+  <Settings />
7
+</SettingsFile>

+ 130
- 0
example/windows/ViewShotExample.Net46/ViewShotExample.Net46.csproj View File

@@ -0,0 +1,130 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
+  <PropertyGroup>
5
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
+    <ProjectGuid>{2A3E5645-CC81-4577-A1AC-397A09B76546}</ProjectGuid>
8
+    <OutputType>WinExe</OutputType>
9
+    <AppDesignerFolder>Properties</AppDesignerFolder>
10
+    <RootNamespace>ViewShotExample.Net46</RootNamespace>
11
+    <AssemblyName>ViewShotExample.Net46</AssemblyName>
12
+    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
13
+    <FileAlignment>512</FileAlignment>
14
+    <ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
15
+    <WarningLevel>4</WarningLevel>
16
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
17
+  </PropertyGroup>
18
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
19
+    <DebugSymbols>true</DebugSymbols>
20
+    <OutputPath>bin\x86\Debug\</OutputPath>
21
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
22
+    <DebugType>full</DebugType>
23
+    <PlatformTarget>x86</PlatformTarget>
24
+    <ErrorReport>prompt</ErrorReport>
25
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
26
+    <Prefer32Bit>true</Prefer32Bit>
27
+  </PropertyGroup>
28
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
29
+    <OutputPath>bin\x86\Release\</OutputPath>
30
+    <DefineConstants>TRACE</DefineConstants>
31
+    <Optimize>true</Optimize>
32
+    <DebugType>pdbonly</DebugType>
33
+    <PlatformTarget>x86</PlatformTarget>
34
+    <ErrorReport>prompt</ErrorReport>
35
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
36
+    <Prefer32Bit>true</Prefer32Bit>
37
+  </PropertyGroup>
38
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
39
+    <DebugSymbols>true</DebugSymbols>
40
+    <OutputPath>bin\x64\Debug\</OutputPath>
41
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
42
+    <DebugType>full</DebugType>
43
+    <PlatformTarget>x64</PlatformTarget>
44
+    <ErrorReport>prompt</ErrorReport>
45
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
46
+    <Prefer32Bit>true</Prefer32Bit>
47
+  </PropertyGroup>
48
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
49
+    <OutputPath>bin\x64\Release\</OutputPath>
50
+    <DefineConstants>TRACE</DefineConstants>
51
+    <Optimize>true</Optimize>
52
+    <DebugType>pdbonly</DebugType>
53
+    <PlatformTarget>x64</PlatformTarget>
54
+    <ErrorReport>prompt</ErrorReport>
55
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
56
+    <Prefer32Bit>true</Prefer32Bit>
57
+  </PropertyGroup>
58
+  <ItemGroup>
59
+    <Reference Include="System" />
60
+    <Reference Include="System.Data" />
61
+    <Reference Include="System.Xml" />
62
+    <Reference Include="Microsoft.CSharp" />
63
+    <Reference Include="System.Core" />
64
+    <Reference Include="System.Xml.Linq" />
65
+    <Reference Include="System.Data.DataSetExtensions" />
66
+    <Reference Include="System.Net.Http" />
67
+    <Reference Include="System.Xaml">
68
+      <RequiredTargetFramework>4.0</RequiredTargetFramework>
69
+    </Reference>
70
+    <Reference Include="WindowsBase" />
71
+    <Reference Include="PresentationCore" />
72
+    <Reference Include="PresentationFramework" />
73
+  </ItemGroup>
74
+  <ItemGroup>
75
+    <ApplicationDefinition Include="App.xaml">
76
+      <Generator>MSBuild:Compile</Generator>
77
+      <SubType>Designer</SubType>
78
+    </ApplicationDefinition>
79
+    <Compile Include="App.xaml.cs">
80
+      <DependentUpon>App.xaml</DependentUpon>
81
+      <SubType>Code</SubType>
82
+    </Compile>
83
+    <Compile Include="AppReactPage.cs" />
84
+  </ItemGroup>
85
+  <ItemGroup>
86
+    <Compile Include="Properties\AssemblyInfo.cs">
87
+      <SubType>Code</SubType>
88
+    </Compile>
89
+    <Compile Include="Properties\Resources.Designer.cs">
90
+      <AutoGen>True</AutoGen>
91
+      <DesignTime>True</DesignTime>
92
+      <DependentUpon>Resources.resx</DependentUpon>
93
+    </Compile>
94
+    <Compile Include="Properties\Settings.Designer.cs">
95
+      <AutoGen>True</AutoGen>
96
+      <DependentUpon>Settings.settings</DependentUpon>
97
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
98
+    </Compile>
99
+    <EmbeddedResource Include="Properties\Resources.resx">
100
+      <Generator>ResXFileCodeGenerator</Generator>
101
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
102
+    </EmbeddedResource>
103
+    <None Include="Properties\Settings.settings">
104
+      <Generator>SettingsSingleFileGenerator</Generator>
105
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
106
+    </None>
107
+    <AppDesigner Include="Properties\" />
108
+  </ItemGroup>
109
+  <ItemGroup>
110
+    <None Include="App.config" />
111
+  </ItemGroup>
112
+  <ItemGroup>
113
+    <ProjectReference Include="..\..\node_modules\react-native-view-shot\windows\RNViewShot.Net46\RNViewShot.Net46.csproj">
114
+      <Project>{1dd45d00-ddf4-43b4-ab28-f98e6dc325b5}</Project>
115
+      <Name>RNViewShot.Net46</Name>
116
+    </ProjectReference>
117
+    <ProjectReference Include="..\..\node_modules\react-native-windows\ReactWindows\ReactNative.Net46\ReactNative.Net46.csproj">
118
+      <Project>{22cbff9c-fe36-43e8-a246-266c7635e662}</Project>
119
+      <Name>ReactNative.Net46</Name>
120
+    </ProjectReference>
121
+  </ItemGroup>
122
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
123
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
124
+       Other similar extension points exist, see Microsoft.Common.targets.
125
+  <Target Name="BeforeBuild">
126
+  </Target>
127
+  <Target Name="AfterBuild">
128
+  </Target>
129
+  -->
130
+</Project>

+ 209
- 0
example/windows/ViewShotExample.sln View File

@@ -0,0 +1,209 @@
1
+Microsoft Visual Studio Solution File, Format Version 12.00
2
+# Visual Studio 14
3
+VisualStudioVersion = 14.0.25420.1
4
+MinimumVisualStudioVersion = 10.0.40219.1
5
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ViewShotExample", "ViewShotExample\ViewShotExample.csproj", "{385046CD-7621-4286-9E49-4CA26B4A9C23}"
6
+EndProject
7
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChakraBridge", "..\node_modules\react-native-windows\ReactWindows\ChakraBridge\ChakraBridge.vcxproj", "{4B72C796-16D5-4E3A-81C0-3E36F531E578}"
8
+EndProject
9
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RNViewShot", "..\node_modules\react-native-view-shot\windows\RNViewShot\RNViewShot.csproj", "{391A35D0-FEBA-11E6-9171-BD5177E581B7}"
10
+EndProject
11
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactNative", "..\node_modules\react-native-windows\ReactWindows\ReactNative\ReactNative.csproj", "{C7673AD5-E3AA-468C-A5FD-FA38154E205C}"
12
+EndProject
13
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "ReactNative.Shared", "..\node_modules\react-native-windows\ReactWindows\ReactNative.Shared\ReactNative.Shared.shproj", "{EEA8B852-4D07-48E1-8294-A21AB5909FE5}"
14
+EndProject
15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactNativeVideo", "..\node_modules\react-native-video\windows\ReactNativeVideo\ReactNativeVideo.csproj", "{E8F5F57F-757E-4237-AD23-F7A8755427CD}"
16
+EndProject
17
+Global
18
+	GlobalSection(SharedMSBuildProjectFiles) = preSolution
19
+		..\node_modules\react-native-windows\ReactWindows\ReactNative.Shared\ReactNative.Shared.projitems*{c7673ad5-e3aa-468c-a5fd-fa38154e205c}*SharedItemsImports = 4
20
+		..\node_modules\react-native-windows\ReactWindows\ReactNative.Shared\ReactNative.Shared.projitems*{eea8b852-4d07-48e1-8294-a21ab5909fe5}*SharedItemsImports = 13
21
+	EndGlobalSection
22
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
23
+		Debug|ARM = Debug|ARM
24
+		Debug|x64 = Debug|x64
25
+		Debug|x86 = Debug|x86
26
+		DebugBundle|ARM = DebugBundle|ARM
27
+		DebugBundle|x64 = DebugBundle|x64
28
+		DebugBundle|x86 = DebugBundle|x86
29
+		Development|ARM = Development|ARM
30
+		Development|x64 = Development|x64
31
+		Development|x86 = Development|x86
32
+		Release|ARM = Release|ARM
33
+		Release|x64 = Release|x64
34
+		Release|x86 = Release|x86
35
+		ReleaseBundle|ARM = ReleaseBundle|ARM
36
+		ReleaseBundle|x64 = ReleaseBundle|x64
37
+		ReleaseBundle|x86 = ReleaseBundle|x86
38
+	EndGlobalSection
39
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
40
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|ARM.ActiveCfg = Debug|ARM
41
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|ARM.Build.0 = Debug|ARM
42
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|ARM.Deploy.0 = Debug|ARM
43
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x64.ActiveCfg = Debug|x64
44
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x64.Build.0 = Debug|x64
45
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x64.Deploy.0 = Debug|x64
46
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x86.ActiveCfg = Debug|x86
47
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x86.Build.0 = Debug|x86
48
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Debug|x86.Deploy.0 = Debug|x86
49
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|ARM.ActiveCfg = DebugBundle|ARM
50
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|ARM.Build.0 = DebugBundle|ARM
51
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|ARM.Deploy.0 = DebugBundle|ARM
52
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x64.ActiveCfg = DebugBundle|x64
53
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x64.Build.0 = DebugBundle|x64
54
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x64.Deploy.0 = DebugBundle|x64
55
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x86.ActiveCfg = DebugBundle|x86
56
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x86.Build.0 = DebugBundle|x86
57
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.DebugBundle|x86.Deploy.0 = DebugBundle|x86
58
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|ARM.ActiveCfg = DebugBundle|ARM
59
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|ARM.Build.0 = DebugBundle|ARM
60
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|ARM.Deploy.0 = DebugBundle|ARM
61
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x64.ActiveCfg = DebugBundle|x64
62
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x64.Build.0 = DebugBundle|x64
63
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x64.Deploy.0 = DebugBundle|x64
64
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x86.ActiveCfg = DebugBundle|x86
65
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x86.Build.0 = DebugBundle|x86
66
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Development|x86.Deploy.0 = DebugBundle|x86
67
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|ARM.ActiveCfg = Release|ARM
68
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|ARM.Build.0 = Release|ARM
69
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|ARM.Deploy.0 = Release|ARM
70
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x64.ActiveCfg = Release|x64
71
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x64.Build.0 = Release|x64
72
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x64.Deploy.0 = Release|x64
73
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x86.ActiveCfg = Release|x86
74
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x86.Build.0 = Release|x86
75
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.Release|x86.Deploy.0 = Release|x86
76
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|ARM.ActiveCfg = ReleaseBundle|ARM
77
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|ARM.Build.0 = ReleaseBundle|ARM
78
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|ARM.Deploy.0 = ReleaseBundle|ARM
79
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x64.ActiveCfg = ReleaseBundle|x64
80
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x64.Build.0 = ReleaseBundle|x64
81
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x64.Deploy.0 = ReleaseBundle|x64
82
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x86.ActiveCfg = ReleaseBundle|x86
83
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x86.Build.0 = ReleaseBundle|x86
84
+		{385046CD-7621-4286-9E49-4CA26B4A9C23}.ReleaseBundle|x86.Deploy.0 = ReleaseBundle|x86
85
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|ARM.ActiveCfg = Debug|ARM
86
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|ARM.Build.0 = Debug|ARM
87
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x64.ActiveCfg = Debug|x64
88
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x64.Build.0 = Debug|x64
89
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x86.ActiveCfg = Debug|Win32
90
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Debug|x86.Build.0 = Debug|Win32
91
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|ARM.ActiveCfg = Debug|ARM
92
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|ARM.Build.0 = Debug|ARM
93
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x64.ActiveCfg = Debug|x64
94
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x64.Build.0 = Debug|x64
95
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x86.ActiveCfg = Debug|Win32
96
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.DebugBundle|x86.Build.0 = Debug|Win32
97
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|ARM.ActiveCfg = Debug|ARM
98
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|ARM.Build.0 = Debug|ARM
99
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|x64.ActiveCfg = Debug|x64
100
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|x64.Build.0 = Debug|x64
101
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|x86.ActiveCfg = Debug|Win32
102
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Development|x86.Build.0 = Debug|Win32
103
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|ARM.ActiveCfg = Release|ARM
104
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|ARM.Build.0 = Release|ARM
105
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x64.ActiveCfg = Release|x64
106
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x64.Build.0 = Release|x64
107
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x86.ActiveCfg = Release|Win32
108
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.Release|x86.Build.0 = Release|Win32
109
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
110
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|ARM.Build.0 = Release|ARM
111
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x64.ActiveCfg = Release|x64
112
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x64.Build.0 = Release|x64
113
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x86.ActiveCfg = Release|Win32
114
+		{4B72C796-16D5-4E3A-81C0-3E36F531E578}.ReleaseBundle|x86.Build.0 = Release|Win32
115
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|ARM.ActiveCfg = Debug|ARM
116
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|ARM.Build.0 = Debug|ARM
117
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|x64.ActiveCfg = Debug|x64
118
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|x64.Build.0 = Debug|x64
119
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|x86.ActiveCfg = Debug|x86
120
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Debug|x86.Build.0 = Debug|x86
121
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|ARM.ActiveCfg = Debug|ARM
122
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|ARM.Build.0 = Debug|ARM
123
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|x64.ActiveCfg = Debug|x64
124
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|x64.Build.0 = Debug|x64
125
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|x86.ActiveCfg = Debug|x86
126
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.DebugBundle|x86.Build.0 = Debug|x86
127
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|ARM.ActiveCfg = Development|ARM
128
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|ARM.Build.0 = Development|ARM
129
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|x64.ActiveCfg = Development|x64
130
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|x64.Build.0 = Development|x64
131
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|x86.ActiveCfg = Development|x86
132
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Development|x86.Build.0 = Development|x86
133
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|ARM.ActiveCfg = Release|ARM
134
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|ARM.Build.0 = Release|ARM
135
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|x64.ActiveCfg = Release|x64
136
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|x64.Build.0 = Release|x64
137
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|x86.ActiveCfg = Release|x86
138
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.Release|x86.Build.0 = Release|x86
139
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
140
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|ARM.Build.0 = Release|ARM
141
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|x64.ActiveCfg = Release|x64
142
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|x64.Build.0 = Release|x64
143
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|x86.ActiveCfg = Release|x86
144
+		{391A35D0-FEBA-11E6-9171-BD5177E581B7}.ReleaseBundle|x86.Build.0 = Release|x86
145
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|ARM.ActiveCfg = Debug|ARM
146
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|ARM.Build.0 = Debug|ARM
147
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x64.ActiveCfg = Debug|x64
148
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x64.Build.0 = Debug|x64
149
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x86.ActiveCfg = Debug|x86
150
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Debug|x86.Build.0 = Debug|x86
151
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|ARM.ActiveCfg = Debug|ARM
152
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|ARM.Build.0 = Debug|ARM
153
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x64.ActiveCfg = Debug|x64
154
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x64.Build.0 = Debug|x64
155
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x86.ActiveCfg = Debug|x86
156
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.DebugBundle|x86.Build.0 = Debug|x86
157
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|ARM.ActiveCfg = Debug|ARM
158
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|ARM.Build.0 = Debug|ARM
159
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|x64.ActiveCfg = Debug|x64
160
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|x64.Build.0 = Debug|x64
161
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|x86.ActiveCfg = Debug|x86
162
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Development|x86.Build.0 = Debug|x86
163
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|ARM.ActiveCfg = Release|ARM
164
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|ARM.Build.0 = Release|ARM
165
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x64.ActiveCfg = Release|x64
166
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x64.Build.0 = Release|x64
167
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x86.ActiveCfg = Release|x86
168
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.Release|x86.Build.0 = Release|x86
169
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
170
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|ARM.Build.0 = Release|ARM
171
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x64.ActiveCfg = Release|x64
172
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x64.Build.0 = Release|x64
173
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x86.ActiveCfg = Release|x86
174
+		{C7673AD5-E3AA-468C-A5FD-FA38154E205C}.ReleaseBundle|x86.Build.0 = Release|x86
175
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|ARM.ActiveCfg = Debug|ARM
176
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|ARM.Build.0 = Debug|ARM
177
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x64.ActiveCfg = Debug|x64
178
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x64.Build.0 = Debug|x64
179
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x86.ActiveCfg = Debug|x86
180
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Debug|x86.Build.0 = Debug|x86
181
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|ARM.ActiveCfg = Debug|ARM
182
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|ARM.Build.0 = Debug|ARM
183
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x64.ActiveCfg = Debug|x64
184
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x64.Build.0 = Debug|x64
185
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x86.ActiveCfg = Debug|x86
186
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.DebugBundle|x86.Build.0 = Debug|x86
187
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|ARM.ActiveCfg = Debug|ARM
188
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|ARM.Build.0 = Debug|ARM
189
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|x64.ActiveCfg = Debug|x64
190
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|x64.Build.0 = Debug|x64
191
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|x86.ActiveCfg = Debug|x86
192
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Development|x86.Build.0 = Debug|x86
193
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|ARM.ActiveCfg = Release|ARM
194
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|ARM.Build.0 = Release|ARM
195
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x64.ActiveCfg = Release|x64
196
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x64.Build.0 = Release|x64
197
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x86.ActiveCfg = Release|x86
198
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.Release|x86.Build.0 = Release|x86
199
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|ARM.ActiveCfg = Release|ARM
200
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|ARM.Build.0 = Release|ARM
201
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x64.ActiveCfg = Release|x64
202
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x64.Build.0 = Release|x64
203
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x86.ActiveCfg = Release|x86
204
+		{E8F5F57F-757E-4237-AD23-F7A8755427CD}.ReleaseBundle|x86.Build.0 = Release|x86
205
+	EndGlobalSection
206
+	GlobalSection(SolutionProperties) = preSolution
207
+		HideSolutionNode = FALSE
208
+	EndGlobalSection
209
+EndGlobal

+ 8
- 0
example/windows/ViewShotExample/App.xaml View File

@@ -0,0 +1,8 @@
1
+<Application
2
+    x:Class="ViewShotExample.App"
3
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5
+    xmlns:local="using:ViewShotExample"
6
+    RequestedTheme="Light">
7
+
8
+</Application>

+ 147
- 0
example/windows/ViewShotExample/App.xaml.cs View File

@@ -0,0 +1,147 @@
1
+using ReactNative;
2
+using ReactNative.Modules.Launch;
3
+using System;
4
+using Windows.ApplicationModel;
5
+using Windows.ApplicationModel.Activation;
6
+using Windows.UI.Core;
7
+using Windows.UI.Xaml;
8
+using Windows.UI.Xaml.Controls;
9
+using Windows.UI.Xaml.Navigation;
10
+
11
+namespace ViewShotExample
12
+{
13
+    /// <summary>
14
+    /// Provides application-specific behavior to supplement the default Application class.
15
+    /// </summary>
16
+    sealed partial class App : Application
17
+    {
18
+        private readonly ReactPage _reactPage;
19
+
20
+        /// <summary>
21
+        /// Initializes the singleton application object.  This is the first line of authored code
22
+        /// executed, and as such is the logical equivalent of main() or WinMain().
23
+        /// </summary>
24
+        public App()
25
+        {
26
+            this.InitializeComponent();
27
+            this.Suspending += OnSuspending;
28
+            this.Resuming += OnResuming;
29
+
30
+            _reactPage = new MainPage();
31
+        }
32
+
33
+        /// <summary>
34
+        /// Invoked when the application is launched normally by the end user.  Other entry points
35
+        /// will be used such as when the application is launched to open a specific file.
36
+        /// </summary>
37
+        /// <param name="e">Details about the launch request and process.</param>
38
+        protected override void OnLaunched(LaunchActivatedEventArgs e)
39
+        {
40
+            base.OnLaunched(e);
41
+            OnCreate(e.Arguments);
42
+        }
43
+
44
+        /// <summary>
45
+        /// Invoked when the application is activated.
46
+        /// </summary>
47
+        /// <param name="args">The activated event arguments.</param>
48
+        protected override void OnActivated(IActivatedEventArgs args)
49
+        {
50
+            base.OnActivated(args);
51
+
52
+            switch (args.Kind)
53
+            {
54
+                case ActivationKind.Protocol:
55
+                case ActivationKind.ProtocolForResults:
56
+                    var protocolArgs = (IProtocolActivatedEventArgs)args;
57
+                    LauncherModule.SetActivatedUrl(protocolArgs.Uri.AbsoluteUri);
58
+                    break;
59
+            }
60
+
61
+            if (args.PreviousExecutionState != ApplicationExecutionState.Running &&
62
+                args.PreviousExecutionState != ApplicationExecutionState.Suspended)
63
+            {
64
+                OnCreate(null);
65
+            }
66
+        }
67
+
68
+        /// <summary>
69
+        /// Called whenever the app is opened to initia
70
+        /// </summary>
71
+        /// <param name="arguments"></param>
72
+        private void OnCreate(string arguments)
73
+        {
74
+            _reactPage.OnResume(Exit);
75
+
76
+#if DEBUG
77
+            if (System.Diagnostics.Debugger.IsAttached)
78
+            {
79
+                this.DebugSettings.EnableFrameRateCounter = true;
80
+            }
81
+
82
+            SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility =
83
+                AppViewBackButtonVisibility.Visible;
84
+#endif
85
+
86
+            Frame rootFrame = Window.Current.Content as Frame;
87
+
88
+            // Do not repeat app initialization when the Window already has content,
89
+            // just ensure that the window is active
90
+            if (rootFrame == null)
91
+            {
92
+                _reactPage.OnCreate(arguments);
93
+
94
+                // Create a Frame to act as the navigation context and navigate to the first page
95
+                rootFrame = new Frame();
96
+
97
+                rootFrame.NavigationFailed += OnNavigationFailed;
98
+
99
+                // Place the frame in the current Window
100
+                Window.Current.Content = rootFrame;
101
+            }
102
+
103
+            if (rootFrame.Content == null)
104
+            {
105
+                // When the navigation stack isn't restored navigate to the first page,
106
+                // configuring the new page by passing required information as a navigation
107
+                // parameter
108
+                rootFrame.Content = _reactPage;
109
+            }
110
+
111
+            // Ensure the current window is active
112
+            Window.Current.Activate();
113
+        }
114
+
115
+        /// <summary>
116
+        /// Invoked when Navigation to a certain page fails
117
+        /// </summary>
118
+        /// <param name="sender">The Frame which failed navigation</param>
119
+        /// <param name="e">Details about the navigation failure</param>
120
+        private void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
121
+        {
122
+            throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
123
+        }
124
+
125
+        /// <summary>
126
+        /// Invoked when application execution is being suspended.  Application state is saved
127
+        /// without knowing whether the application will be terminated or resumed with the contents
128
+        /// of memory still intact.
129
+        /// </summary>
130
+        /// <param name="sender">The source of the suspend request.</param>
131
+        /// <param name="e">Details about the suspend request.</param>
132
+        private void OnSuspending(object sender, SuspendingEventArgs e)
133
+        {
134
+            _reactPage.OnSuspend();
135
+        }
136
+
137
+        /// <summary>
138
+        /// Invoked when application execution is being resumed.
139
+        /// </summary>
140
+        /// <param name="sender">The source of the resume request.</param>
141
+        /// <param name="e">Details about the resume request.</param>
142
+        private void OnResuming(object sender, object e)
143
+        {
144
+            _reactPage.OnResume(Exit);
145
+        }
146
+    }
147
+}

BIN
example/windows/ViewShotExample/Assets/LockScreenLogo.scale-200.png View File


BIN
example/windows/ViewShotExample/Assets/SplashScreen.scale-200.png View File


BIN
example/windows/ViewShotExample/Assets/Square150x150Logo.scale-200.png View File


BIN
example/windows/ViewShotExample/Assets/Square44x44Logo.scale-200.png View File


BIN
example/windows/ViewShotExample/Assets/Square44x44Logo.targetsize-24_altform-unplated.png View File


BIN
example/windows/ViewShotExample/Assets/StoreLogo.png View File


BIN
example/windows/ViewShotExample/Assets/Wide310x150Logo.scale-200.png View File


+ 56
- 0
example/windows/ViewShotExample/MainPage.cs View File

@@ -0,0 +1,56 @@
1
+using ReactNative;
2
+using ReactNative.Modules.Core;
3
+using ReactNative.Shell;
4
+using RNViewShot;
5
+using System.Collections.Generic;
6
+using ReactNativeVideo;
7
+
8
+namespace ViewShotExample
9
+{
10
+    class MainPage : ReactPage
11
+    {
12
+        public override string MainComponentName
13
+        {
14
+            get
15
+            {
16
+                return "ViewShotExample";
17
+            }
18
+        }
19
+
20
+#if BUNDLE
21
+        public override string JavaScriptBundleFile
22
+        {
23
+            get
24
+            {
25
+                return "ms-appx:///ReactAssets/index.windows.bundle";
26
+            }
27
+        }
28
+#endif
29
+
30
+        public override List<IReactPackage> Packages
31
+        {
32
+            get
33
+            {
34
+                return new List<IReactPackage>
35
+                {
36
+                    new MainReactPackage(),
37
+                    new RNViewShotPackage(),
38
+                    new ReactVideoPackage(),
39
+                };
40
+            }
41
+        }
42
+
43
+        public override bool UseDeveloperSupport
44
+        {
45
+            get
46
+            {
47
+#if !BUNDLE || DEBUG
48
+                return true;
49
+#else
50
+                return false;
51
+#endif
52
+            }
53
+        }
54
+    }
55
+
56
+}

+ 49
- 0
example/windows/ViewShotExample/Package.appxmanifest View File

@@ -0,0 +1,49 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+
3
+<Package
4
+  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
5
+  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
6
+  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
7
+  IgnorableNamespaces="uap mp">
8
+
9
+  <Identity
10
+    Name="f9dbffb7-9062-4d4a-b665-0131622ae226"
11
+    Publisher="CN=publisher"
12
+    Version="1.0.0.0" />
13
+
14
+  <mp:PhoneIdentity PhoneProductId="f9dbffb7-9062-4d4a-b665-0131622ae226" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
15
+
16
+  <Properties>
17
+    <DisplayName>ViewShotExample</DisplayName>
18
+    <PublisherDisplayName>React Native for UWP</PublisherDisplayName>
19
+    <Logo>Assets\StoreLogo.png</Logo>
20
+  </Properties>
21
+
22
+  <Dependencies>
23
+    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
24
+  </Dependencies>
25
+
26
+  <Resources>
27
+    <Resource Language="x-generate"/>
28
+  </Resources>
29
+
30
+  <Applications>
31
+    <Application Id="App"
32
+      Executable="$targetnametoken$.exe"
33
+      EntryPoint="ViewShotExample.App">
34
+      <uap:VisualElements
35
+        DisplayName="ViewShotExample"
36
+        Square150x150Logo="Assets\Square150x150Logo.png"
37
+        Square44x44Logo="Assets\Square44x44Logo.png"
38
+        Description="ViewShotExample"
39
+        BackgroundColor="transparent">
40
+        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"/>
41
+        <uap:SplashScreen Image="Assets\SplashScreen.png" />
42
+      </uap:VisualElements>
43
+    </Application>
44
+  </Applications>
45
+
46
+  <Capabilities>
47
+    <Capability Name="internetClient" />
48
+  </Capabilities>
49
+</Package>

+ 29
- 0
example/windows/ViewShotExample/Properties/AssemblyInfo.cs View File

@@ -0,0 +1,29 @@
1
+using System.Reflection;
2
+using System.Runtime.CompilerServices;
3
+using System.Runtime.InteropServices;
4
+
5
+// General Information about an assembly is controlled through the following 
6
+// set of attributes. Change these attribute values to modify the information
7
+// associated with an assembly.
8
+[assembly: AssemblyTitle("ViewShotExample")]
9
+[assembly: AssemblyDescription("")]
10
+[assembly: AssemblyConfiguration("")]
11
+[assembly: AssemblyCompany("")]
12
+[assembly: AssemblyProduct("ViewShotExample")]
13
+[assembly: AssemblyCopyright("Copyright ©  2016")]
14
+[assembly: AssemblyTrademark("")]
15
+[assembly: AssemblyCulture("")]
16
+
17
+// Version information for an assembly consists of the following four values:
18
+//
19
+//      Major Version
20
+//      Minor Version 
21
+//      Build Number
22
+//      Revision
23
+//
24
+// You can specify all the values or you can default the Build and Revision Numbers 
25
+// by using the '*' as shown below:
26
+// [assembly: AssemblyVersion("1.0.*")]
27
+[assembly: AssemblyVersion("1.0.0.0")]
28
+[assembly: AssemblyFileVersion("1.0.0.0")]
29
+[assembly: ComVisible(false)]

+ 31
- 0
example/windows/ViewShotExample/Properties/Default.rd.xml View File

@@ -0,0 +1,31 @@
1
+<!--
2
+    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most
3
+    developers. However, you can modify these parameters to modify the behavior of the .NET Native
4
+    optimizer.
5
+
6
+    Runtime Directives are documented at http://go.microsoft.com/fwlink/?LinkID=391919
7
+
8
+    To fully enable reflection for ViewShotExample.MyClass and all of its public/private members
9
+    <Type Name="ViewShotExample.MyClass" Dynamic="Required All"/>
10
+
11
+    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32
12
+    <TypeInstantiation Name="ViewShotExample.AppClass" Arguments="System.Int32" Activate="Required Public" />
13
+
14
+    Using the Namespace directive to apply reflection policy to all the types in a particular namespace
15
+    <Namespace Name="DataClasses.ViewModels" Seralize="All" />
16
+-->
17
+
18
+<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata">
19
+  <Application>
20
+    <!--
21
+      An Assembly element with Name="*Application*" applies to all assemblies in
22
+      the application package. The asterisks are not wildcards.
23
+    -->
24
+    <Assembly Name="*Application*" Dynamic="Required All" />
25
+    
26
+    
27
+    <!-- Add your application specific runtime directives here. -->
28
+
29
+
30
+  </Application>
31
+</Directives>

+ 234
- 0
example/windows/ViewShotExample/ViewShotExample.csproj View File

@@ -0,0 +1,234 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
+  <PropertyGroup>
5
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
7
+    <ProjectGuid>{385046CD-7621-4286-9E49-4CA26B4A9C23}</ProjectGuid>
8
+    <OutputType>AppContainerExe</OutputType>
9
+    <AppDesignerFolder>Properties</AppDesignerFolder>
10
+    <RootNamespace>ViewShotExample</RootNamespace>
11
+    <AssemblyName>ViewShotExample</AssemblyName>
12
+    <DefaultLanguage>en-US</DefaultLanguage>
13
+    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>
14
+    <TargetPlatformVersion>10.0.10586.0</TargetPlatformVersion>
15
+    <TargetPlatformMinVersion>10.0.10240.0</TargetPlatformMinVersion>
16
+    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>
17
+    <FileAlignment>512</FileAlignment>
18
+    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
19
+    <PackageCertificateKeyFile>ViewShotExample_TemporaryKey.pfx</PackageCertificateKeyFile>
20
+  </PropertyGroup>
21
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
22
+    <DebugSymbols>true</DebugSymbols>
23
+    <OutputPath>bin\x86\Debug\</OutputPath>
24
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
25
+    <NoWarn>;2008</NoWarn>
26
+    <DebugType>full</DebugType>
27
+    <PlatformTarget>x86</PlatformTarget>
28
+    <UseVSHostingProcess>false</UseVSHostingProcess>
29
+    <ErrorReport>prompt</ErrorReport>
30
+    <Prefer32Bit>true</Prefer32Bit>
31
+  </PropertyGroup>
32
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugBundle|x86'">
33
+    <DebugSymbols>true</DebugSymbols>
34
+    <OutputPath>bin\x86\DebugBundle\</OutputPath>
35
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
36
+    <NoWarn>;2008</NoWarn>
37
+    <NoStdLib>true</NoStdLib>
38
+    <DebugType>full</DebugType>
39
+    <PlatformTarget>x86</PlatformTarget>
40
+    <UseVSHostingProcess>false</UseVSHostingProcess>
41
+    <ErrorReport>prompt</ErrorReport>
42
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
43
+    <Prefer32Bit>true</Prefer32Bit>
44
+  </PropertyGroup>
45
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
46
+    <OutputPath>bin\x86\Release\</OutputPath>
47
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
48
+    <Optimize>true</Optimize>
49
+    <NoWarn>;2008</NoWarn>
50
+    <DebugType>pdbonly</DebugType>
51
+    <PlatformTarget>x86</PlatformTarget>
52
+    <UseVSHostingProcess>false</UseVSHostingProcess>
53
+    <ErrorReport>prompt</ErrorReport>
54
+    <Prefer32Bit>true</Prefer32Bit>
55
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
56
+  </PropertyGroup>
57
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseBundle|x86'">
58
+    <OutputPath>bin\x86\ReleaseBundle\</OutputPath>
59
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
60
+    <Optimize>true</Optimize>
61
+    <NoWarn>;2008</NoWarn>
62
+    <NoStdLib>true</NoStdLib>
63
+    <DebugType>pdbonly</DebugType>
64
+    <PlatformTarget>x86</PlatformTarget>
65
+    <UseVSHostingProcess>false</UseVSHostingProcess>
66
+    <ErrorReport>prompt</ErrorReport>
67
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
68
+    <Prefer32Bit>true</Prefer32Bit>
69
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
70
+  </PropertyGroup>
71
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
72
+    <DebugSymbols>true</DebugSymbols>
73
+    <OutputPath>bin\ARM\Debug\</OutputPath>
74
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
75
+    <NoWarn>;2008</NoWarn>
76
+    <DebugType>full</DebugType>
77
+    <PlatformTarget>ARM</PlatformTarget>
78
+    <UseVSHostingProcess>false</UseVSHostingProcess>
79
+    <ErrorReport>prompt</ErrorReport>
80
+    <Prefer32Bit>true</Prefer32Bit>
81
+  </PropertyGroup>
82
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugBundle|ARM'">
83
+    <DebugSymbols>true</DebugSymbols>
84
+    <OutputPath>bin\ARM\DebugBundle\</OutputPath>
85
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
86
+    <NoWarn>;2008</NoWarn>
87
+    <NoStdLib>true</NoStdLib>
88
+    <DebugType>full</DebugType>
89
+    <PlatformTarget>ARM</PlatformTarget>
90
+    <UseVSHostingProcess>false</UseVSHostingProcess>
91
+    <ErrorReport>prompt</ErrorReport>
92
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
93
+    <Prefer32Bit>true</Prefer32Bit>
94
+  </PropertyGroup>
95
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
96
+    <OutputPath>bin\ARM\Release\</OutputPath>
97
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
98
+    <Optimize>true</Optimize>
99
+    <NoWarn>;2008</NoWarn>
100
+    <DebugType>pdbonly</DebugType>
101
+    <PlatformTarget>ARM</PlatformTarget>
102
+    <UseVSHostingProcess>false</UseVSHostingProcess>
103
+    <ErrorReport>prompt</ErrorReport>
104
+    <Prefer32Bit>true</Prefer32Bit>
105
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
106
+  </PropertyGroup>
107
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseBundle|ARM'">
108
+    <OutputPath>bin\ARM\ReleaseBundle\</OutputPath>
109
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
110
+    <Optimize>true</Optimize>
111
+    <NoWarn>;2008</NoWarn>
112
+    <NoStdLib>true</NoStdLib>
113
+    <DebugType>pdbonly</DebugType>
114
+    <PlatformTarget>ARM</PlatformTarget>
115
+    <UseVSHostingProcess>false</UseVSHostingProcess>
116
+    <ErrorReport>prompt</ErrorReport>
117
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
118
+    <Prefer32Bit>true</Prefer32Bit>
119
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
120
+  </PropertyGroup>
121
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
122
+    <DebugSymbols>true</DebugSymbols>
123
+    <OutputPath>bin\x64\Debug\</OutputPath>
124
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
125
+    <NoWarn>;2008</NoWarn>
126
+    <DebugType>full</DebugType>
127
+    <PlatformTarget>x64</PlatformTarget>
128
+    <UseVSHostingProcess>false</UseVSHostingProcess>
129
+    <ErrorReport>prompt</ErrorReport>
130
+    <Prefer32Bit>true</Prefer32Bit>
131
+  </PropertyGroup>
132
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugBundle|x64'">
133
+    <DebugSymbols>true</DebugSymbols>
134
+    <OutputPath>bin\x64\DebugBundle\</OutputPath>
135
+    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
136
+    <NoWarn>;2008</NoWarn>
137
+    <NoStdLib>true</NoStdLib>
138
+    <DebugType>full</DebugType>
139
+    <PlatformTarget>x64</PlatformTarget>
140
+    <UseVSHostingProcess>false</UseVSHostingProcess>
141
+    <ErrorReport>prompt</ErrorReport>
142
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
143
+    <Prefer32Bit>true</Prefer32Bit>
144
+  </PropertyGroup>
145
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
146
+    <OutputPath>bin\x64\Release\</OutputPath>
147
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
148
+    <Optimize>true</Optimize>
149
+    <NoWarn>;2008</NoWarn>
150
+    <DebugType>pdbonly</DebugType>
151
+    <PlatformTarget>x64</PlatformTarget>
152
+    <UseVSHostingProcess>false</UseVSHostingProcess>
153
+    <ErrorReport>prompt</ErrorReport>
154
+    <Prefer32Bit>true</Prefer32Bit>
155
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
156
+  </PropertyGroup>
157
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseBundle|x64'">
158
+    <OutputPath>bin\x64\ReleaseBundle\</OutputPath>
159
+    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;BUNDLE</DefineConstants>
160
+    <Optimize>true</Optimize>
161
+    <NoWarn>;2008</NoWarn>
162
+    <NoStdLib>true</NoStdLib>
163
+    <DebugType>pdbonly</DebugType>
164
+    <PlatformTarget>x64</PlatformTarget>
165
+    <UseVSHostingProcess>false</UseVSHostingProcess>
166
+    <ErrorReport>prompt</ErrorReport>
167
+    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
168
+    <Prefer32Bit>true</Prefer32Bit>
169
+    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>
170
+  </PropertyGroup>
171
+  <ItemGroup>
172
+    <!-- A reference to the entire .Net Framework and Windows SDK are automatically included -->
173
+    <None Include="project.json" />
174
+  </ItemGroup>
175
+  <ItemGroup>
176
+    <Compile Include="App.xaml.cs">
177
+      <DependentUpon>App.xaml</DependentUpon>
178
+    </Compile>
179
+    <Compile Include="MainPage.cs" />
180
+    <Compile Include="Properties\AssemblyInfo.cs" />
181
+  </ItemGroup>
182
+  <ItemGroup>
183
+    <AppxManifest Include="Package.appxmanifest">
184
+      <SubType>Designer</SubType>
185
+    </AppxManifest>
186
+    <None Include="ViewShotExample_TemporaryKey.pfx" />
187
+  </ItemGroup>
188
+  <ItemGroup>
189
+    <Content Include="Properties\Default.rd.xml" />
190
+    <Content Include="Assets\LockScreenLogo.scale-200.png" />
191
+    <Content Include="Assets\SplashScreen.scale-200.png" />
192
+    <Content Include="Assets\Square150x150Logo.scale-200.png" />
193
+    <Content Include="Assets\Square44x44Logo.scale-200.png" />
194
+    <Content Include="Assets\Square44x44Logo.targetsize-24_altform-unplated.png" />
195
+    <Content Include="Assets\StoreLogo.png" />
196
+    <Content Include="Assets\Wide310x150Logo.scale-200.png" />
197
+  </ItemGroup>
198
+  <ItemGroup>
199
+    <ApplicationDefinition Include="App.xaml">
200
+      <Generator>MSBuild:Compile</Generator>
201
+      <SubType>Designer</SubType>
202
+    </ApplicationDefinition>
203
+  </ItemGroup>
204
+  <ItemGroup>
205
+    <ProjectReference Include="..\..\node_modules\react-native-video\windows\ReactNativeVideo\ReactNativeVideo.csproj">
206
+      <Project>{e8f5f57f-757e-4237-ad23-f7a8755427cd}</Project>
207
+      <Name>ReactNativeVideo</Name>
208
+    </ProjectReference>
209
+    <ProjectReference Include="..\..\node_modules\react-native-view-shot\windows\RNViewShot\RNViewShot.csproj">
210
+      <Project>{391A35D0-FEBA-11E6-9171-BD5177E581B7}</Project>
211
+      <Name>RNViewShot</Name>
212
+    </ProjectReference>
213
+    <ProjectReference Include="..\..\node_modules\react-native-windows\ReactWindows\ReactNative\ReactNative.csproj">
214
+      <Project>{c7673ad5-e3aa-468c-a5fd-fa38154e205c}</Project>
215
+      <Name>ReactNative</Name>
216
+    </ProjectReference>
217
+  </ItemGroup>
218
+  <ItemGroup Condition="'$(Configuration)' == 'ReleaseBundle' or '$(Configuration)' == 'DebugBundle'">
219
+    <Content Include="ReactAssets\**\*">
220
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
221
+    </Content>
222
+  </ItemGroup>
223
+  <PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
224
+    <VisualStudioVersion>14.0</VisualStudioVersion>
225
+  </PropertyGroup>
226
+  <Import Project="$(MSBuildExtensionsPath)\Microsoft\WindowsXaml\v$(VisualStudioVersion)\Microsoft.Windows.UI.Xaml.CSharp.targets" />
227
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
228
+       Other similar extension points exist, see Microsoft.Common.targets.
229
+  <Target Name="BeforeBuild">
230
+  </Target>
231
+  <Target Name="AfterBuild">
232
+  </Target>
233
+  -->
234
+</Project>

BIN
example/windows/ViewShotExample/ViewShotExample_TemporaryKey.pfx View File


+ 17
- 0
example/windows/ViewShotExample/project.json View File

@@ -0,0 +1,17 @@
1
+{
2
+  "dependencies": {
3
+    "Facebook.Yoga": "1.1.0.23-pre",
4
+    "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
5
+  },
6
+  "frameworks": {
7
+    "uap10.0": {}
8
+  },
9
+  "runtimes": {
10
+    "win10-arm": {},
11
+    "win10-arm-aot": {},
12
+    "win10-x86": {},
13
+    "win10-x86-aot": {},
14
+    "win10-x64": {},
15
+    "win10-x64-aot": {}
16
+  }
17
+}

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