The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .gitignore
├── .npmignore
├── .npmignore~
├── Example
    ├── .buckconfig
    ├── .eslintrc.js
    ├── .flowconfig
    ├── .gitattributes
    ├── .gitignore
    ├── .prettierrc.js
    ├── .watchmanconfig
    ├── App.js
    ├── __tests__
    │   └── App-test.js
    ├── android
    │   ├── app
    │   │   ├── BUCK
    │   │   ├── build.gradle
    │   │   ├── build_defs.bzl
    │   │   ├── debug.keystore
    │   │   ├── proguard-rules.pro
    │   │   └── src
    │   │   │   ├── debug
    │   │   │       └── AndroidManifest.xml
    │   │   │   └── main
    │   │   │       ├── AndroidManifest.xml
    │   │   │       ├── java
    │   │   │           └── com
    │   │   │           │   └── example
    │   │   │           │       ├── MainActivity.java
    │   │   │           │       └── MainApplication.java
    │   │   │       └── res
    │   │   │           ├── mipmap-hdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-mdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xhdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xxhdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xxxhdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           └── values
    │   │   │               ├── strings.xml
    │   │   │               └── styles.xml
    │   ├── build.gradle
    │   ├── gradle.properties
    │   ├── gradle
    │   │   └── wrapper
    │   │   │   ├── gradle-wrapper.jar
    │   │   │   └── gradle-wrapper.properties
    │   ├── gradlew
    │   ├── gradlew.bat
    │   └── settings.gradle
    ├── app.json
    ├── babel.config.js
    ├── index.js
    ├── ios
    │   ├── Example-tvOS
    │   │   └── Info.plist
    │   ├── Example-tvOSTests
    │   │   └── Info.plist
    │   ├── Example.xcodeproj
    │   │   ├── project.pbxproj
    │   │   └── xcshareddata
    │   │   │   └── xcschemes
    │   │   │       ├── Example-tvOS.xcscheme
    │   │   │       └── Example.xcscheme
    │   ├── Example.xcworkspace
    │   │   ├── contents.xcworkspacedata
    │   │   └── xcshareddata
    │   │   │   └── IDEWorkspaceChecks.plist
    │   ├── Example
    │   │   ├── AppDelegate.h
    │   │   ├── AppDelegate.m
    │   │   ├── Base.lproj
    │   │   │   └── LaunchScreen.xib
    │   │   ├── Images.xcassets
    │   │   │   ├── AppIcon.appiconset
    │   │   │   │   └── Contents.json
    │   │   │   └── Contents.json
    │   │   ├── Info.plist
    │   │   └── main.m
    │   ├── ExampleTests
    │   │   ├── ExampleTests.m
    │   │   └── Info.plist
    │   ├── Podfile
    │   └── Podfile.lock
    ├── metro.config.js
    ├── package-lock.json
    ├── package.json
    └── yarn.lock
├── License.txt
├── README.md
├── index.js
├── package.json
└── yarn.lock


/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .npmrc
3 | .DS_Store


--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | Example
2 | .npmignore
3 | .npmrc
4 | .DS_Store


--------------------------------------------------------------------------------
/.npmignore~:
--------------------------------------------------------------------------------
1 | Example


--------------------------------------------------------------------------------
/Example/.buckconfig:
--------------------------------------------------------------------------------
1 | 
2 | [android]
3 |   target = Google Inc.:Google APIs:23
4 | 
5 | [maven_repositories]
6 |   central = https://repo1.maven.org/maven2
7 | 


--------------------------------------------------------------------------------
/Example/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   root: true,
3 |   extends: '@react-native-community',
4 | };
5 | 


--------------------------------------------------------------------------------
/Example/.flowconfig:
--------------------------------------------------------------------------------
 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 polyfills
 9 | node_modules/react-native/Libraries/polyfills/.*
10 | 
11 | ; These should not be required directly
12 | ; require from fbjs/lib instead: require('fbjs/lib/warning')
13 | node_modules/warning/.*
14 | 
15 | ; Flow doesn't support platforms
16 | .*/Libraries/Utilities/LoadingView.js
17 | 
18 | [untyped]
19 | .*/node_modules/@react-native-community/cli/.*/.*
20 | 
21 | [include]
22 | 
23 | [libs]
24 | node_modules/react-native/Libraries/react-native/react-native-interface.js
25 | node_modules/react-native/flow/
26 | 
27 | [options]
28 | emoji=true
29 | 
30 | esproposal.optional_chaining=enable
31 | esproposal.nullish_coalescing=enable
32 | 
33 | module.file_ext=.js
34 | module.file_ext=.json
35 | module.file_ext=.ios.js
36 | 
37 | munge_underscores=true
38 | 
39 | module.name_mapper='^react-native
#39; -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/react-native/react-native-implementation'
40 | module.name_mapper='^react-native/\(.*\)
#39; -> '<PROJECT_ROOT>/node_modules/react-native/\1'
41 | 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\)
#39; -> '<PROJECT_ROOT>/node_modules/react-native/Libraries/Image/RelativeImageStub'
42 | 
43 | suppress_type=$FlowIssue
44 | suppress_type=$FlowFixMe
45 | suppress_type=$FlowFixMeProps
46 | suppress_type=$FlowFixMeState
47 | 
48 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)
49 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+
50 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError
51 | 
52 | [lints]
53 | sketchy-null-number=warn
54 | sketchy-null-mixed=warn
55 | sketchy-number=warn
56 | untyped-type-import=warn
57 | nonstrict-import=warn
58 | deprecated-type=warn
59 | unsafe-getters-setters=warn
60 | inexact-spread=warn
61 | unnecessary-invariant=warn
62 | signature-verification-failure=warn
63 | deprecated-utility=error
64 | 
65 | [strict]
66 | deprecated-type
67 | nonstrict-import
68 | sketchy-null
69 | unclear-type
70 | unsafe-getters-setters
71 | untyped-import
72 | untyped-type-import
73 | 
74 | [version]
75 | ^0.105.0
76 | 


