├── .gitignore ├── BeerApp.js ├── BeerCell.js ├── BeerScreen.js ├── LICENSE ├── README.md ├── SearchScreen.js ├── beerReact.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcshareddata │ └── xcschemes │ └── beerReact.xcscheme ├── iOS ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ └── LaunchScreen.xib ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── circle.imageset │ │ ├── Contents.json │ │ └── circle@2x.png │ └── generic.imageset │ │ ├── Contents.json │ │ └── generic@2x.png ├── Info.plist └── main.m └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | 29 | .DS_Store 30 | *.swp 31 | *~.nib 32 | 33 | build/ 34 | 35 | *.pbxuser 36 | *.perspective 37 | *.perspectivev3 38 | xcuserdata 39 | -------------------------------------------------------------------------------- /BeerApp.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | AppRegistry, 6 | NavigatorIOS, 7 | StyleSheet 8 | } = React; 9 | 10 | var SearchScreen = require('./SearchScreen'); 11 | 12 | var BeerApp = React.createClass({ 13 | render: function() { 14 | return ( 15 | 22 | ); 23 | } 24 | }); 25 | 26 | var styles = StyleSheet.create({ 27 | container: { 28 | flex: 1, 29 | backgroundColor: 'yellow' 30 | } 31 | }); 32 | 33 | AppRegistry.registerComponent('BeerApp', ()=> BeerApp); 34 | 35 | module.exports = BeerApp; -------------------------------------------------------------------------------- /BeerCell.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | Image, 6 | PixelRatio, 7 | StyleSheet, 8 | Text, 9 | TouchableHighlight, 10 | View 11 | } = React; 12 | 13 | var BeerCell = React.createClass({ 14 | render: function() { 15 | var alcoholLevel = this.props.beer.alcohol; 16 | return ( 17 | 18 | 19 | 20 | 21 | 22 | 23 | {this.props.beer.name} 24 | 25 | 26 | {this.props.beer.tags} 27 | 28 | 29 | 30 | 33 | 34 | 35 | {this.props.beer.alcohol} 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | ); 46 | } 47 | }); 48 | 49 | var styles = StyleSheet.create({ 50 | textContainer: { 51 | flex: 1, 52 | flexDirection: 'row', 53 | }, 54 | beerName: { 55 | flex: 1, 56 | fontSize: 16, 57 | fontWeight: '500', 58 | marginBottom: 2, 59 | }, 60 | beerStyle: { 61 | color: '#999999', 62 | fontSize: 12, 63 | }, 64 | row: { 65 | alignItems: 'center', 66 | backgroundColor: 'white', 67 | flexDirection: 'row', 68 | padding: 5, 69 | }, 70 | cellImage: { 71 | backgroundColor: '#dddddd', 72 | height: 93, 73 | marginRight: 10, 74 | width: 60, 75 | }, 76 | cellBorder: { 77 | backgroundColor: 'rgba(0, 0, 0, 0.1)', 78 | // Trick to get the thinest line the device can display 79 | height: 1 / PixelRatio.get(), 80 | marginLeft: 4, 81 | }, 82 | }); 83 | 84 | module.exports = BeerCell; -------------------------------------------------------------------------------- /BeerScreen.js: -------------------------------------------------------------------------------- 1 | 2 | 'use strict'; 3 | 4 | var React = require('react-native'); 5 | var { 6 | Image, 7 | PixelRatio, 8 | ScrollView, 9 | StyleSheet, 10 | Text, 11 | View, 12 | } = React; 13 | 14 | var BeerScreen = React.createClass({ 15 | render: function() { 16 | return ( 17 | 18 | 19 | 20 | 21 | {this.props.beer.name} 22 | {this.props.beer.brewery} 23 | 24 | 25 | 26 | 30 | 31 | 33 | 36 | 38 | 39 | {this.props.beer.alcohol} 40 | 41 | 42 | 43 | 44 | 45 | 46 | {this.props.beer.brewery} 47 | 48 | 49 | {this.props.beer.tags} 50 | 51 | 52 | 53 | 54 | ); 55 | }, 56 | }); 57 | 58 | var styles = StyleSheet.create({ 59 | contentContainer: { 60 | padding: 10, 61 | }, 62 | mainSection: { 63 | flexDirection: 'row', 64 | }, 65 | cardSection: { 66 | flex: 1, 67 | shadowColor: '#cccccc', 68 | shadowOffset: {h: 3, w: 3}, 69 | shadowRadius: 5, 70 | }, 71 | cardTopSection: { 72 | flex: 1, 73 | borderWidth: 1, 74 | borderColor: '#dddddd', 75 | padding: 16, 76 | }, 77 | cardBeerSection: { 78 | borderColor: '#dddddd', 79 | borderWidth: 1, 80 | marginTop: -1, 81 | flex: 1, 82 | flexDirection: 'row', 83 | }, 84 | cardHomeSection: { 85 | borderColor: '#dddddd', 86 | borderWidth: 1, 87 | marginTop: -1, 88 | flex: 1, 89 | flexDirection: 'row', 90 | padding: 16, 91 | }, 92 | cardTagSection: { 93 | borderColor: '#dddddd', 94 | borderWidth: 1, 95 | marginTop: -1, 96 | flex: 1, 97 | flexDirection: 'row', 98 | padding: 16, 99 | }, 100 | beerName: { 101 | flex: 1, 102 | fontSize: 16, 103 | marginTop: 0, 104 | marginRight: 0, 105 | marginLeft: 0, 106 | marginBottom: 2, 107 | color: 'black', 108 | fontWeight: 'normal', 109 | fontFamily: "Helvetica Neue", 110 | }, 111 | beerBrewery: { 112 | flex: 1, 113 | color: '#666666', 114 | fontSize: 14, 115 | fontWeight: 'normal', 116 | fontFamily: "Helvetica Neue", 117 | }, 118 | beerImage: { 119 | width: 100, 120 | height: 200, 121 | // backgroundColor: '#eaeaea', 122 | resizeMode: 'contain', 123 | }, 124 | alcoholPercentage: { 125 | flex: 1, 126 | justifyContent: 'space-between', 127 | fontSize: 20, 128 | }, 129 | }); 130 | 131 | module.exports = BeerScreen; -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Murat Sutunc 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 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Belgian Beer Explorer in react-native 2 | A Belgian Beer Explorer app based on the movie sample from react-native examples. 3 | 4 | ![](http://media.giphy.com/media/xTiTns7Pex8zlCjT0Y/giphy.gif) -------------------------------------------------------------------------------- /SearchScreen.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | 5 | var { 6 | ActivityIndicatorIOS, 7 | ListView, 8 | StyleSheet, 9 | Text, 10 | TextInput, 11 | View, 12 | } = React; 13 | var TimerMixin = require('react-timer-mixin'); 14 | 15 | var BeerCell = require('./BeerCell'); 16 | var BeerScreen = require('./BeerScreen'); 17 | 18 | var fetch = require('fetch'); 19 | 20 | var API_URL = 'http://belgianbeerexplorer.coenraets.org/products'; 21 | 22 | // Results should be cached keyed by the query 23 | // with values of null meaning "being fetched" 24 | // and anything besides null and undefined 25 | // as the result of a valid query 26 | var resultsCache = { 27 | dataForQuery: {}, 28 | nextPageNumberForQuery: {}, 29 | totalForQuery: {}, 30 | }; 31 | 32 | var LOADING = {}; 33 | 34 | var SearchScreen = React.createClass({ 35 | mixins: [TimerMixin], 36 | 37 | timeoutID: (null: any), 38 | 39 | getInitialState: function() { 40 | return { 41 | isLoading: false, 42 | isLoadingTail: false, 43 | dataSource: new ListView.DataSource({ 44 | rowHasChanged: (row1, row2) => row1 !== row2, 45 | }), 46 | filter: '', 47 | queryNumber: 0, 48 | }; 49 | }, 50 | 51 | componentDidMount: function() { 52 | this.searchBeers(''); 53 | }, 54 | 55 | _urlForQueryAndPage: function(query: string, pageNumber: ?number): string { 56 | if (query) { 57 | return ( 58 | API_URL + '?search=' + encodeURIComponent(query) + 59 | '&page_limit=20&page=' + pageNumber 60 | ); 61 | } else { 62 | return ( 63 | API_URL + '?pageSize=20&page=' + pageNumber 64 | ); 65 | } 66 | }, 67 | 68 | searchBeers: function(query: string) { 69 | this.timeoutID = null; 70 | 71 | this.setState({filter: query}); 72 | 73 | var cachedResultsForQuery = resultsCache.dataForQuery[query]; 74 | if (cachedResultsForQuery) { 75 | if (!LOADING[query]) { 76 | this.setState({ 77 | dataSource: this.getDataSource(cachedResultsForQuery), 78 | isLoading: false 79 | }); 80 | } else { 81 | this.setState({isLoading: true}); 82 | } 83 | return; 84 | } 85 | 86 | LOADING[query] = true; 87 | resultsCache.dataForQuery[query] = null; 88 | this.setState({ 89 | isLoading: true, 90 | queryNumber: this.state.queryNumber + 1, 91 | isLoadingTail: false, 92 | }); 93 | 94 | fetch(this._urlForQueryAndPage(query, 1)) 95 | .then((response) => response.json()) 96 | .then((responseData) => { 97 | LOADING[query] = false; 98 | resultsCache.totalForQuery[query] = responseData.total; 99 | resultsCache.dataForQuery[query] = responseData.products; 100 | resultsCache.nextPageNumberForQuery[query] = 2; 101 | 102 | if (this.state.filter !== query) { 103 | // do not update state if the query is stale 104 | return; 105 | } 106 | 107 | this.setState({ 108 | isLoading: false, 109 | dataSource: this.getDataSource(responseData.products), 110 | }); 111 | }) 112 | .catch((error) => { 113 | LOADING[query] = false; 114 | resultsCache.dataForQuery[query] = undefined; 115 | 116 | this.setState({ 117 | dataSource: this.getDataSource([]), 118 | isLoading: false, 119 | }); 120 | }) 121 | .done(); 122 | }, 123 | 124 | hasMore: function(): boolean { 125 | var query = this.state.filter; 126 | if (!resultsCache.dataForQuery[query]) { 127 | return true; 128 | } 129 | return ( 130 | resultsCache.totalForQuery[query] !== 131 | resultsCache.dataForQuery[query].length 132 | ); 133 | }, 134 | 135 | onEndReached: function() { 136 | var query = this.state.filter; 137 | if (!this.hasMore() || this.state.isLoadingTail) { 138 | // We're already fetching or have all the elements so noop 139 | return; 140 | } 141 | 142 | if (LOADING[query]) { 143 | return; 144 | } 145 | 146 | LOADING[query] = true; 147 | this.setState({ 148 | queryNumber: this.state.queryNumber + 1, 149 | isLoadingTail: true, 150 | }); 151 | 152 | var page = resultsCache.nextPageNumberForQuery[query]; 153 | fetch(this._urlForQueryAndPage(query, page)) 154 | .then((response) => response.json()) 155 | .catch((error) => { 156 | console.error(error); 157 | LOADING[query] = false; 158 | this.setState({ 159 | isLoadingTail: false, 160 | }); 161 | }) 162 | .then((responseData) => { 163 | var beersForQuery = resultsCache.dataForQuery[query].slice(); 164 | 165 | LOADING[query] = false; 166 | // We reached the end of the list before the expected number of results 167 | if (!responseData.products) { 168 | resultsCache.totalForQuery[query] = beersForQuery.length; 169 | } else { 170 | for (var i in responseData.products) { 171 | beersForQuery.push(responseData.products[i]); 172 | } 173 | resultsCache.dataForQuery[query] = beersForQuery; 174 | resultsCache.nextPageNumberForQuery[query] += 1; 175 | } 176 | 177 | if (this.state.filter !== query) { 178 | // do not update state if the query is stale 179 | return; 180 | } 181 | 182 | this.setState({ 183 | isLoadingTail: false, 184 | dataSource: this.getDataSource(resultsCache.dataForQuery[query]), 185 | }); 186 | }) 187 | .done(); 188 | }, 189 | 190 | getDataSource: function(beers: Array): ListView.DataSource { 191 | return this.state.dataSource.cloneWithRows(beers); 192 | }, 193 | 194 | selectBeer: function(beer: Object) { 195 | this.props.navigator.push({ 196 | title: beer.name, 197 | component: BeerScreen, 198 | passProps: {beer}, 199 | }); 200 | }, 201 | 202 | onSearchChange: function(event: Object) { 203 | var filter = event.nativeEvent.text.toLowerCase(); 204 | 205 | this.clearTimeout(this.timeoutID); 206 | this.timeoutID = this.setTimeout(() => this.searchBeers(filter), 100); 207 | }, 208 | 209 | renderFooter: function() { 210 | if (!this.hasMore() || !this.state.isLoadingTail) { 211 | return ; 212 | } 213 | return ; 214 | }, 215 | 216 | renderRow: function(beer: Object) { 217 | return ( 218 | this.selectBeer(beer)} 220 | beer={beer} 221 | /> 222 | ); 223 | }, 224 | 225 | render: function() { 226 | var content = this.state.dataSource.getRowCount() === 0 ? 227 | : 231 | ; 242 | 243 | return ( 244 | 245 | this.refs.listview.getScrollResponder().scrollTo(0, 0)} 249 | /> 250 | 251 | {content} 252 | 253 | ); 254 | }, 255 | }); 256 | 257 | var NoBeers = React.createClass({ 258 | render: function() { 259 | var text = ''; 260 | if (this.props.filter) { 261 | text = `No results for “${this.props.filter}”`; 262 | } else if (!this.props.isLoading) { 263 | // no results, show a message 264 | text = 'No beers found'; 265 | } 266 | 267 | return ( 268 | 269 | {text} 270 | 271 | ); 272 | } 273 | }); 274 | 275 | var SearchBar = React.createClass({ 276 | render: function() { 277 | return ( 278 | 279 | 287 | 291 | 292 | ); 293 | } 294 | }); 295 | 296 | var styles = StyleSheet.create({ 297 | container: { 298 | flex: 1, 299 | backgroundColor: 'white', 300 | }, 301 | centerText: { 302 | alignItems: 'center', 303 | }, 304 | noBeersText: { 305 | marginTop: 80, 306 | color: '#888888', 307 | }, 308 | searchBar: { 309 | marginTop: 64, 310 | padding: 3, 311 | paddingLeft: 8, 312 | flexDirection: 'row', 313 | alignItems: 'center', 314 | }, 315 | searchBarInput: { 316 | fontSize: 15, 317 | flex: 1, 318 | height: 30, 319 | }, 320 | separator: { 321 | height: 1, 322 | backgroundColor: '#eeeeee', 323 | }, 324 | spinner: { 325 | width: 30, 326 | }, 327 | scrollSpinner: { 328 | marginVertical: 20, 329 | }, 330 | }); 331 | 332 | module.exports = SearchScreen; -------------------------------------------------------------------------------- /beerReact.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00481BE81AC0C86700671115 /* libRCTWebSocketDebugger.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00481BE61AC0C7FA00671115 /* libRCTWebSocketDebugger.a */; }; 11 | 00481BEA1AC0C89D00671115 /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 00481BE91AC0C89D00671115 /* libicucore.dylib */; }; 12 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 13 | 00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */; }; 14 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 15 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 16 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 17 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 18 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 19 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 20 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 21 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 22 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 23 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXContainerItemProxy section */ 27 | 00481BE51AC0C7FA00671115 /* PBXContainerItemProxy */ = { 28 | isa = PBXContainerItemProxy; 29 | containerPortal = 00481BDB1AC0C7FA00671115 /* RCTWebSocketDebugger.xcodeproj */; 30 | proxyType = 2; 31 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 32 | remoteInfo = RCTWebSocketDebugger; 33 | }; 34 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 37 | proxyType = 2; 38 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 39 | remoteInfo = RCTActionSheet; 40 | }; 41 | 00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */; 44 | proxyType = 2; 45 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 46 | remoteInfo = RCTAdSupport; 47 | }; 48 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 51 | proxyType = 2; 52 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 53 | remoteInfo = RCTGeolocation; 54 | }; 55 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 58 | proxyType = 2; 59 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 60 | remoteInfo = RCTImage; 61 | }; 62 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 65 | proxyType = 2; 66 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 67 | remoteInfo = RCTNetwork; 68 | }; 69 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 70 | isa = PBXContainerItemProxy; 71 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 72 | proxyType = 2; 73 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 74 | remoteInfo = RCTVibration; 75 | }; 76 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 77 | isa = PBXContainerItemProxy; 78 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 79 | proxyType = 2; 80 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 81 | remoteInfo = React; 82 | }; 83 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 84 | isa = PBXContainerItemProxy; 85 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 86 | proxyType = 2; 87 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 88 | remoteInfo = RCTText; 89 | }; 90 | /* End PBXContainerItemProxy section */ 91 | 92 | /* Begin PBXFileReference section */ 93 | 00481BDB1AC0C7FA00671115 /* RCTWebSocketDebugger.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocketDebugger.xcodeproj; path = "node_modules/react-native/Libraries/RCTWebSocketDebugger/RCTWebSocketDebugger.xcodeproj"; sourceTree = ""; }; 94 | 00481BE91AC0C89D00671115 /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; 95 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 96 | 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTAdSupport.xcodeproj; path = "node_modules/react-native/Libraries/AdSupport/RCTAdSupport.xcodeproj"; sourceTree = ""; }; 97 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 98 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 99 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 100 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 101 | 13B07F961A680F5B00A75B9A /* beerReact.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = beerReact.app; sourceTree = BUILT_PRODUCTS_DIR; }; 102 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iOS/AppDelegate.h; sourceTree = ""; }; 103 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iOS/AppDelegate.m; sourceTree = ""; }; 104 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 105 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = ""; }; 106 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = ""; }; 107 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOS/main.m; sourceTree = ""; }; 108 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 109 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 110 | /* End PBXFileReference section */ 111 | 112 | /* Begin PBXFrameworksBuildPhase section */ 113 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 114 | isa = PBXFrameworksBuildPhase; 115 | buildActionMask = 2147483647; 116 | files = ( 117 | 00481BEA1AC0C89D00671115 /* libicucore.dylib in Frameworks */, 118 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 119 | 00481BE81AC0C86700671115 /* libRCTWebSocketDebugger.a in Frameworks */, 120 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 121 | 00C302E61ABCBA2D00DB3ED1 /* libRCTAdSupport.a in Frameworks */, 122 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 123 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 124 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 125 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 126 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 127 | ); 128 | runOnlyForDeploymentPostprocessing = 0; 129 | }; 130 | /* End PBXFrameworksBuildPhase section */ 131 | 132 | /* Begin PBXGroup section */ 133 | 00481BDC1AC0C7FA00671115 /* Products */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | 00481BE61AC0C7FA00671115 /* libRCTWebSocketDebugger.a */, 137 | ); 138 | name = Products; 139 | sourceTree = ""; 140 | }; 141 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 145 | ); 146 | name = Products; 147 | sourceTree = ""; 148 | }; 149 | 00C302B01ABCB8E700DB3ED1 /* Products */ = { 150 | isa = PBXGroup; 151 | children = ( 152 | 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */, 153 | ); 154 | name = Products; 155 | sourceTree = ""; 156 | }; 157 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 161 | ); 162 | name = Products; 163 | sourceTree = ""; 164 | }; 165 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 169 | ); 170 | name = Products; 171 | sourceTree = ""; 172 | }; 173 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 174 | isa = PBXGroup; 175 | children = ( 176 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 177 | ); 178 | name = Products; 179 | sourceTree = ""; 180 | }; 181 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 182 | isa = PBXGroup; 183 | children = ( 184 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 185 | ); 186 | name = Products; 187 | sourceTree = ""; 188 | }; 189 | 13B07FAE1A68108700A75B9A /* beerReact */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 193 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 194 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 195 | 13B07FB61A68108700A75B9A /* Info.plist */, 196 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 197 | 13B07FB71A68108700A75B9A /* main.m */, 198 | ); 199 | name = beerReact; 200 | sourceTree = ""; 201 | }; 202 | 146834001AC3E56700842450 /* Products */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 146834041AC3E56700842450 /* libReact.a */, 206 | ); 207 | name = Products; 208 | sourceTree = ""; 209 | }; 210 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 214 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 215 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 216 | 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */, 217 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 218 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 219 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 220 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 221 | 00481BDB1AC0C7FA00671115 /* RCTWebSocketDebugger.xcodeproj */, 222 | 00481BE91AC0C89D00671115 /* libicucore.dylib */, 223 | ); 224 | name = Libraries; 225 | sourceTree = ""; 226 | }; 227 | 832341B11AAA6A8300B99B32 /* Products */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 231 | ); 232 | name = Products; 233 | sourceTree = ""; 234 | }; 235 | 83CBB9F61A601CBA00E9B192 = { 236 | isa = PBXGroup; 237 | children = ( 238 | 13B07FAE1A68108700A75B9A /* beerReact */, 239 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 240 | 83CBBA001A601CBA00E9B192 /* Products */, 241 | ); 242 | sourceTree = ""; 243 | }; 244 | 83CBBA001A601CBA00E9B192 /* Products */ = { 245 | isa = PBXGroup; 246 | children = ( 247 | 13B07F961A680F5B00A75B9A /* beerReact.app */, 248 | ); 249 | name = Products; 250 | sourceTree = ""; 251 | }; 252 | /* End PBXGroup section */ 253 | 254 | /* Begin PBXNativeTarget section */ 255 | 13B07F861A680F5B00A75B9A /* beerReact */ = { 256 | isa = PBXNativeTarget; 257 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "beerReact" */; 258 | buildPhases = ( 259 | 13B07F871A680F5B00A75B9A /* Sources */, 260 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 261 | 13B07F8E1A680F5B00A75B9A /* Resources */, 262 | ); 263 | buildRules = ( 264 | ); 265 | dependencies = ( 266 | ); 267 | name = beerReact; 268 | productName = "Hello World"; 269 | productReference = 13B07F961A680F5B00A75B9A /* beerReact.app */; 270 | productType = "com.apple.product-type.application"; 271 | }; 272 | /* End PBXNativeTarget section */ 273 | 274 | /* Begin PBXProject section */ 275 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 276 | isa = PBXProject; 277 | attributes = { 278 | LastUpgradeCheck = 0610; 279 | ORGANIZATIONNAME = Facebook; 280 | }; 281 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "beerReact" */; 282 | compatibilityVersion = "Xcode 3.2"; 283 | developmentRegion = English; 284 | hasScannedForEncodings = 0; 285 | knownRegions = ( 286 | en, 287 | Base, 288 | ); 289 | mainGroup = 83CBB9F61A601CBA00E9B192; 290 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 291 | projectDirPath = ""; 292 | projectReferences = ( 293 | { 294 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 295 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 296 | }, 297 | { 298 | ProductGroup = 00C302B01ABCB8E700DB3ED1 /* Products */; 299 | ProjectRef = 00C302AF1ABCB8E700DB3ED1 /* RCTAdSupport.xcodeproj */; 300 | }, 301 | { 302 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 303 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 304 | }, 305 | { 306 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 307 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 308 | }, 309 | { 310 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 311 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 312 | }, 313 | { 314 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 315 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 316 | }, 317 | { 318 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 319 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 320 | }, 321 | { 322 | ProductGroup = 00481BDC1AC0C7FA00671115 /* Products */; 323 | ProjectRef = 00481BDB1AC0C7FA00671115 /* RCTWebSocketDebugger.xcodeproj */; 324 | }, 325 | { 326 | ProductGroup = 146834001AC3E56700842450 /* Products */; 327 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 328 | }, 329 | ); 330 | projectRoot = ""; 331 | targets = ( 332 | 13B07F861A680F5B00A75B9A /* beerReact */, 333 | ); 334 | }; 335 | /* End PBXProject section */ 336 | 337 | /* Begin PBXReferenceProxy section */ 338 | 00481BE61AC0C7FA00671115 /* libRCTWebSocketDebugger.a */ = { 339 | isa = PBXReferenceProxy; 340 | fileType = archive.ar; 341 | path = libRCTWebSocketDebugger.a; 342 | remoteRef = 00481BE51AC0C7FA00671115 /* PBXContainerItemProxy */; 343 | sourceTree = BUILT_PRODUCTS_DIR; 344 | }; 345 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 346 | isa = PBXReferenceProxy; 347 | fileType = archive.ar; 348 | path = libRCTActionSheet.a; 349 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 350 | sourceTree = BUILT_PRODUCTS_DIR; 351 | }; 352 | 00C302B41ABCB8E700DB3ED1 /* libRCTAdSupport.a */ = { 353 | isa = PBXReferenceProxy; 354 | fileType = archive.ar; 355 | path = libRCTAdSupport.a; 356 | remoteRef = 00C302B31ABCB8E700DB3ED1 /* PBXContainerItemProxy */; 357 | sourceTree = BUILT_PRODUCTS_DIR; 358 | }; 359 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 360 | isa = PBXReferenceProxy; 361 | fileType = archive.ar; 362 | path = libRCTGeolocation.a; 363 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 364 | sourceTree = BUILT_PRODUCTS_DIR; 365 | }; 366 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 367 | isa = PBXReferenceProxy; 368 | fileType = archive.ar; 369 | path = libRCTImage.a; 370 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 371 | sourceTree = BUILT_PRODUCTS_DIR; 372 | }; 373 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 374 | isa = PBXReferenceProxy; 375 | fileType = archive.ar; 376 | path = libRCTNetwork.a; 377 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 378 | sourceTree = BUILT_PRODUCTS_DIR; 379 | }; 380 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 381 | isa = PBXReferenceProxy; 382 | fileType = archive.ar; 383 | path = libRCTVibration.a; 384 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 385 | sourceTree = BUILT_PRODUCTS_DIR; 386 | }; 387 | 146834041AC3E56700842450 /* libReact.a */ = { 388 | isa = PBXReferenceProxy; 389 | fileType = archive.ar; 390 | path = libReact.a; 391 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 392 | sourceTree = BUILT_PRODUCTS_DIR; 393 | }; 394 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 395 | isa = PBXReferenceProxy; 396 | fileType = archive.ar; 397 | path = libRCTText.a; 398 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 399 | sourceTree = BUILT_PRODUCTS_DIR; 400 | }; 401 | /* End PBXReferenceProxy section */ 402 | 403 | /* Begin PBXResourcesBuildPhase section */ 404 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 405 | isa = PBXResourcesBuildPhase; 406 | buildActionMask = 2147483647; 407 | files = ( 408 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 409 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 410 | ); 411 | runOnlyForDeploymentPostprocessing = 0; 412 | }; 413 | /* End PBXResourcesBuildPhase section */ 414 | 415 | /* Begin PBXSourcesBuildPhase section */ 416 | 13B07F871A680F5B00A75B9A /* Sources */ = { 417 | isa = PBXSourcesBuildPhase; 418 | buildActionMask = 2147483647; 419 | files = ( 420 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 421 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 422 | ); 423 | runOnlyForDeploymentPostprocessing = 0; 424 | }; 425 | /* End PBXSourcesBuildPhase section */ 426 | 427 | /* Begin PBXVariantGroup section */ 428 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 429 | isa = PBXVariantGroup; 430 | children = ( 431 | 13B07FB21A68108700A75B9A /* Base */, 432 | ); 433 | name = LaunchScreen.xib; 434 | path = iOS; 435 | sourceTree = ""; 436 | }; 437 | /* End PBXVariantGroup section */ 438 | 439 | /* Begin XCBuildConfiguration section */ 440 | 13B07F941A680F5B00A75B9A /* Debug */ = { 441 | isa = XCBuildConfiguration; 442 | buildSettings = { 443 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 444 | HEADER_SEARCH_PATHS = ( 445 | "$(inherited)", 446 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 447 | "$(SRCROOT)/node_modules/react-native/React/**", 448 | ); 449 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; 450 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 451 | OTHER_LDFLAGS = "-ObjC"; 452 | PRODUCT_NAME = beerReact; 453 | }; 454 | name = Debug; 455 | }; 456 | 13B07F951A680F5B00A75B9A /* Release */ = { 457 | isa = XCBuildConfiguration; 458 | buildSettings = { 459 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 460 | HEADER_SEARCH_PATHS = ( 461 | "$(inherited)", 462 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 463 | "$(SRCROOT)/node_modules/react-native/React/**", 464 | ); 465 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; 466 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 467 | OTHER_LDFLAGS = "-ObjC"; 468 | PRODUCT_NAME = beerReact; 469 | }; 470 | name = Release; 471 | }; 472 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 473 | isa = XCBuildConfiguration; 474 | buildSettings = { 475 | ALWAYS_SEARCH_USER_PATHS = NO; 476 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 477 | CLANG_CXX_LIBRARY = "libc++"; 478 | CLANG_ENABLE_MODULES = YES; 479 | CLANG_ENABLE_OBJC_ARC = YES; 480 | CLANG_WARN_BOOL_CONVERSION = YES; 481 | CLANG_WARN_CONSTANT_CONVERSION = YES; 482 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 483 | CLANG_WARN_EMPTY_BODY = YES; 484 | CLANG_WARN_ENUM_CONVERSION = YES; 485 | CLANG_WARN_INT_CONVERSION = YES; 486 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 487 | CLANG_WARN_UNREACHABLE_CODE = YES; 488 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 489 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 490 | COPY_PHASE_STRIP = NO; 491 | ENABLE_STRICT_OBJC_MSGSEND = YES; 492 | GCC_C_LANGUAGE_STANDARD = gnu99; 493 | GCC_DYNAMIC_NO_PIC = NO; 494 | GCC_OPTIMIZATION_LEVEL = 0; 495 | GCC_PREPROCESSOR_DEFINITIONS = ( 496 | "DEBUG=1", 497 | "$(inherited)", 498 | ); 499 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 500 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 501 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 502 | GCC_WARN_UNDECLARED_SELECTOR = YES; 503 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 504 | GCC_WARN_UNUSED_FUNCTION = YES; 505 | GCC_WARN_UNUSED_VARIABLE = YES; 506 | HEADER_SEARCH_PATHS = ( 507 | "$(inherited)", 508 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 509 | "$(SRCROOT)/node_modules/react-native/React/**", 510 | ); 511 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 512 | MTL_ENABLE_DEBUG_INFO = YES; 513 | ONLY_ACTIVE_ARCH = YES; 514 | SDKROOT = iphoneos; 515 | }; 516 | name = Debug; 517 | }; 518 | 83CBBA211A601CBA00E9B192 /* Release */ = { 519 | isa = XCBuildConfiguration; 520 | buildSettings = { 521 | ALWAYS_SEARCH_USER_PATHS = NO; 522 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 523 | CLANG_CXX_LIBRARY = "libc++"; 524 | CLANG_ENABLE_MODULES = YES; 525 | CLANG_ENABLE_OBJC_ARC = YES; 526 | CLANG_WARN_BOOL_CONVERSION = YES; 527 | CLANG_WARN_CONSTANT_CONVERSION = YES; 528 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 529 | CLANG_WARN_EMPTY_BODY = YES; 530 | CLANG_WARN_ENUM_CONVERSION = YES; 531 | CLANG_WARN_INT_CONVERSION = YES; 532 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 533 | CLANG_WARN_UNREACHABLE_CODE = YES; 534 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 535 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 536 | COPY_PHASE_STRIP = YES; 537 | ENABLE_NS_ASSERTIONS = NO; 538 | ENABLE_STRICT_OBJC_MSGSEND = YES; 539 | GCC_C_LANGUAGE_STANDARD = gnu99; 540 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 541 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 542 | GCC_WARN_UNDECLARED_SELECTOR = YES; 543 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 544 | GCC_WARN_UNUSED_FUNCTION = YES; 545 | GCC_WARN_UNUSED_VARIABLE = YES; 546 | HEADER_SEARCH_PATHS = ( 547 | "$(inherited)", 548 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 549 | "$(SRCROOT)/node_modules/react-native/React/**", 550 | ); 551 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 552 | MTL_ENABLE_DEBUG_INFO = NO; 553 | SDKROOT = iphoneos; 554 | VALIDATE_PRODUCT = YES; 555 | }; 556 | name = Release; 557 | }; 558 | /* End XCBuildConfiguration section */ 559 | 560 | /* Begin XCConfigurationList section */ 561 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "beerReact" */ = { 562 | isa = XCConfigurationList; 563 | buildConfigurations = ( 564 | 13B07F941A680F5B00A75B9A /* Debug */, 565 | 13B07F951A680F5B00A75B9A /* Release */, 566 | ); 567 | defaultConfigurationIsVisible = 0; 568 | defaultConfigurationName = Release; 569 | }; 570 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "beerReact" */ = { 571 | isa = XCConfigurationList; 572 | buildConfigurations = ( 573 | 83CBBA201A601CBA00E9B192 /* Debug */, 574 | 83CBBA211A601CBA00E9B192 /* Release */, 575 | ); 576 | defaultConfigurationIsVisible = 0; 577 | defaultConfigurationName = Release; 578 | }; 579 | /* End XCConfigurationList section */ 580 | }; 581 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 582 | } 583 | -------------------------------------------------------------------------------- /beerReact.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /beerReact.xcodeproj/xcshareddata/xcschemes/beerReact.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 51 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 70 | 72 | 78 | 79 | 80 | 81 | 83 | 84 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /iOS/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /iOS/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import "RCTRootView.h" 13 | 14 | @implementation AppDelegate 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | NSURL *jsCodeLocation; 19 | 20 | // Loading JavaScript code - uncomment the one you want. 21 | 22 | // OPTION 1 23 | // Load from development server. Start the server from the repository root: 24 | // 25 | // $ npm start 26 | // 27 | // To run on device, change `localhost` to the IP address of your computer, and make sure your computer and 28 | // iOS device are on the same Wi-Fi network. 29 | jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/BeerApp.bundle"]; 30 | 31 | // OPTION 2 32 | // Load from pre-bundled file on disk. To re-generate the static bundle, run 33 | // 34 | // $ curl http://localhost:8081/index.ios.bundle -o main.jsbundle 35 | // 36 | // and uncomment the next following line 37 | //jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 38 | 39 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 40 | moduleName:@"BeerApp" 41 | launchOptions:launchOptions]; 42 | 43 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 44 | UIViewController *rootViewController = [[UIViewController alloc] init]; 45 | rootViewController.view = rootView; 46 | self.window.rootViewController = rootViewController; 47 | [self.window makeKeyAndVisible]; 48 | return YES; 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /iOS/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /iOS/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 | } -------------------------------------------------------------------------------- /iOS/Images.xcassets/circle.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "circle@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /iOS/Images.xcassets/circle.imageset/circle@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muratsu/react-native-beer/5b882a7ba31561cc4c211a65adb94aefdc0fe55a/iOS/Images.xcassets/circle.imageset/circle@2x.png -------------------------------------------------------------------------------- /iOS/Images.xcassets/generic.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "scale" : "2x", 10 | "filename" : "generic@2x.png" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /iOS/Images.xcassets/generic.imageset/generic@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/muratsu/react-native-beer/5b882a7ba31561cc4c211a65adb94aefdc0fe55a/iOS/Images.xcassets/generic.imageset/generic@2x.png -------------------------------------------------------------------------------- /iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /iOS/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "beerReact", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "start": "node_modules/react-native/packager/packager.sh" 7 | }, 8 | "dependencies": { 9 | "react-native": "^0.3.0" 10 | } 11 | } 12 | --------------------------------------------------------------------------------