--------------------------------------------------------------------------------
/Example/.gitattributes:
--------------------------------------------------------------------------------
1 | *.pbxproj -text
2 | 


--------------------------------------------------------------------------------
/Example/.gitignore:
--------------------------------------------------------------------------------
 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 | yarn-error.log
38 | 
39 | # BUCK
40 | buck-out/
41 | \.buckd/
42 | *.keystore
43 | !debug.keystore
44 | 
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://docs.fastlane.tools/best-practices/source-control/
51 | 
52 | */fastlane/report.xml
53 | */fastlane/Preview.html
54 | */fastlane/screenshots
55 | 
56 | # Bundle artifact
57 | *.jsbundle
58 | 
59 | # CocoaPods
60 | /ios/Pods/
61 | 


--------------------------------------------------------------------------------
/Example/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   bracketSpacing: false,
3 |   jsxBracketSameLine: true,
4 |   singleQuote: true,
5 |   trailingComma: 'all',
6 | };
7 | 


--------------------------------------------------------------------------------
/Example/.watchmanconfig:
--------------------------------------------------------------------------------
1 | {}


--------------------------------------------------------------------------------
/Example/App.js:
--------------------------------------------------------------------------------
  1 | import React from 'react';
  2 | import Modal from 'react-native-modalbox';
  3 | import Slider from 'react-native-slider';
  4 | 
  5 | import {
  6 |   Text,
  7 |   Button,
  8 |   StyleSheet,
  9 |   ScrollView,
 10 |   View,
 11 |   Dimensions,
 12 |   TextInput
 13 | } from 'react-native';
 14 | 
 15 | var screen = Dimensions.get('window');
 16 | 
 17 | export default class App extends React.Component {
 18 | 
 19 |   constructor() {
 20 |     super();
 21 |     this.state = {
 22 |       isOpen: false,
 23 |       isDisabled: false,
 24 |       swipeToClose: true,
 25 |       sliderValue: 0.3
 26 |     };
 27 |   }
 28 | 
 29 |   onClose() {
 30 |     console.log('Modal just closed');
 31 |   }
 32 | 
 33 |   onOpen() {
 34 |     console.log('Modal just opened');
 35 |   }
 36 | 
 37 |   onClosingState(state) {
 38 |     console.log('the open/close of the swipeToClose just changed');
 39 |   }
 40 | 
 41 |   renderList() {
 42 |     var list = [];
 43 | 
 44 |     for (var i=0;i<50;i++) {
 45 |       list.push(<Text style={styles.text} key={i}>Elem {i}</Text>);
 46 |     }
 47 | 
 48 |     return list;
 49 |   }
 50 | 
 51 |   render() {
 52 |     var BContent = (
 53 |       <View style={[styles.btn, styles.btnModal]}>
 54 |         <Button title="X" color="white" onPress={() => this.setState({isOpen: false})}/>
 55 |       </View>
 56 |     );
 57 | 
 58 |     return (
 59 |       <View style={styles.wrapper}>
 60 |         <Button title="Basic modal" onPress={() => this.refs.modal1.open()} style={styles.btn}/>
 61 |         <Button title="Position top" onPress={() => this.refs.modal2.open()} style={styles.btn}/>
 62 |         <Button title="Position centered + backdrop + disable" onPress={() => this.refs.modal3.open()} style={styles.btn}/>
 63 |         <Button title="Position bottom + backdrop + slider" onPress={() => this.refs.modal4.open()} style={styles.btn}/>
 64 |         <Button title="Backdrop + backdropContent" onPress={() => this.setState({isOpen: true})} style={styles.btn}/>
 65 |         <Button title="Position bottom + ScrollView" onPress={() => this.refs.modal6.open()} style={styles.btn}/>
 66 |         <Button title="Modal with keyboard support" onPress={() => this.refs.modal7.open()} style={styles.btn}/>
 67 |         <Button title="Entry from top" onPress={() => this.refs.modal8.open()} style={styles.btn}/>
 68 | 
 69 |         <Modal
 70 |           style={[styles.modal, styles.modal1]}
 71 |           ref={"modal1"}
 72 |           swipeToClose={this.state.swipeToClose}
 73 |           onClosed={this.onClose}
 74 |           onOpened={this.onOpen}
 75 |           onClosingState={this.onClosingState}>
 76 |             <Text style={styles.text}>Basic modal</Text>
 77 |             <Button title={`Disable swipeToClose(${this.state.swipeToClose ? "true" : "false"})`} onPress={() => this.setState({swipeToClose: !this.state.swipeToClose})} style={styles.btn}/>
 78 |         </Modal>
 79 | 
 80 |         <Modal style={[styles.modal, styles.modal2]} backdrop={false}  position={"top"} ref={"modal2"}>
 81 |           <Text style={[styles.text, {color: "white"}]}>Modal on top</Text>
 82 |         </Modal>
 83 | 
 84 |         <Modal style={[styles.modal, styles.modal3]} position={"center"} ref={"modal3"} isDisabled={this.state.isDisabled}>
 85 |           <Text style={styles.text}>Modal centered</Text>
 86 |           <Button title={`Disable (${this.state.isDisabled ? "true" : "false"})`} onPress={() => this.setState({isDisabled: !this.state.isDisabled})} style={styles.btn}/>
 87 |         </Modal>
 88 | 
 89 |         <Modal style={[styles.modal, styles.modal4]} position={"bottom"} ref={"modal4"}>
 90 |           <Text style={styles.text}>Modal on bottom with backdrop</Text>
 91 |           <Slider style={{width: 200}} value={this.state.sliderValue} onValueChange={(value) => this.setState({sliderValue: value})} />
 92 |         </Modal>
 93 | 
 94 |         <Modal isOpen={this.state.isOpen} onClosed={() => this.setState({isOpen: false})} style={[styles.modal, styles.modal4]} position={"center"} backdropPressToClose={false} backdropContent={BContent}>
 95 |           <Text style={styles.text}>Modal with backdrop content</Text>
 96 |         </Modal>
 97 | 
 98 |         <Modal style={[styles.modal, styles.modal4]} position={"bottom"} ref={"modal6"} swipeArea={20}>
 99 |           <ScrollView>
100 |             <View style={{width: screen.width, paddingLeft: 10}}>
101 |               {this.renderList()}
102 |             </View>
103 |           </ScrollView>
104 |         </Modal>
105 | 
106 |         <Modal ref={"modal7"} style={[styles.modal, styles.modal4]} position={"center"}>
107 |           <View>
108 |             <TextInput style={{height: 50, width: 200, backgroundColor: '#DDDDDD'}}/>
109 |           </View>
110 |         </Modal>
111 | 
112 |         <Modal ref={"modal8"} style={[styles.modal, styles.modal2]} position={"top"} entry={"top"}>
113 |           <Text style={[styles.text, {color: "white"}]}>Modal entry from top</Text>
114 |         </Modal>
115 |       </View>
116 |     );
117 |   }
118 | 
119 | }
120 | 
121 | const styles = StyleSheet.create({
122 | 
123 |   wrapper: {
124 |     paddingTop: 50,
125 |     flex: 1
126 |   },
127 | 
128 |   modal: {
129 |     justifyContent: 'center',
130 |     alignItems: 'center'
131 |   },
132 | 
133 |   modal2: {
134 |     height: 230,
135 |     backgroundColor: "#3B5998"
136 |   },
137 | 
138 |   modal3: {
139 |     height: 300,
140 |     width: 300
141 |   },
142 | 
143 |   modal4: {
144 |     height: 300
145 |   },
146 | 
147 |   btn: {
148 |     margin: 10,
149 |     backgroundColor: "#3B5998",
150 |     color: "white",
151 |     padding: 10
152 |   },
153 | 
154 |   btnModal: {
155 |     position: "absolute",
156 |     top: 0,
157 |     right: 0,
158 |     width: 50,
159 |     height: 50,
160 |     backgroundColor: "transparent"
161 |   },
162 | 
163 |   text: {
164 |     color: "black",
165 |     fontSize: 22
166 |   }
167 | 
168 | });


--------------------------------------------------------------------------------
/Example/__tests__/App-test.js:
--------------------------------------------------------------------------------
 1 | /**
 2 |  * @format
 3 |  */
 4 | 
 5 | import 'react-native';
 6 | import React from 'react';
 7 | import App from '../App';
 8 | 
 9 | // Note: test renderer must be required after react-native.
10 | import renderer from 'react-test-renderer';
11 | 
12 | it('renders correctly', () => {
13 |   renderer.create(<App />);
14 | });
15 | 


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


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


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


--------------------------------------------------------------------------------
/Example/android/app/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/debug.keystore


--------------------------------------------------------------------------------
/Example/android/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 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 | 


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


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


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


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


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">Example</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/Example/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="android:textColor">#000000</item>
 7 |     </style>
 8 | 
 9 | </resources>
10 | 


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


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


--------------------------------------------------------------------------------
/Example/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maxs15/react-native-modalbox/879acfc5386f5a91ee91db398a36fe879609222d/Example/android/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/Example/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | 


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


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


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


--------------------------------------------------------------------------------
/Example/app.json:
--------------------------------------------------------------------------------
1 | {
2 |   "name": "Example",
3 |   "displayName": "Example"
4 | }


--------------------------------------------------------------------------------
/Example/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 |   presets: ['module:metro-react-native-babel-preset'],
3 | };
4 | 


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


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


--------------------------------------------------------------------------------
/Example/ios/Example-tvOSTests/Info.plist:
--------------------------------------------------------------------------------
 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>
25 | 


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


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


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


--------------------------------------------------------------------------------
/Example/ios/Example.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8"?>
 2 | <Workspace
 3 |    version = "1.0">
 4 |    <FileRef
 5 |       location = "group:Example.xcodeproj">
 6 |    </FileRef>
 7 |    <FileRef
 8 |       location = "group:Pods/Pods.xcodeproj">
 9 |    </FileRef>
10 | </Workspace>
11 | 


--------------------------------------------------------------------------------
/Example/ios/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="UTF-8"?>
2 | <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3 | <plist version="1.0">
4 | <dict>
5 | 	<key>IDEDidComputeMac32BitWarning</key>
6 | 	<true/>
7 | </dict>
8 | </plist>
9 | 


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


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


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


--------------------------------------------------------------------------------
/Example/ios/Example/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
 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 | }


--------------------------------------------------------------------------------
/Example/ios/Example/Images.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 |   "info" : {
3 |     "version" : 1,
4 |     "author" : "xcode"
5 |   }
6 | }
7 | 


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


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


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


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


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


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


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


--------------------------------------------------------------------------------
/Example/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "Example",
 3 |   "version": "0.0.1",
 4 |   "private": true,
 5 |   "scripts": {
 6 |     "android": "react-native run-android",
 7 |     "ios": "react-native run-ios",
 8 |     "start": "react-native start",
 9 |     "test": "jest",
10 |     "lint": "eslint ."
11 |   },
12 |   "dependencies": {
13 |     "react": "16.9.0",
14 |     "react-native": "0.61.1",
15 |     "react-native-modalbox": "2.0.1",
16 |     "react-native-slider": "^0.11.0"
17 |   },
18 |   "devDependencies": {
19 |     "@babel/core": "^7.6.2",
20 |     "@babel/runtime": "^7.6.2",
21 |     "@react-native-community/eslint-config": "^0.0.5",
22 |     "babel-jest": "^24.9.0",
23 |     "eslint": "^6.4.0",
24 |     "jest": "^24.9.0",
25 |     "metro-react-native-babel-preset": "^0.56.0",
26 |     "react-test-renderer": "16.9.0"
27 |   },
28 |   "jest": {
29 |     "preset": "react-native"
30 |   }
31 | }
32 | 


--------------------------------------------------------------------------------
/License.txt:
--------------------------------------------------------------------------------
 1 | MIT License
 2 | 
 3 | Copyright (c) 2016 Max
 4 | 
 5 | Permission is hereby granted, free of charge, to any person obtaining a copy
 6 | of this software and associated documentation files (the "Software"), to deal
 7 | in the Software without restriction, including without limitation the rights
 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 | 
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 | 
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
 1 | # react-native-modalbox
 2 | 
 3 | [![npm](https://img.shields.io/npm/dm/react-native-modalbox.svg?maxAge=2592000)]()
 4 | [![npm](https://img.shields.io/npm/dt/react-native-modalbox.svg?maxAge=2592000)]()   
 5 | 
 6 | A react native <Modal> component, easy, fully customizable, implementing the 'swipe down to close' feature.
 7 | 
 8 | ## Wanna implement IAP in your beautiful modal? 👇
 9 | <a href="https://landing.iaphub.com/cc/react-native-modalbox" title="IAPHUB">
10 | 	<img width=882px src="https://www.iaphub.com/img/github/github-rn-ad.png" alt="IAPHUB">
11 | </a>
12 | <br/>
13 | 
14 | ## Preview
15 | ![](https://i.imgur.com/QTAYh81.gif)
16 | ![](http://i.imgur.com/3XULLt8.gif)
17 | 
18 | ## Install
19 | 
20 | `npm install react-native-modalbox@latest --save`
21 | 
22 | ## Example
23 | Check [index.js](https://github.com/maxs15/react-native-modalbox/blob/master/Example/index.ios.js) in the Example folder.
24 | 
25 | ## Version note
26 | | react-native | react-native-modalbox |
27 | | :------------ |:---------------:|
28 | | <= 0.57 | <= 1.6.0 |
29 | | >= 0.58 | >= 1.6.1 |
30 | 
31 | ## Properties
32 | 
33 | | Prop  | Default  | Type | Description |
34 | | :------------ |:---------------:| :---------------:| :-----|
35 | | isOpen | false | `bool` | Open/close the modal, optional, you can use the open/close methods instead  |
36 | | isDisabled | false | `bool` | Disable any action on the modal (open, close, swipe)  |
37 | | backdropPressToClose | true | `bool` | Close the the modal by pressing on the backdrop |
38 | | swipeToClose | true | `bool` | Set to `true` to enable the swipe down to close feature |
39 | | swipeThreshold | 50 | `number` | The threshold to reach in pixels to close the modal |
40 | | swipeArea | - | `number` | The height in pixels of the swipeable area, window height by default |
41 | | position | center | `string` | Control the modal position using `top` or `center` or `bottom` |
42 | | entry | bottom | `string` | Control the modal entry position `top` or `bottom` |
43 | | backdrop | true | `bool` | Display a backdrop behind the modal |
44 | | backdropOpacity | 0.5| `number` | Opacity of the backdrop |
45 | | backdropColor | black| `string` | backgroundColor of the backdrop |
46 | | backdropContent | null| `ReactElement` | Add an element in the backdrop (a close button for example) |
47 | | animationDuration | 400| `number` | Duration of the animation |
48 | | easing | Easing.elastic(0.8) | `function` | Easing function applied to opening modal animation |
49 | | backButtonClose | false | `bool` | (Android only) Close modal when receiving back button event |
50 | | startOpen | false | `bool` | Allow modal to appear open without animation upon first mount |
51 | | coverScreen | false | `bool` | Will use RN `Modal` component to cover the entire screen wherever the modal is mounted in the component hierarchy |
52 | | keyboardTopOffset | ios:22, android:0 | `number` | This property prevent the modal to cover the ios status bar when the modal is scrolling up because the keyboard is opening |
53 | | useNativeDriver | true | `bool` | Enables the hardware acceleration to animate the modal. Please note that enabling this can cause some flashes in a weird way when animating |
54 | 
55 | ## Events
56 | 
57 | | Prop  | Params  | Description |
58 | | :------------ |:---------------:| :---------------:|
59 | | onClosed | - | When the modal is close and the animation is done |
60 | | onOpened | - | When the modal is open and the animation is done |
61 | | onClosingState | state `bool` | When the state of the swipe to close feature has changed (usefull to change the content of the modal, display a message for example) |
62 | 
63 | ## Methods
64 | These methods are optional, you can use the isOpen property instead   
65 | 
66 | | Prop  | Params  | Description |
67 | | :------------ |:---------------:| :---------------:|
68 | | open | - | Open the modal |
69 | | close | - | Close the modal |
70 | 


--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
  1 | import React from 'react';
  2 | import PropTypes from 'prop-types';
  3 | import {
  4 |   View,
  5 |   StyleSheet,
  6 |   PanResponder,
  7 |   Animated,
  8 |   TouchableWithoutFeedback,
  9 |   Dimensions,
 10 |   Easing,
 11 |   BackHandler,
 12 |   Platform,
 13 |   Modal,
 14 |   Keyboard
 15 | } from 'react-native';
 16 | 
 17 | const {height: SCREEN_HEIGHT, width: SCREEN_WIDTH} = Dimensions.get('window');
 18 | const styles = StyleSheet.create({
 19 |   wrapper: {
 20 |     backgroundColor: 'white'
 21 |   },
 22 |   transparent: {
 23 |     zIndex: 2,
 24 |     backgroundColor: 'rgba(0,0,0,0)'
 25 |   },
 26 |   absolute: {
 27 |     position: 'absolute',
 28 |     top: 0,
 29 |     bottom: 0,
 30 |     left: 0,
 31 |     right: 0
 32 |   }
 33 | });
 34 | 
 35 | export default class ModalBox extends React.PureComponent {
 36 |   static propTypes = {
 37 |     isOpen: PropTypes.bool,
 38 |     isDisabled: PropTypes.bool,
 39 |     startOpen: PropTypes.bool,
 40 |     backdropPressToClose: PropTypes.bool,
 41 |     swipeToClose: PropTypes.bool,
 42 |     swipeThreshold: PropTypes.number,
 43 |     swipeArea: PropTypes.number,
 44 |     position: PropTypes.string,
 45 |     entry: PropTypes.string,
 46 |     backdrop: PropTypes.bool,
 47 |     backdropOpacity: PropTypes.number,
 48 |     backdropColor: PropTypes.string,
 49 |     backdropContent: PropTypes.element,
 50 |     animationDuration: PropTypes.number,
 51 |     backButtonClose: PropTypes.bool,
 52 |     easing: PropTypes.func,
 53 |     coverScreen: PropTypes.bool,
 54 |     keyboardTopOffset: PropTypes.number,
 55 |     onClosed: PropTypes.func,
 56 |     onOpened: PropTypes.func,
 57 |     onClosingState: PropTypes.func
 58 |   };
 59 | 
 60 |   static defaultProps = {
 61 |     startOpen: false,
 62 |     backdropPressToClose: true,
 63 |     swipeToClose: true,
 64 |     swipeThreshold: 50,
 65 |     position: 'center',
 66 |     backdrop: true,
 67 |     backdropOpacity: 0.5,
 68 |     backdropColor: 'black',
 69 |     backdropContent: null,
 70 |     animationDuration: 400,
 71 |     backButtonClose: false,
 72 |     easing: Easing.elastic(0.8),
 73 |     coverScreen: false,
 74 |     keyboardTopOffset: Platform.OS == 'ios' ? 22 : 0,
 75 |     useNativeDriver: true
 76 |   };
 77 | 
 78 |   constructor(props) {
 79 |     super(props);
 80 | 
 81 |     this.onBackPress = this.onBackPress.bind(this);
 82 |     this.handleOpenning = this.handleOpenning.bind(this);
 83 |     this.onKeyboardHide = this.onKeyboardHide.bind(this);
 84 |     this.onKeyboardChange = this.onKeyboardChange.bind(this);
 85 |     this.animateBackdropOpen = this.animateBackdropOpen.bind(this);
 86 |     this.animateBackdropClose = this.animateBackdropClose.bind(this);
 87 |     this.stopAnimateOpen = this.stopAnimateOpen.bind(this);
 88 |     this.animateOpen = this.animateOpen.bind(this);
 89 |     this.stopAnimateClose = this.stopAnimateClose.bind(this);
 90 |     this.animateClose = this.animateClose.bind(this);
 91 |     this.calculateModalPosition = this.calculateModalPosition.bind(this);
 92 |     this.createPanResponder = this.createPanResponder.bind(this);
 93 |     this.onViewLayout = this.onViewLayout.bind(this);
 94 |     this.onContainerLayout = this.onContainerLayout.bind(this);
 95 |     this.renderBackdrop = this.renderBackdrop.bind(this);
 96 |     this.renderContent = this.renderContent.bind(this);
 97 |     this.open = this.open.bind(this);
 98 |     this.close = this.close.bind(this);
 99 | 
100 |     const position = props.startOpen
101 |       ? new Animated.Value(0)
102 |       : new Animated.Value(
103 |           props.entry === 'top' ? -SCREEN_HEIGHT : SCREEN_HEIGHT
104 |         );
105 |     this.state = {
106 |       position,
107 |       backdropOpacity: new Animated.Value(0),
108 |       isOpen: props.startOpen,
109 |       isAnimateClose: false,
110 |       isAnimateOpen: false,
111 |       swipeToClose: false,
112 |       height: SCREEN_HEIGHT,
113 |       width: SCREEN_WIDTH,
114 |       containerHeight: SCREEN_HEIGHT,
115 |       containerWidth: SCREEN_WIDTH,
116 |       isInitialized: false,
117 |       keyboardOffset: 0,
118 |       pan: this.createPanResponder(position)
119 |     };
120 | 
121 |     // Needed for iOS because the keyboard covers the screen
122 |     if (Platform.OS === 'ios') {
123 |       this.subscriptions = [
124 |         Keyboard.addListener('keyboardWillChangeFrame', this.onKeyboardChange),
125 |         Keyboard.addListener('keyboardDidHide', this.onKeyboardHide)
126 |       ];
127 |     }
128 |   }
129 | 
130 |   componentDidMount() {
131 |     this.handleOpenning();
132 |   }
133 | 
134 |   componentDidUpdate(prevProps) {
135 |     if (this.props.isOpen != prevProps.isOpen) {
136 |       this.handleOpenning();
137 |     }
138 |   }
139 | 
140 |   componentWillUnmount() {
141 |     if (this.subscriptions) this.subscriptions.forEach(sub => sub.remove());
142 |     if (this.props.backButtonClose && Platform.OS === 'android')
143 |       BackHandler.removeEventListener('hardwareBackPress', this.onBackPress);
144 |   }
145 | 
146 |   onBackPress() {
147 |     this.close();
148 |     return true;
149 |   }
150 | 
151 |   handleOpenning() {
152 |     if (typeof this.props.isOpen == 'undefined') return;
153 |     if (this.props.isOpen) this.open();
154 |     else this.close();
155 |   }
156 | 
157 |   /****************** ANIMATIONS **********************/
158 | 
159 |   /*
160 |    * The keyboard is hidden (IOS only)
161 |    */
162 |   onKeyboardHide(evt) {
163 |     this.setState({keyboardOffset: 0});
164 |   }
165 | 
166 |   /*
167 |    * The keyboard frame changed, used to detect when the keyboard open, faster than keyboardDidShow (IOS only)
168 |    */
169 |   onKeyboardChange(evt) {
170 |     if (!evt) return;
171 |     if (!this.state.isOpen) return;
172 |     const keyboardFrame = evt.endCoordinates;
173 |     const keyboardHeight = this.state.containerHeight - keyboardFrame.screenY;
174 | 
175 |     this.setState({keyboardOffset: keyboardHeight}, () => {
176 |       this.animateOpen();
177 |     });
178 |   }
179 | 
180 |   /*
181 |    * Open animation for the backdrop, will fade in
182 |    */
183 |   animateBackdropOpen() {
184 |     if (this.state.isAnimateBackdrop && this.state.animBackdrop) {
185 |       this.state.animBackdrop.stop();
186 |     }
187 |     this.setState({isAnimateBackdrop: true});
188 | 
189 |     let animBackdrop = Animated.timing(this.state.backdropOpacity, {
190 |       toValue: 1,
191 |       duration: this.props.animationDuration,
192 |       easing: this.props.easing,
193 |       useNativeDriver: this.props.useNativeDriver
194 |     }).start(() => {
195 |       this.setState({
196 |         isAnimateBackdrop: false,
197 |         animBackdrop
198 |       });
199 |     });
200 |   }
201 | 
202 |   /*
203 |    * Close animation for the backdrop, will fade out
204 |    */
205 |   animateBackdropClose() {
206 |     if (this.state.isAnimateBackdrop && this.state.animBackdrop) {
207 |       this.state.animBackdrop.stop();
208 |     }
209 |     this.setState({isAnimateBackdrop: true});
210 | 
211 |     let animBackdrop = Animated.timing(this.state.backdropOpacity, {
212 |       toValue: 0,
213 |       duration: this.props.animationDuration,
214 |       easing: this.props.easing,
215 |       useNativeDriver: this.props.useNativeDriver
216 |     }).start(() => {
217 |       this.setState({
218 |         isAnimateBackdrop: false,
219 |         animBackdrop
220 |       });
221 |     });
222 |   }
223 | 
224 |   /*
225 |    * Stop opening animation
226 |    */
227 |   stopAnimateOpen() {
228 |     if (this.state.isAnimateOpen) {
229 |       if (this.state.animOpen) this.state.animOpen.stop();
230 |       this.setState({isAnimateOpen: false});
231 |     }
232 |   }
233 | 
234 |   /*
235 |    * Open animation for the modal, will move up
236 |    */
237 |   animateOpen() {
238 |     this.stopAnimateClose();
239 | 
240 |     // Backdrop fadeIn
241 |     if (this.props.backdrop) this.animateBackdropOpen();
242 | 
243 |     this.setState(
244 |       {
245 |         isAnimateOpen: true,
246 |         isOpen: true
247 |       },
248 |       () => {
249 |         requestAnimationFrame(() => {
250 |           // Detecting modal position
251 |           let positionDest = this.calculateModalPosition(
252 |             this.state.containerHeight - this.state.keyboardOffset,
253 |             this.state.containerWidth
254 |           );
255 |           if (
256 |             this.state.keyboardOffset &&
257 |             positionDest < this.props.keyboardTopOffset
258 |           ) {
259 |             positionDest = this.props.keyboardTopOffset;
260 |           }
261 |           let animOpen = Animated.timing(this.state.position, {
262 |             toValue: positionDest,
263 |             duration: this.props.animationDuration,
264 |             easing: this.props.easing,
265 |             useNativeDriver: this.props.useNativeDriver
266 |           }).start(() => {
267 |             this.setState({
268 |               isAnimateOpen: false,
269 |               animOpen,
270 |               positionDest
271 |             });
272 |             if (this.props.onOpened) this.props.onOpened();
273 |           });
274 |         });
275 |       }
276 |     );
277 |   }
278 | 
279 |   /*
280 |    * Stop closing animation
281 |    */
282 |   stopAnimateClose() {
283 |     if (this.state.isAnimateClose) {
284 |       if (this.state.animClose) this.state.animClose.stop();
285 |       this.setState({isAnimateClose: false});
286 |     }
287 |   }
288 | 
289 |   /*
290 |    * Close animation for the modal, will move down
291 |    */
292 |   animateClose() {
293 |     this.stopAnimateOpen();
294 | 
295 |     // Backdrop fadeout
296 |     if (this.props.backdrop) this.animateBackdropClose();
297 | 
298 |     this.setState(
299 |       {
300 |         isAnimateClose: true,
301 |         isOpen: false
302 |       },
303 |       () => {
304 |         let animClose = Animated.timing(this.state.position, {
305 |           toValue:
306 |             this.props.entry === 'top'
307 |               ? -this.state.containerHeight
308 |               : this.state.containerHeight,
309 |           duration: this.props.animationDuration,
310 |           easing: this.props.easing,
311 |           useNativeDriver: this.props.useNativeDriver
312 |         }).start(() => {
313 |           // Keyboard.dismiss();   // make this optional. Easily user defined in .onClosed() callback
314 |           this.setState({
315 |             isAnimateClose: false,
316 |             animClose
317 |           }, () => {
318 |             /* Set the state to the starting position of the modal, preventing from animating where the swipe stopped */
319 |             this.state.position.setValue(this.props.entry === 'top' ? -this.state.containerHeight : this.state.containerHeight);
320 |           });
321 |           if (this.props.onClosed) this.props.onClosed();
322 |         });
323 |       }
324 |     );
325 |   }
326 | 
327 |   /*
328 |    * Calculate when should be placed the modal
329 |    */
330 |   calculateModalPosition(containerHeight, containerWidth) {
331 |     let position = 0;
332 | 
333 |     if (this.props.position == 'bottom') {
334 |       position = containerHeight - this.state.height;
335 |     } else if (this.props.position == 'center') {
336 |       position = containerHeight / 2 - this.state.height / 2;
337 |     }
338 |     // Checking if the position >= 0
339 |     if (position < 0) position = 0;
340 |     return position;
341 |   }
342 | 
343 |   /*
344 |    * Create the pan responder to detect gesture
345 |    * Only used if swipeToClose is enabled
346 |    */
347 |   createPanResponder(position) {
348 |     let closingState = false;
349 |     let inSwipeArea = false;
350 | 
351 |     const onPanStart = (evt, state) => {
352 |       if (
353 |         !this.props.swipeToClose ||
354 |         this.props.isDisabled ||
355 |         (this.props.swipeArea &&
356 |           evt.nativeEvent.pageY - this.state.positionDest >
357 |             this.props.swipeArea)
358 |       ) {
359 |         inSwipeArea = false;
360 |         return false;
361 |       }
362 |       inSwipeArea = true;
363 |       return true;
364 |     };
365 | 
366 |     const animEvt = Animated.event([null, {customY: position}], {useNativeDriver: false});
367 | 
368 |     const onPanMove = (evt, state) => {
369 |       const newClosingState =
370 |         this.props.entry === 'top'
371 |           ? -state.dy > this.props.swipeThreshold
372 |           : state.dy > this.props.swipeThreshold;
373 |       if (this.props.entry === 'top' ? state.dy > 0 : state.dy < 0) return;
374 |       if (newClosingState != closingState && this.props.onClosingState)
375 |         this.props.onClosingState(newClosingState);
376 |       closingState = newClosingState;
377 |       state.customY = state.dy + this.state.positionDest;
378 | 
379 |       animEvt(evt, state);
380 |     };
381 | 
382 |     const onPanRelease = (evt, state) => {
383 |       if (!inSwipeArea) return;
384 |       inSwipeArea = false;
385 |       if (
386 |         this.props.entry === 'top'
387 |           ? -state.dy > this.props.swipeThreshold
388 |           : state.dy > this.props.swipeThreshold
389 |       ) {
390 |         this.close();
391 |       } else if (!this.state.isOpen) {
392 |         this.animateOpen();
393 |       }
394 |     };
395 | 
396 |     return PanResponder.create({
397 |       onStartShouldSetPanResponder: onPanStart,
398 |       onPanResponderMove: onPanMove,
399 |       onPanResponderRelease: onPanRelease,
400 |       onPanResponderTerminate: onPanRelease
401 |     });
402 |   }
403 | 
404 |   /*
405 |    * Event called when the modal view layout is calculated
406 |    */
407 |   onViewLayout(evt) {
408 |     const height = evt.nativeEvent.layout.height;
409 |     const width = evt.nativeEvent.layout.width;
410 | 
411 |     // If the dimensions are still the same we're done
412 |     let newState = {};
413 |     if (height !== this.state.height) newState.height = height;
414 |     if (width !== this.state.width) newState.width = width;
415 |     this.setState(newState);
416 | 
417 |     if (this.onViewLayoutCalculated) this.onViewLayoutCalculated();
418 |   }
419 | 
420 |   /*
421 |    * Event called when the container view layout is calculated
422 |    */
423 |   onContainerLayout(evt) {
424 |     const height = evt.nativeEvent.layout.height;
425 |     const width = evt.nativeEvent.layout.width;
426 | 
427 |     // If the container size is still the same we're done
428 |     if (
429 |       height == this.state.containerHeight &&
430 |       width == this.state.containerWidth
431 |     ) {
432 |       this.setState({isInitialized: true});
433 |       return;
434 |     }
435 | 
436 |     if (this.state.isOpen || this.state.isAnimateOpen) {
437 |       this.animateOpen();
438 |     }
439 | 
440 |     if (this.props.onLayout) this.props.onLayout(evt);
441 |     this.setState({
442 |       isInitialized: true,
443 |       containerHeight: height,
444 |       containerWidth: width
445 |     });
446 |   }
447 | 
448 |   /*
449 |    * Render the backdrop element
450 |    */
451 |   renderBackdrop() {
452 |     let backdrop = null;
453 | 
454 |     if (this.props.backdrop) {
455 |       backdrop = (
456 |         <TouchableWithoutFeedback
457 |           onPress={this.props.backdropPressToClose ? this.close : null}>
458 |           <Animated.View
459 |             importantForAccessibility="no"
460 |             style={[styles.absolute, {opacity: this.state.backdropOpacity}]}>
461 |             <View
462 |               style={[
463 |                 styles.absolute,
464 |                 {
465 |                   backgroundColor: this.props.backdropColor,
466 |                   opacity: this.props.backdropOpacity
467 |                 }
468 |               ]}
469 |             />
470 |             {this.props.backdropContent || []}
471 |           </Animated.View>
472 |         </TouchableWithoutFeedback>
473 |       );
474 |     }
475 | 
476 |     return backdrop;
477 |   }
478 | 
479 |   renderContent() {
480 |     const size = {
481 |       height: this.state.containerHeight,
482 |       width: this.state.containerWidth
483 |     };
484 |     const offsetX = (this.state.containerWidth - this.state.width) / 2;
485 | 
486 |     return (
487 |       <Animated.View
488 |         onLayout={this.onViewLayout}
489 |         style={[
490 |           styles.wrapper,
491 |           size,
492 |           this.props.style,
493 |           {
494 |             transform: [
495 |               {translateY: this.state.position},
496 |               {translateX: offsetX}
497 |             ]
498 |           }
499 |         ]}
500 |         {...this.state.pan.panHandlers}>
501 |         {this.props.children}
502 |       </Animated.View>
503 |     );
504 |   }
505 | 
506 |   /*
507 |    * Render the component
508 |    */
509 |   render() {
510 |     const visible =
511 |       this.state.isOpen ||
512 |       this.state.isAnimateOpen ||
513 |       this.state.isAnimateClose;
514 | 
515 |     if (!visible) return <View />;
516 | 
517 |     const content = (
518 |       <View
519 |         importantForAccessibility="yes"
520 |         accessibilityViewIsModal={true}
521 |         style={[styles.transparent, styles.absolute]}
522 |         pointerEvents={'box-none'}>
523 |         <View
524 |           style={{flex: 1}}
525 |           pointerEvents={'box-none'}
526 |           onLayout={this.onContainerLayout}>
527 |           {visible && this.renderBackdrop()}
528 |           {visible && this.renderContent()}
529 |         </View>
530 |       </View>
531 |     );
532 | 
533 |     if (!this.props.coverScreen) return content;
534 | 
535 |     return (
536 |       <Modal
537 |         onRequestClose={() => {
538 |           if (this.props.backButtonClose) {
539 |             this.close();
540 |           }
541 |         }}
542 |         supportedOrientations={[
543 |           'landscape',
544 |           'portrait',
545 |           'portrait-upside-down'
546 |         ]}
547 |         transparent
548 |         visible={visible}
549 |         hardwareAccelerated={true}>
550 |         {content}
551 |       </Modal>
552 |     );
553 |   }
554 | 
555 |   /****************** PUBLIC METHODS **********************/
556 | 
557 |   open() {
558 |     if (this.props.isDisabled) return;
559 |     if (
560 |       !this.state.isAnimateOpen &&
561 |       (!this.state.isOpen || this.state.isAnimateClose)
562 |     ) {
563 |       this.onViewLayoutCalculated = () => {
564 |         this.animateOpen();
565 |         if (this.props.backButtonClose && Platform.OS === 'android')
566 |           BackHandler.addEventListener('hardwareBackPress', this.onBackPress);
567 |         this.onViewLayoutCalculated = null;
568 |       };
569 |       this.setState({isAnimateOpen: true});
570 |     }
571 |   }
572 | 
573 |   close() {
574 |     if (this.props.isDisabled) return;
575 |     if (
576 |       !this.state.isAnimateClose &&
577 |       (this.state.isOpen || this.state.isAnimateOpen)
578 |     ) {
579 |       this.animateClose();
580 |       if (this.props.backButtonClose && Platform.OS === 'android')
581 |         BackHandler.removeEventListener('hardwareBackPress', this.onBackPress);
582 |     }
583 |   }
584 | }
585 | 


--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
 1 | {
 2 |   "name": "react-native-modalbox",
 3 |   "version": "2.0.2",
 4 |   "description": "A <Modal/> component for react-native",
 5 |   "main": "index.js",
 6 |   "scripts": {
 7 |     "test": "echo \"Error: no test specified\" && exit 1"
 8 |   },
 9 |   "repository": {
10 |     "type": "git",
11 |     "url": "git+https://github.com/maxs15/react-native-modalbox.git"
12 |   },
13 |   "keywords": [
14 |     "react-component",
15 |     "react-native",
16 |     "ios",
17 |     "android",
18 |     "modal",
19 |     "box",
20 |     "modalbox",
21 |     "window",
22 |     "swipe"
23 |   ],
24 |   "author": "Max",
25 |   "license": "MIT",
26 |   "bugs": {
27 |     "url": "https://github.com/maxs15/react-native-modalbox/issues"
28 |   },
29 |   "homepage": "https://github.com/maxs15/react-native-modalbox#readme",
30 |   "dependencies": {
31 |     "prop-types": "^15.5.10"
32 |   }
33 | }
34 | 


--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
 2 | # yarn lockfile v1
 3 | 
 4 | 
 5 | asap@~2.0.3:
 6 |   version "2.0.6"
 7 |   resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
 8 | 
 9 | core-js@^1.0.0:
10 |   version "1.2.7"
11 |   resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
12 | 
13 | encoding@^0.1.11:
14 |   version "0.1.12"
15 |   resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
16 |   dependencies:
17 |     iconv-lite "~0.4.13"
18 | 
19 | fbjs@^0.8.9:
20 |   version "0.8.12"
21 |   resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04"
22 |   dependencies:
23 |     core-js "^1.0.0"
24 |     isomorphic-fetch "^2.1.1"
25 |     loose-envify "^1.0.0"
26 |     object-assign "^4.1.0"
27 |     promise "^7.1.1"
28 |     setimmediate "^1.0.5"
29 |     ua-parser-js "^0.7.9"
30 | 
31 | iconv-lite@~0.4.13:
32 |   version "0.4.18"
33 |   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2"
34 | 
35 | is-stream@^1.0.1:
36 |   version "1.1.0"
37 |   resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
38 | 
39 | isomorphic-fetch@^2.1.1:
40 |   version "2.2.1"
41 |   resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
42 |   dependencies:
43 |     node-fetch "^1.0.1"
44 |     whatwg-fetch ">=0.10.0"
45 | 
46 | js-tokens@^3.0.0:
47 |   version "3.0.2"
48 |   resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
49 | 
50 | loose-envify@^1.0.0, loose-envify@^1.3.1:
51 |   version "1.3.1"
52 |   resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
53 |   dependencies:
54 |     js-tokens "^3.0.0"
55 | 
56 | node-fetch@^1.0.1:
57 |   version "1.7.1"
58 |   resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.1.tgz#899cb3d0a3c92f952c47f1b876f4c8aeabd400d5"
59 |   dependencies:
60 |     encoding "^0.1.11"
61 |     is-stream "^1.0.1"
62 | 
63 | object-assign@^4.1.0:
64 |   version "4.1.1"
65 |   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
66 | 
67 | promise@^7.1.1:
68 |   version "7.3.1"
69 |   resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
70 |   dependencies:
71 |     asap "~2.0.3"
72 | 
73 | prop-types@^15.5.10:
74 |   version "15.5.10"
75 |   resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154"
76 |   dependencies:
77 |     fbjs "^0.8.9"
78 |     loose-envify "^1.3.1"
79 | 
80 | setimmediate@^1.0.5:
81 |   version "1.0.5"
82 |   resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
83 | 
84 | ua-parser-js@^0.7.9:
85 |   version "0.7.13"
86 |   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.13.tgz#cd9dd2f86493b3f44dbeeef3780fda74c5ee14be"
87 | 
88 | whatwg-fetch@>=0.10.0:
89 |   version "2.0.3"
90 |   resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
91 | 


--------------------------------------------------------------------------------