├── .watchmanconfig ├── android ├── app │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ └── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── assets │ │ │ └── fonts │ │ │ │ ├── Entypo.ttf │ │ │ │ ├── Ionicons.ttf │ │ │ │ ├── Octicons.ttf │ │ │ │ ├── Zocial.ttf │ │ │ │ ├── EvilIcons.ttf │ │ │ │ ├── Foundation.ttf │ │ │ │ ├── FontAwesome.ttf │ │ │ │ └── MaterialIcons.ttf │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── ledoutong │ │ │ └── MainActivity.java │ ├── proguard-rules.pro │ ├── react.gradle │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── ios ├── Ledoutong │ ├── Images.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── 58.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 120-1.png │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ ├── Info.plist │ ├── AppDelegate.m │ └── Base.lproj │ │ └── LaunchScreen.xib ├── LedoutongTests │ ├── Info.plist │ └── LedoutongTests.m └── Ledoutong.xcodeproj │ ├── xcshareddata │ └── xcschemes │ │ └── Ledoutong.xcscheme │ └── project.pbxproj ├── package.json ├── .gitignore ├── app ├── component │ ├── landingGuide.js │ ├── login.js │ ├── landingSwiper.js │ └── tabBar.js ├── me.js ├── checkin.js ├── messageDetail.js ├── message.js └── contact.js ├── index.ios.js ├── index.android.js ├── .flowconfig ├── README.md └── data └── users_data.json /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Ledoutong 3 | 4 | -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Entypo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/Entypo.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/Ionicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/Octicons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Zocial.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/Zocial.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/EvilIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/EvilIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/Foundation.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/Foundation.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/FontAwesome.ttf -------------------------------------------------------------------------------- /android/app/src/main/assets/fonts/MaterialIcons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/assets/fonts/MaterialIcons.ttf -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbin92/React-native-example/HEAD/ios/Ledoutong/Images.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'Ledoutong' 2 | 3 | include ':app' 4 | include ':react-native-camera' 5 | project(':react-native-camera').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-camera/android') 6 | include ':react-native-vector-icons' 7 | project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Ledoutong", 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.20.0", 10 | "react-native-camera": "git+https://github.com/lwansbrough/react-native-camera.git", 11 | "react-native-swiper": "^1.4.3", 12 | "react-native-vector-icons": "^1.2.0" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /.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/IJ 26 | # 27 | .idea 28 | .gradle 29 | local.properties 30 | 31 | # node.js 32 | # 33 | node_modules/ 34 | npm-debug.log 35 | -------------------------------------------------------------------------------- /ios/Ledoutong/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 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.3.1' 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | mavenLocal() 18 | jcenter() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ios/Ledoutong/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 | -------------------------------------------------------------------------------- /app/component/landingGuide.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var LandingSwiper = require('./landingSwiper'); 10 | 11 | var { 12 | StyleSheet, 13 | Text, 14 | View, 15 | Navigator, 16 | } = React; 17 | 18 | var LandingGuide = React.createClass({ 19 | render: function() { 20 | return ( 21 | { 24 | let Component = route.component; 25 | return 26 | }} /> 27 | ) 28 | } 29 | }) 30 | 31 | module.exports = LandingGuide; 32 | -------------------------------------------------------------------------------- /ios/LedoutongTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 11 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /index.ios.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | */ 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | var Icon = require('react-native-vector-icons/Ionicons'); 9 | 10 | var { 11 | StatusBarIOS, 12 | AppRegistry, 13 | } = React; 14 | 15 | var LandingGuide = require('./app/component/landingGuide'); 16 | var TabBar = require('./app/component/tabBar'); 17 | 18 | // 设置状态栏: 参数1为白色字体,2为黑色字体 19 | StatusBarIOS.setStyle(1); 20 | 21 | var Ledoutong = React.createClass({ 22 | 23 | getInitialState: function () { 24 | return { 25 | showLandingPage: false, 26 | }; 27 | }, 28 | 29 | render: function () { 30 | if (this.state.showLandingPage) { 31 | return ( 32 | 33 | ); 34 | } else { 35 | return ( 36 | 37 | ) 38 | } 39 | } 40 | }); 41 | 42 | AppRegistry.registerComponent('Ledoutong', () => Ledoutong); 43 | -------------------------------------------------------------------------------- /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.useDeprecatedNdk=true 21 | -------------------------------------------------------------------------------- /ios/Ledoutong/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "58.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "87.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "40x40", 17 | "idiom" : "iphone", 18 | "filename" : "80.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "120.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "60x60", 29 | "idiom" : "iphone", 30 | "filename" : "120-1.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "60x60", 35 | "idiom" : "iphone", 36 | "filename" : "180.png", 37 | "scale" : "3x" 38 | } 39 | ], 40 | "info" : { 41 | "version" : 1, 42 | "author" : "xcode" 43 | } 44 | } -------------------------------------------------------------------------------- /app/me.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var { 10 | StyleSheet, 11 | Text, 12 | View, 13 | ScrollView, 14 | TouchableOpacity, 15 | } = React; 16 | 17 | var Me = React.createClass({ 18 | render: function(){ 19 | return ( 20 | 21 | 22 | Me content 23 | 24 | 25 | ); 26 | }, 27 | }); 28 | 29 | var styles = StyleSheet.create({ 30 | navigator: { 31 | flex: 1, 32 | }, 33 | container: { 34 | flex: 1, 35 | justifyContent: 'center', 36 | alignItems: 'center', 37 | backgroundColor: '#F5FCFF', 38 | }, 39 | tabContent: { 40 | flex: 1, 41 | alignItems: 'center', 42 | justifyContent: 'center', 43 | }, 44 | }); 45 | 46 | module.exports = Me; 47 | -------------------------------------------------------------------------------- /app/checkin.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var { 10 | StyleSheet, 11 | Text, 12 | View, 13 | ScrollView, 14 | TouchableOpacity, 15 | } = React; 16 | 17 | var Checkin = React.createClass({ 18 | render: function(){ 19 | return ( 20 | 21 | 22 | Checkin content 23 | 24 | 25 | ); 26 | }, 27 | }); 28 | 29 | var styles = StyleSheet.create({ 30 | navigator: { 31 | flex: 1, 32 | }, 33 | container: { 34 | flex: 1, 35 | justifyContent: 'center', 36 | alignItems: 'center', 37 | backgroundColor: '#F5FCFF', 38 | }, 39 | tabContent: { 40 | flex: 1, 41 | alignItems: 'center', 42 | justifyContent: 'center', 43 | }, 44 | }); 45 | 46 | module.exports = Checkin; 47 | -------------------------------------------------------------------------------- /app/messageDetail.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var { 10 | StyleSheet, 11 | Text, 12 | View, 13 | ScrollView, 14 | TouchableOpacity, 15 | } = React; 16 | 17 | var MessageDetail = React.createClass({ 18 | render: function(){ 19 | return ( 20 | 21 | 22 | Message detail content 23 | 24 | 25 | ); 26 | }, 27 | }); 28 | 29 | var styles = StyleSheet.create({ 30 | navigator: { 31 | flex: 1, 32 | }, 33 | container: { 34 | flex: 1, 35 | justifyContent: 'center', 36 | alignItems: 'center', 37 | backgroundColor: '#F5FCFF', 38 | }, 39 | tabContent: { 40 | flex: 1, 41 | alignItems: 'center', 42 | justifyContent: 'center', 43 | }, 44 | }); 45 | module.exports = MessageDetail; 46 | -------------------------------------------------------------------------------- /index.android.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | */ 5 | 'use strict'; 6 | import React, { 7 | AppRegistry, 8 | Component, 9 | StyleSheet, 10 | Text, 11 | View 12 | } from 'react-native'; 13 | 14 | class Ledoutong extends Component { 15 | render() { 16 | return ( 17 | 18 | 19 | Welcome to React Native! 20 | 21 | 22 | To get started, edit index.android.js 23 | 24 | 25 | Shake or press menu button for dev menu 26 | 27 | 28 | ); 29 | } 30 | } 31 | 32 | const styles = StyleSheet.create({ 33 | container: { 34 | flex: 1, 35 | justifyContent: 'center', 36 | alignItems: 'center', 37 | backgroundColor: '#F5FCFF', 38 | }, 39 | welcome: { 40 | fontSize: 20, 41 | textAlign: 'center', 42 | margin: 10, 43 | }, 44 | instructions: { 45 | textAlign: 'center', 46 | color: '#333333', 47 | marginBottom: 5, 48 | }, 49 | }); 50 | 51 | AppRegistry.registerComponent('Ledoutong', () => Ledoutong); 52 | -------------------------------------------------------------------------------- /app/message.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | var { 9 | AppRegistry, 10 | Image, 11 | ListView, 12 | StyleSheet, 13 | Text, 14 | View, 15 | } = React; 16 | 17 | var MessageDetail = require('./messageDetail'); 18 | 19 | var ListViewExample = React.createClass({ 20 | // 这里返回一个对象,设置组件的初始化状态, 21 | // 后面就可以通过 this.state 来获得这个对象 22 | getInitialState: function() { 23 | var ds = new ListView.DataSource({ 24 | rowHasChanged: (r1, r2) => r1 !== r2 // 用于判断当前数据变化的标准 25 | }); 26 | return { 27 | dataSource: ds.cloneWithRows([ // cloneWithRows方法用于复制克隆,相当于拷贝一份当前数据 28 | 'row 1', 'row 2','row 3','row 4','row 5','row 6','row 7','row 8','row 9','row 10','row 11', 'row 12' 29 | ]), 30 | }; 31 | }, 32 | render: function() { 33 | return ( 34 | {rowData}} /> // 接受数组中的每个数据作为参数, 作为listview的每一行(for循环) 37 | ); 38 | } 39 | }); 40 | 41 | var styles = StyleSheet.create({ 42 | rowText: { 43 | padding: 18, 44 | borderWidth: 1, 45 | borderColor: '#eee' 46 | }, 47 | }); 48 | 49 | 50 | module.exports = ListViewExample; 51 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/ledoutong/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.ledoutong; 2 | 3 | import com.facebook.react.ReactActivity; 4 | import com.oblador.vectoricons.VectorIconsPackage; 5 | import com.lwansbrough.RCTCamera.RCTCameraPackage; 6 | import com.facebook.react.ReactPackage; 7 | import com.facebook.react.shell.MainReactPackage; 8 | 9 | import java.util.Arrays; 10 | import java.util.List; 11 | 12 | public class MainActivity extends ReactActivity { 13 | 14 | /** 15 | * Returns the name of the main component registered from JavaScript. 16 | * This is used to schedule rendering of the component. 17 | */ 18 | @Override 19 | protected String getMainComponentName() { 20 | return "Ledoutong"; 21 | } 22 | 23 | /** 24 | * Returns whether dev mode should be enabled. 25 | * This enables e.g. the dev menu. 26 | */ 27 | @Override 28 | protected boolean getUseDeveloperSupport() { 29 | return BuildConfig.DEBUG; 30 | } 31 | 32 | /** 33 | * A list of packages used by the app. If the app uses additional views 34 | * or modules besides the default ones, add more packages here. 35 | */ 36 | @Override 37 | protected List getPackages() { 38 | return Arrays.asList( 39 | new MainReactPackage(), 40 | new VectorIconsPackage(), 41 | new RCTCameraPackage() 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ios/Ledoutong/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 | NSLocationWhenInUseUsageDescription 40 | 41 | NSAppTransportSecurity 42 | 43 | NSAllowsArbitraryLoads 44 | 45 | 46 | UIAppFonts 47 | 48 | Entypo.ttf 49 | EvilIcons.ttf 50 | FontAwesome.ttf 51 | Foundation.ttf 52 | Ionicons.ttf 53 | MaterialIcons.ttf 54 | Octicons.ttf 55 | Zocial.ttf 56 | 57 | 58 | -------------------------------------------------------------------------------- /.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | 3 | # We fork some components by platform. 4 | .*/*.web.js 5 | .*/*.android.js 6 | 7 | # Some modules have their own node_modules with overlap 8 | .*/node_modules/node-haste/.* 9 | 10 | # Ugh 11 | .*/node_modules/babel.* 12 | .*/node_modules/babylon.* 13 | .*/node_modules/invariant.* 14 | 15 | # Ignore react and fbjs where there are overlaps, but don't ignore 16 | # anything that react-native relies on 17 | .*/node_modules/fbjs/lib/Map.js 18 | .*/node_modules/fbjs/lib/Promise.js 19 | .*/node_modules/fbjs/lib/fetch.js 20 | .*/node_modules/fbjs/lib/ExecutionEnvironment.js 21 | .*/node_modules/fbjs/lib/isEmpty.js 22 | .*/node_modules/fbjs/lib/crc32.js 23 | .*/node_modules/fbjs/lib/ErrorUtils.js 24 | 25 | # Flow has a built-in definition for the 'react' module which we prefer to use 26 | # over the currently-untyped source 27 | .*/node_modules/react/react.js 28 | .*/node_modules/react/lib/React.js 29 | .*/node_modules/react/lib/ReactDOM.js 30 | 31 | # Ignore commoner tests 32 | .*/node_modules/commoner/test/.* 33 | 34 | # See https://github.com/facebook/flow/issues/442 35 | .*/react-tools/node_modules/commoner/lib/reader.js 36 | 37 | # Ignore jest 38 | .*/node_modules/jest-cli/.* 39 | 40 | # Ignore Website 41 | .*/website/.* 42 | 43 | [include] 44 | 45 | [libs] 46 | node_modules/react-native/Libraries/react-native/react-native-interface.js 47 | 48 | [options] 49 | module.system=haste 50 | 51 | munge_underscores=true 52 | 53 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub' 54 | 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\)$' -> 'RelativeImageStub' 55 | 56 | suppress_type=$FlowIssue 57 | suppress_type=$FlowFixMe 58 | suppress_type=$FixMe 59 | 60 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-1]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 61 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-1]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ 62 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 63 | 64 | [version] 65 | 0.21.0 66 | -------------------------------------------------------------------------------- /ios/Ledoutong/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 | /** 21 | * Loading JavaScript code - uncomment the one you want. 22 | * 23 | * OPTION 1 24 | * Load from development server. Start the server from the repository root: 25 | * 26 | * $ npm start 27 | * 28 | * To run on device, change `localhost` to the IP address of your computer 29 | * (you can get this by typing `ifconfig` into the terminal and selecting the 30 | * `inet` value under `en0:`) and make sure your computer and iOS device are 31 | * on the same Wi-Fi network. 32 | */ 33 | 34 | jsCodeLocation = [NSURL URLWithString:@"http://192.168.1.103:8081/index.ios.bundle"]; 35 | 36 | /** 37 | * OPTION 2 38 | * Load from pre-bundled file on disk. The static bundle is automatically 39 | * generated by "Bundle React Native code and images" build step. 40 | */ 41 | 42 | // jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 43 | 44 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 45 | moduleName:@"Ledoutong" 46 | initialProperties:nil 47 | launchOptions:launchOptions]; 48 | 49 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 50 | UIViewController *rootViewController = [UIViewController new]; 51 | rootViewController.view = rootView; 52 | self.window.rootViewController = rootViewController; 53 | [self.window makeKeyAndVisible]; 54 | return YES; 55 | } 56 | 57 | @end 58 | -------------------------------------------------------------------------------- /ios/LedoutongTests/LedoutongTests.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 | #import 12 | 13 | #import "RCTLog.h" 14 | #import "RCTRootView.h" 15 | 16 | #define TIMEOUT_SECONDS 240 17 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 18 | 19 | @interface LedoutongTests : XCTestCase 20 | 21 | @end 22 | 23 | @implementation LedoutongTests 24 | 25 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 26 | { 27 | if (test(view)) { 28 | return YES; 29 | } 30 | for (UIView *subview in [view subviews]) { 31 | if ([self findSubviewInView:subview matching:test]) { 32 | return YES; 33 | } 34 | } 35 | return NO; 36 | } 37 | 38 | - (void)testRendersWelcomeScreen 39 | { 40 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 41 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 42 | BOOL foundElement = NO; 43 | 44 | __block NSString *redboxError = nil; 45 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 46 | if (level >= RCTLogLevelError) { 47 | redboxError = message; 48 | } 49 | }); 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | RCTSetLogFunction(RCTDefaultLogFunction); 64 | 65 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 66 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 67 | } 68 | 69 | 70 | @end 71 | -------------------------------------------------------------------------------- /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 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Disabling obfuscation is useful if you collect stack traces from production crashes 20 | # (unless you are using a system that supports de-obfuscate the stack traces). 21 | -dontobfuscate 22 | 23 | # React Native 24 | 25 | # Keep our interfaces so they can be used by other ProGuard rules. 26 | # See http://sourceforge.net/p/proguard/bugs/466/ 27 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.DoNotStrip 28 | -keep,allowobfuscation @interface com.facebook.proguard.annotations.KeepGettersAndSetters 29 | 30 | # Do not strip any method/class that is annotated with @DoNotStrip 31 | -keep @com.facebook.proguard.annotations.DoNotStrip class * 32 | -keepclassmembers class * { 33 | @com.facebook.proguard.annotations.DoNotStrip *; 34 | } 35 | 36 | -keepclassmembers @com.facebook.proguard.annotations.KeepGettersAndSetters class * { 37 | void set*(***); 38 | *** get*(); 39 | } 40 | 41 | -keep class * extends com.facebook.react.bridge.JavaScriptModule { *; } 42 | -keep class * extends com.facebook.react.bridge.NativeModule { *; } 43 | -keepclassmembers,includedescriptorclasses class * { native ; } 44 | -keepclassmembers class * { @com.facebook.react.uimanager.UIProp ; } 45 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactProp ; } 46 | -keepclassmembers class * { @com.facebook.react.uimanager.annotations.ReactPropGroup ; } 47 | 48 | -dontwarn com.facebook.react.** 49 | 50 | # okhttp 51 | 52 | -keepattributes Signature 53 | -keepattributes *Annotation* 54 | -keep class com.squareup.okhttp.** { *; } 55 | -keep interface com.squareup.okhttp.** { *; } 56 | -dontwarn com.squareup.okhttp.** 57 | 58 | # okio 59 | 60 | -keep class sun.misc.Unsafe { *; } 61 | -dontwarn java.nio.file.* 62 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 63 | -dontwarn okio.** 64 | 65 | # stetho 66 | 67 | -dontwarn com.facebook.stetho.** 68 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /app/component/login.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Thu Feb 25 2016 08:37:59 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var { 10 | StyleSheet, 11 | Text, 12 | View, 13 | ScrollView, 14 | TouchableOpacity, 15 | Image, 16 | TextInput, 17 | } = React; 18 | 19 | var TabBar = require('./tabBar'); 20 | 21 | var Login = React.createClass({ 22 | 23 | _login: function() { 24 | alert("Login success!"); 25 | this.props.navigator.resetTo({ 26 | component: TabBar, 27 | title: 'Home', 28 | }) 29 | }, 30 | 31 | render: function() { 32 | return ( 33 | 34 | 37 | 40 | 41 | 42 | 46 | 47 | 48 | Login 49 | 50 | 51 | 52 | 53 | 无法登录? 54 | 55 | 56 | 新用户 57 | 58 | 59 | 60 | 61 | ) 62 | } 63 | }) 64 | 65 | var styles = StyleSheet.create({ 66 | loginContainer: { 67 | flex: 1, 68 | backgroundColor: '#f4f4f4', 69 | }, 70 | 71 | logoImage:{ 72 | borderRadius: 35, 73 | height: 70, 74 | width: 70, 75 | marginTop: 120, 76 | alignSelf: 'center', 77 | }, 78 | 79 | accountInput:{ 80 | backgroundColor: '#fff', 81 | marginTop: 20, 82 | height: 35, 83 | paddingLeft: 20, 84 | fontSize: 14, 85 | }, 86 | 87 | passowrdInput:{ 88 | backgroundColor: '#fff', 89 | height: 35, 90 | paddingLeft: 20, 91 | fontSize: 14, 92 | }, 93 | 94 | loginButton:{ 95 | marginTop: 15, 96 | marginLeft: 10, 97 | marginRight: 10, 98 | backgroundColor: '#63B8FF', 99 | height: 35, 100 | borderRadius: 5, 101 | justifyContent: 'center', 102 | alignItems: 'center', 103 | }, 104 | 105 | viewUnlogin:{ 106 | fontSize:12, 107 | color:'#63B8FF', 108 | marginLeft:10, 109 | }, 110 | 111 | viewRegister:{ 112 | fontSize:12, 113 | color:'#63B8FF', 114 | marginRight:10, 115 | alignItems:'flex-end', 116 | flex:1, 117 | flexDirection:'row', 118 | textAlign:'right', 119 | } 120 | }) 121 | 122 | module.exports = Login; 123 | -------------------------------------------------------------------------------- /app/component/landingSwiper.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Tue Feb 23 2016 22:25:21 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | var Swiper = require('react-native-swiper'); 9 | var Modal = require('react-native-modalbox'); 10 | var Login = require('./login'); 11 | 12 | var { 13 | StyleSheet, 14 | Text, 15 | View, 16 | TouchableOpacity, 17 | TextInput, 18 | Image, 19 | NavigatorIOS, 20 | } = React; 21 | 22 | var Dimensions = require('Dimensions'); 23 | var windowWidth = Dimensions.get('window').width; 24 | var windowHeight = Dimensions.get('window').height; 25 | 26 | var LandingSwiper = React.createClass({ 27 | 28 | _navigateToSubview: function() { 29 | this.props.navigator.push({ 30 | component: Login, 31 | title: "", 32 | navigationBarHidden: true, 33 | }) 34 | }, 35 | 36 | render: function() { 37 | 38 | return ( 39 | 42 | 43 | 44 | 遇见你是最美好的开始 45 | 46 | 47 | 48 | 一切等待不在是等待 49 | 50 | 51 | 52 | 53 | 爱情原来可以这样的微妙 54 | 55 | 56 | 57 | Sign In 58 | 59 | 60 | Login 61 | 62 | 63 | 64 | 65 | ) 66 | } 67 | }); 68 | 69 | var styles = StyleSheet.create({ 70 | slide1: { 71 | flex: 1, 72 | justifyContent: 'center', 73 | alignItems: 'center', 74 | backgroundColor: '#9DD6EB', 75 | }, 76 | 77 | slideText: { 78 | justifyContent: 'center', 79 | alignItems: 'center', 80 | height: windowHeight, 81 | }, 82 | 83 | slide2: { 84 | flex: 1, 85 | justifyContent: 'center', 86 | alignItems: 'center', 87 | backgroundColor: '#97CAE5', 88 | }, 89 | 90 | slide3: { 91 | flex: 1, 92 | justifyContent: 'center', 93 | alignItems: 'center', 94 | backgroundColor: '#92BBD9', 95 | }, 96 | 97 | buttons: { 98 | flex: 1, 99 | flexDirection: 'row', 100 | alignItems: 'flex-end', 101 | }, 102 | 103 | signInButton: { 104 | backgroundColor: '#fff', 105 | padding: 10, 106 | textAlign: 'center', 107 | width: windowWidth/2, 108 | }, 109 | 110 | loginButton: { 111 | backgroundColor: '#3B5998', 112 | color: '#fff', 113 | padding: 10, 114 | textAlign: 'center', 115 | width: windowWidth/2, 116 | }, 117 | 118 | text: { 119 | color: '#fff', 120 | fontSize: 22, 121 | fontWeight: 'bold', 122 | }, 123 | }) 124 | 125 | 126 | module.exports = LandingSwiper; 127 | -------------------------------------------------------------------------------- /ios/Ledoutong/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 | -------------------------------------------------------------------------------- /app/component/tabBar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Sat Feb 27 2016 15:41:18 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | var Icon = require('react-native-vector-icons/Ionicons'); 9 | 10 | var Message = require('../message'); 11 | var Contact = require('../contact'); 12 | var Checkin = require('../checkin'); 13 | var Me = require('../me'); 14 | 15 | var { 16 | StyleSheet, 17 | Text, 18 | View, 19 | Image, 20 | TabBarIOS, 21 | NavigatorIOS, 22 | TouchableOpacity, 23 | TextInput, 24 | TouchableHighlight, 25 | } = React; 26 | 27 | var TabBar = React.createClass({ 28 | getInitialState: function () { 29 | return { 30 | selectedTab: 'message', 31 | }; 32 | }, 33 | 34 | render: function () { 35 | return ( 36 | 39 | 40 | { 46 | this.setState({ 47 | selectedTab: 'message', 48 | }); 49 | }}> 50 | 59 | 60 | 61 | { 67 | this.setState({ 68 | selectedTab: 'contacts', 69 | }); 70 | }}> 71 | 80 | 81 | 82 | { 88 | this.setState({ 89 | selectedTab: 'checkin', 90 | }); 91 | }}> 92 | 101 | 102 | 103 | { 109 | this.setState({ 110 | selectedTab: 'me', 111 | }); 112 | }}> 113 | 122 | 123 | 124 | ); 125 | } 126 | }); 127 | 128 | var styles = StyleSheet.create({ 129 | navigator: { 130 | flex: 1, 131 | }, 132 | }); 133 | 134 | module.exports = TabBar; 135 | -------------------------------------------------------------------------------- /android/app/react.gradle: -------------------------------------------------------------------------------- 1 | import org.apache.tools.ant.taskdefs.condition.Os 2 | 3 | def config = project.hasProperty("react") ? project.react : []; 4 | 5 | def bundleAssetName = config.bundleAssetName ?: "index.android.bundle" 6 | def entryFile = config.entryFile ?: "index.android.js" 7 | 8 | // because elvis operator 9 | def elvisFile(thing) { 10 | return thing ? file(thing) : null; 11 | } 12 | 13 | def reactRoot = elvisFile(config.root) ?: file("../../") 14 | def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"] 15 | 16 | void runBefore(String dependentTaskName, Task task) { 17 | Task dependentTask = tasks.findByPath(dependentTaskName); 18 | if (dependentTask != null) { 19 | dependentTask.dependsOn task 20 | } 21 | } 22 | 23 | gradle.projectsEvaluated { 24 | // Grab all build types and product flavors 25 | def buildTypes = android.buildTypes.collect { type -> type.name } 26 | def productFlavors = android.productFlavors.collect { flavor -> flavor.name } 27 | 28 | // When no product flavors defined, use empty 29 | if (!productFlavors) productFlavors.add('') 30 | 31 | productFlavors.each { productFlavorName -> 32 | buildTypes.each { buildTypeName -> 33 | // Create variant and source names 34 | def sourceName = "${buildTypeName}" 35 | def targetName = "${sourceName.capitalize()}" 36 | if (productFlavorName) { 37 | sourceName = "${productFlavorName}${targetName}" 38 | } 39 | 40 | // React js bundle directories 41 | def jsBundleDirConfigName = "jsBundleDir${targetName}" 42 | def jsBundleDir = elvisFile(config."$jsBundleDirConfigName") ?: 43 | file("$buildDir/intermediates/assets/${sourceName}") 44 | 45 | def resourcesDirConfigName = "jsBundleDir${targetName}" 46 | def resourcesDir = elvisFile(config."${resourcesDirConfigName}") ?: 47 | file("$buildDir/intermediates/res/merged/${sourceName}") 48 | def jsBundleFile = file("$jsBundleDir/$bundleAssetName") 49 | 50 | // Bundle task name for variant 51 | def bundleJsAndAssetsTaskName = "bundle${targetName}JsAndAssets" 52 | 53 | def currentBundleTask = tasks.create( 54 | name: bundleJsAndAssetsTaskName, 55 | type: Exec) { 56 | group = "react" 57 | description = "bundle JS and assets for ${targetName}." 58 | 59 | // Create dirs if they are not there (e.g. the "clean" task just ran) 60 | doFirst { 61 | jsBundleDir.mkdirs() 62 | resourcesDir.mkdirs() 63 | } 64 | 65 | // Set up inputs and outputs so gradle can cache the result 66 | inputs.files fileTree(dir: reactRoot, excludes: inputExcludes) 67 | outputs.dir jsBundleDir 68 | outputs.dir resourcesDir 69 | 70 | // Set up the call to the react-native cli 71 | workingDir reactRoot 72 | 73 | // Set up dev mode 74 | def devEnabled = !targetName.toLowerCase().contains("release") 75 | if (Os.isFamily(Os.FAMILY_WINDOWS)) { 76 | commandLine "cmd", "/c", "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", 77 | "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir 78 | } else { 79 | commandLine "react-native", "bundle", "--platform", "android", "--dev", "${devEnabled}", 80 | "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir 81 | } 82 | 83 | enabled config."bundleIn${targetName}" ?: targetName.toLowerCase().contains("release") 84 | } 85 | 86 | // Hook bundle${productFlavor}${buildType}JsAndAssets into the android build process 87 | currentBundleTask.dependsOn("merge${targetName}Resources") 88 | currentBundleTask.dependsOn("merge${targetName}Assets") 89 | 90 | runBefore("processArmeabi-v7a${targetName}Resources", currentBundleTask) 91 | runBefore("processX86${targetName}Resources", currentBundleTask) 92 | runBefore("processUniversal${targetName}Resources", currentBundleTask) 93 | runBefore("process${targetName}Resources", currentBundleTask) 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /ios/Ledoutong.xcodeproj/xcshareddata/xcschemes/Ledoutong.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 75 | 77 | 83 | 84 | 85 | 86 | 87 | 88 | 94 | 96 | 102 | 103 | 104 | 105 | 107 | 108 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # React Native Notes (iOS) 2 | 3 | ## 一:学习笔记 4 | 5 | Date:2016-02-21 6 | 7 | - [浅谈前端移动开发 (Ionic 与 React Native)](https://github.com/chenbin92/React-native-example/issues/2) 8 | - [React Native 新手入门篇](https://github.com/chenbin92/React-native-example/issues/3) 9 | - [添加设置 iOS App Icon 和 Launch Image](https://github.com/chenbin92/React-native-example/issues/5) 10 | - [React Native 控件之 Navigator 组件详解以及实例](https://github.com/chenbin92/React-native-example/issues/4) 11 | - [React Native 之 LandingPage 示例演示 ](https://github.com/chenbin92/React-native-example/issues/8) 12 | - [React Naitve之 Flexbox 布局](https://github.com/chenbin92/React-native-example/issues/9) 13 | - React Native 之 Movies 示例能学到什么 14 | 1. [使用 ListView 组件实现类似iPhone通讯录效果](https://github.com/chenbin92/React-native-example/issues/11) 15 | 2. Fetch API 的使用(待续) 16 | 3. React 生命周期(待续) 17 | 4. 搜索功能(待续) 18 | 5. 下拉刷新功能(待续) 19 | - 持续更新中... 20 | 21 | ## 二: 环境搭建 22 | 工欲善其事,必先利其器。整个示例代码都是以Mac OS X系统为基础的; 23 | 24 | #### React Native主要依赖的环境: 25 | 26 | * Mac OS X操作系统 27 | * 推荐使用Xcode7.1或者更高版本 28 | * 安装Node.js 5.0或者最新版本 29 | * 建议使用Homebrew安装: watchman和flow 30 | 31 | #### 项目依赖的版本 32 | ``` 33 | $ node -v => v5.1.1 34 | $ react-native cli -v => react-native-cli: 0.1.10 35 | => react-native: 0.20.0 36 | ``` 37 | 38 | 39 | 40 | #### 安装 node 41 | 推荐使用 [nvm](https://github.com/creationix/nvm) 管理你的 Node.js 版本 42 | 43 | ``` 44 | $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.26.0/install.sh | bash 45 | $ source ~/.nvm/nvm.sh 46 | $ nvm install 5.1.1 47 | $ nvm use 5.1.1 48 | ``` 49 | 50 | 51 | 常用 nvm 命令 52 | ``` 53 | $ nvm use // 切换版本 54 | $ nvm ls-remote // 查看远程 Node.js 的版本 55 | $ nvm ls // 查看本地安装的 Node.js 的版本 56 | ``` 57 | 58 | 59 | #### 安装 react-native 60 | 在安装 react-native 之前,需要确保 Node.js 已经安装且在环境变量中;需要确保 Xcode 已经安装且最好是7.1 或者更高版本 61 | 62 | ###### 1. 通过Homebrew安装watchman和flow: 63 | 64 | ``` 65 | $ brew install watchman 66 | $ brew install flow 67 | ``` 68 | 69 | ###### 2. 安装完成后,我们就可以通过 npm 安装react-native-cli 的命令行工具: 70 | ``` 71 | $ npm install -g react-native-cli // -g 表示全局安装 72 | ``` 73 | 74 | *注:如果安装不成功或者很慢,是因为react-native命令是从npm官网源安装,我们可以改用淘宝镜像源来安装* 75 | ``` 76 | $ npm config set registry https://registry.npm.taobao.org 77 | $ npm config set disturl https://npm.taobao.org/dist 78 | ``` 79 | 80 | 或者如果你已经安装cnpm: 81 | ``` 82 | // 在 /usr/local/lib/node_modules/react-cli/index.js中找到下面一行代码 83 | run('npm install --save react-bative', function(e) { 84 | 85 | 修改为 86 | 87 | run('cnpm install --save react-bative', function(e) { 88 | ``` 89 | 90 | 改用 cnpm 重新安装 react-native-cli,你会发现是如此的快... 91 | ``` 92 | $ cnpm install -g react-native-cli // -g 表示全局安装 93 | ``` 94 | 95 | 96 | ###### 3. 检查是否安装正确: 97 | ``` 98 | $ brew -v => Homebrew 0.9.5 99 | $ npm -v => 3.3.12 100 | $ cnpm -b => 3.3.12 101 | $ node -v => v5.1.1 102 | $ nvm --version => 0.17.3 103 | $ react-native cli -v => react-native-cli: 0.1.10 104 | => react-native: 0.20.0 105 | ``` 106 | 107 | #### Clone Repo 108 | 109 | ``` 110 | $ git clone git@github.com:chenbin92/React-native-example.git 111 | $ cd React-native-example 112 | ``` 113 | 114 | #### 安装依赖 115 | 116 | 使用 `npm` 安装项目的依赖: `npm` 117 | 118 | ``` 119 | $ npm install 120 | ``` 121 | 122 | * `node_modules` - contains the npm packages for the tools we need 123 | 124 | #### 在 iOS simulator运行应用 125 | 126 | ``` 127 | $ npm start 128 | $ react-native run-ios 129 | ``` 130 | 131 | #### 在设备上运行应用 132 | * 打开项目的 AppDelegate.m 文件,找到`jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle"];``` 133 | * 将 localhost 修改为你的 `ip` 地址,如 `jsCodeLocation = [NSURL URLWithString:@"http://192.168.1.101:8081/index.ios.bundle"];` 134 | * 重新编译即可 135 | 136 | #### 调试 137 | 138 | 1. 在iOS设备上晃动即可自动弹出开发菜单 139 | 2. 在iOS simulator 中按下 `commond + D`即可 140 | 141 | ![ios simulator](http://7xr387.com1.z0.glb.clouddn.com/ios-simulator.png) 142 | 143 | * Enable Live Reload: 开启js代码自动刷新 144 | * Reload: 刷新(command + R) 145 | * Debug in Chrome: 在chrome上调试js代码 146 | * Show Inspector: 查看元素模型 147 | 148 | #### 更新 React Native 项目依赖包版本 149 | 150 | 在升级之前,我们可以运行 `npm infi react-native `查看react-native的版本信息: 151 | 152 | ``` 153 | $ npm update -g react-native-cli // 更新本地 react-native-cli的版本 154 | $ npm install --save react-native@0.20 // @后面跟需要升级的版本号 155 | $ react-native upgrade 156 | ``` 157 | #### 降级 React Native 项目依赖包版本 (与更新一样) 158 | ``` 159 | $ npm install --save react-native@0.18 // @后面跟需要升级的版本号 160 | $ react-native upgrade 161 | ``` 162 | 163 | #### 相关文章推荐: 164 | * [react-native-guide](https://github.com/ele828/react-native-guide) 165 | * [React-Native入门指南](http://vczero.github.io/react_native/%E7%AC%AC1%E7%AF%87hello%20react-native.html) 166 | * [React Native: 配置和起步](http://www.liaohuqiu.net/cn/posts/react-native-1/) 167 | * [React Native库版本升级(Upgrading)与降级讲解](http://www.lcode.org/%E3%80%90react-native%E5%BC%80%E5%8F%91%E3%80%91react-native%E5%BA%93%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7upgrading%E4%B8%8E%E9%99%8D%E7%BA%A7%E8%AE%B2%E8%A7%A3/) 168 | -------------------------------------------------------------------------------- /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: "react.gradle"` line. 13 | * 14 | * project.ext.react = [ 15 | * // the name of the generated asset file containing your JS bundle 16 | * bundleAssetName: "index.android.bundle", 17 | * 18 | * // the entry file for bundle generation 19 | * entryFile: "index.android.js", 20 | * 21 | * // whether to bundle JS and assets in debug mode 22 | * bundleInDebug: false, 23 | * 24 | * // whether to bundle JS and assets in release mode 25 | * bundleInRelease: true, 26 | * 27 | * // whether to bundle JS and assets in another build variant (if configured). 28 | * // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 29 | * // The configuration property is in the format 'bundleIn${productFlavor}${buildType}' 30 | * // bundleInFreeDebug: true, 31 | * // bundleInPaidRelease: true, 32 | * // bundleInBeta: true, 33 | * 34 | * // the root of your project, i.e. where "package.json" lives 35 | * root: "../../", 36 | * 37 | * // where to put the JS bundle asset in debug mode 38 | * jsBundleDirDebug: "$buildDir/intermediates/assets/debug", 39 | * 40 | * // where to put the JS bundle asset in release mode 41 | * jsBundleDirRelease: "$buildDir/intermediates/assets/release", 42 | * 43 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 44 | * // require('./image.png')), in debug mode 45 | * resourcesDirDebug: "$buildDir/intermediates/res/merged/debug", 46 | * 47 | * // where to put drawable resources / React Native assets, e.g. the ones you use via 48 | * // require('./image.png')), in release mode 49 | * resourcesDirRelease: "$buildDir/intermediates/res/merged/release", 50 | * 51 | * // by default the gradle tasks are skipped if none of the JS files or assets change; this means 52 | * // that we don't look at files in android/ or ios/ to determine whether the tasks are up to 53 | * // date; if you have any other folders that you want to ignore for performance reasons (gradle 54 | * // indexes the entire tree), add them here. Alternatively, if you have JS files in android/ 55 | * // for example, you might want to remove it from here. 56 | * inputExcludes: ["android/**", "ios/**"] 57 | * ] 58 | */ 59 | 60 | apply from: "react.gradle" 61 | 62 | /** 63 | * Set this to true to create three separate APKs instead of one: 64 | * - A universal APK that works on all devices 65 | * - An APK that only works on ARM devices 66 | * - An APK that only works on x86 devices 67 | * The advantage is the size of the APK is reduced by about 4MB. 68 | * Upload all the APKs to the Play Store and people will download 69 | * the correct one based on the CPU architecture of their device. 70 | */ 71 | def enableSeparateBuildPerCPUArchitecture = false 72 | 73 | /** 74 | * Run Proguard to shrink the Java bytecode in release builds. 75 | */ 76 | def enableProguardInReleaseBuilds = false 77 | 78 | android { 79 | compileSdkVersion 23 80 | buildToolsVersion "23.0.1" 81 | 82 | defaultConfig { 83 | applicationId "com.ledoutong" 84 | minSdkVersion 16 85 | targetSdkVersion 22 86 | versionCode 1 87 | versionName "1.0" 88 | ndk { 89 | abiFilters "armeabi-v7a", "x86" 90 | } 91 | } 92 | splits { 93 | abi { 94 | enable enableSeparateBuildPerCPUArchitecture 95 | universalApk false 96 | reset() 97 | include "armeabi-v7a", "x86" 98 | } 99 | } 100 | buildTypes { 101 | release { 102 | minifyEnabled enableProguardInReleaseBuilds 103 | proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" 104 | } 105 | } 106 | // applicationVariants are e.g. debug, release 107 | applicationVariants.all { variant -> 108 | variant.outputs.each { output -> 109 | // For each separate APK per architecture, set a unique version code as described here: 110 | // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits 111 | def versionCodes = ["armeabi-v7a":1, "x86":2] 112 | def abi = output.getFilter(OutputFile.ABI) 113 | if (abi != null) { // null for the universal-debug, universal-release variants 114 | output.versionCodeOverride = 115 | versionCodes.get(abi) * 1048576 + defaultConfig.versionCode 116 | } 117 | } 118 | } 119 | } 120 | 121 | dependencies { 122 | compile project(':react-native-vector-icons') 123 | compile project(':react-native-camera') 124 | compile fileTree(dir: "libs", include: ["*.jar"]) 125 | compile "com.android.support:appcompat-v7:23.0.1" 126 | compile "com.facebook.react:react-native:0.20.+" 127 | } 128 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # For Cygwin, ensure paths are in UNIX format before anything is touched. 46 | if $cygwin ; then 47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 48 | fi 49 | 50 | # Attempt to set APP_HOME 51 | # Resolve links: $0 may be a link 52 | PRG="$0" 53 | # Need this for relative symlinks. 54 | while [ -h "$PRG" ] ; do 55 | ls=`ls -ld "$PRG"` 56 | link=`expr "$ls" : '.*-> \(.*\)$'` 57 | if expr "$link" : '/.*' > /dev/null; then 58 | PRG="$link" 59 | else 60 | PRG=`dirname "$PRG"`"/$link" 61 | fi 62 | done 63 | SAVED="`pwd`" 64 | cd "`dirname \"$PRG\"`/" >&- 65 | APP_HOME="`pwd -P`" 66 | cd "$SAVED" >&- 67 | 68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 69 | 70 | # Determine the Java command to use to start the JVM. 71 | if [ -n "$JAVA_HOME" ] ; then 72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 73 | # IBM's JDK on AIX uses strange locations for the executables 74 | JAVACMD="$JAVA_HOME/jre/sh/java" 75 | else 76 | JAVACMD="$JAVA_HOME/bin/java" 77 | fi 78 | if [ ! -x "$JAVACMD" ] ; then 79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 80 | 81 | Please set the JAVA_HOME variable in your environment to match the 82 | location of your Java installation." 83 | fi 84 | else 85 | JAVACMD="java" 86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 87 | 88 | Please set the JAVA_HOME variable in your environment to match the 89 | location of your Java installation." 90 | fi 91 | 92 | # Increase the maximum file descriptors if we can. 93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 94 | MAX_FD_LIMIT=`ulimit -H -n` 95 | if [ $? -eq 0 ] ; then 96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 97 | MAX_FD="$MAX_FD_LIMIT" 98 | fi 99 | ulimit -n $MAX_FD 100 | if [ $? -ne 0 ] ; then 101 | warn "Could not set maximum file descriptor limit: $MAX_FD" 102 | fi 103 | else 104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 105 | fi 106 | fi 107 | 108 | # For Darwin, add options to specify how the application appears in the dock 109 | if $darwin; then 110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 111 | fi 112 | 113 | # For Cygwin, switch paths to Windows format before running java 114 | if $cygwin ; then 115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 158 | function splitJvmOpts() { 159 | JVM_OPTS=("$@") 160 | } 161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 163 | 164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 165 | -------------------------------------------------------------------------------- /app/contact.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by Bruce on Mon Jan 25 2016 23:28:33 GMT+0800 (CST). 3 | */ 4 | 5 | 'use strict'; 6 | 7 | var React = require('react-native'); 8 | 9 | var { 10 | StyleSheet, 11 | Image, 12 | ListView, 13 | Text, 14 | View, 15 | AlertIOS, 16 | TouchableOpacity, 17 | ActivityIndicatorIOS 18 | } = React; 19 | 20 | // API URL 21 | var API_URL = "http://7xr387.com1.z0.glb.clouddn.com/users_data.json"; 22 | 23 | var Contact = React.createClass({ 24 | // initial state 25 | getInitialState: function() { 26 | var getSectionData = (dataBlob, sectionID) => { 27 | return dataBlob[sectionID]; 28 | } 29 | 30 | var getRowData = (dataBlob, sectionID, rowID) => { 31 | return dataBlob[sectionID + ':' + rowID]; 32 | } 33 | 34 | return { 35 | loaded: false, 36 | dataSource: new ListView.DataSource({ 37 | getSectionData : getSectionData, 38 | getRowData : getRowData, 39 | rowHasChanged : (row1, row2) => row1 !== row2, 40 | sectionHeaderHasChanged : (s1, s2) => s1 !== s2 41 | }) 42 | } 43 | }, 44 | 45 | // loading data 46 | componentDidMount: function() { 47 | this._fetchData() 48 | }, 49 | 50 | // fetch data 51 | _fetchData: function() { 52 | fetch(API_URL) 53 | .then((response) => response.json()) 54 | .then((responseData) => { 55 | var organizations = responseData.results, 56 | length = organizations.length, 57 | dataBlob = {}, 58 | sectionIDs = [], 59 | rowIDs = [], 60 | organization, 61 | users, 62 | userLength, 63 | user, 64 | i, 65 | j; 66 | 67 | console.log(organizations) 68 | 69 | for(i=0; i 114 | User List 115 | 116 | 120 | 121 | 122 | ) 123 | }, 124 | 125 | renderListView: function() { 126 | return ( 127 | 128 | 129 | User List 130 | 131 | 136 | 137 | ) 138 | }, 139 | 140 | renderSectionHeader: function(sectionData, sectionID) { 141 | return ( 142 | 143 | {sectionData} 144 | 145 | ); 146 | }, 147 | 148 | renderRow : function (rowData, sectionID, rowID) { 149 | return ( 150 | this.onPressRow(rowData, sectionID)}> 151 | 152 | 155 | 156 | {rowData.username} 157 | 158 | 159 | 160 | ); 161 | }, 162 | 163 | onPressRow : function (rowData, sectionID) { 164 | var buttons = [ 165 | { 166 | text : 'Cancel' 167 | }, 168 | { 169 | text : 'OK', 170 | onPress : () => this.createCalendarEvent(rowData, sectionID) 171 | } 172 | ] 173 | AlertIOS.alert(rowData.email, null, null); 174 | } 175 | }); 176 | 177 | var styles = StyleSheet.create({ 178 | container: { 179 | flex: 1 180 | }, 181 | activityIndicator: { 182 | alignItems: 'center', 183 | justifyContent: 'center', 184 | }, 185 | header: { 186 | height: 60, 187 | justifyContent: 'center', 188 | alignItems: 'center', 189 | flexDirection: 'column', 190 | paddingTop: 25 191 | }, 192 | headerText: { 193 | fontWeight: 'bold', 194 | fontSize: 20, 195 | color: '#fff' 196 | }, 197 | text: { 198 | color: '#fff', 199 | paddingHorizontal: 8, 200 | fontSize: 16 201 | }, 202 | rowStyle: { 203 | flex: 1, 204 | flexDirection: 'row', 205 | alignItems: 'center', 206 | paddingVertical: 5, 207 | paddingLeft: 10, 208 | borderTopColor: '#fff', 209 | borderLeftColor: '#fff', 210 | borderRightColor: '#fff', 211 | borderBottomColor: '#E0E0E0', 212 | borderWidth: 1 213 | }, 214 | userAvatar: { 215 | width: 48, 216 | height: 48, 217 | borderRadius: 24, 218 | }, 219 | userName: { 220 | flex: 1, 221 | justifyContent: "center", 222 | }, 223 | rowText: { 224 | color: '#212121', 225 | fontSize: 16, 226 | padding: 16, 227 | }, 228 | subText: { 229 | fontSize: 14, 230 | color: '#757575' 231 | }, 232 | section: { 233 | flexDirection: 'column', 234 | justifyContent: 'center', 235 | alignItems: 'flex-start', 236 | padding: 6, 237 | backgroundColor: '#eee', 238 | } 239 | }); 240 | 241 | module.exports = Contact; 242 | -------------------------------------------------------------------------------- /data/users_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "results":[ 3 | { 4 | "organization":"A", 5 | "id":1, 6 | "users":[ 7 | { 8 | "user":{ 9 | "gender":"female", 10 | "email":"Alin@example.com", 11 | "username":"Alin", 12 | "md5":"589a574553250be33f3b1170624ad2d1", 13 | "avatar": "http://photos.breadtrip.com/photo_2016_03_06_3f9afbb9df7e8549ee94e4c0cbea9158.jpg" 14 | } 15 | }, 16 | { 17 | "user":{ 18 | "gender":"female", 19 | "email":"Angela@example.com", 20 | "username":"Angela", 21 | "md5":"5cbc80332e3523dd9d90cc116daf9d1e", 22 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_62d451411c972f6df561f943fa75ad2f.jpg" 23 | } 24 | }, 25 | { 26 | "user":{ 27 | "gender":"female", 28 | "email":"Amy@example.com", 29 | "username":"Amy", 30 | "md5":"5cbc80332e3523dd9d90cc116daf9d2e", 31 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_9e9563a007995b29643f981a347d33d1.jpg" 32 | } 33 | }, 34 | { 35 | "user":{ 36 | "gender":"female", 37 | "email":"Alex@example.com", 38 | "username":"Alex", 39 | "md5":"5cbc80332e3523dd9d90cc116daf9d3e", 40 | "avatar": "http://photos.breadtrip.com/photo_2015_05_30_705515c8f310485651d323023ef67716.jpg" 41 | } 42 | }, 43 | { 44 | "user":{ 45 | "gender":"female", 46 | "email":"Anne@example.com", 47 | "username":"Anne", 48 | "md5":"5cbc80332e3523dd9d90cc116daf9d4e", 49 | "avatar": "http://photos.breadtrip.com/photo_2015_10_19_5831e654c0aec08ee992fb80efdd329e.jpg" 50 | } 51 | } 52 | ] 53 | }, 54 | { 55 | "organization":"B", 56 | "id":2, 57 | "users":[ 58 | { 59 | "user":{ 60 | "gender":"female", 61 | "email":"Bob@example.com", 62 | "username":"Bob", 63 | "md5":"9bc08bb89d4b7163734e5a82bc1c913f", 64 | "avatar": "http://photos.breadtrip.com/photo_2016_03_02_a1539edfa044e94c2a7249e9d0d6d821.jpg" 65 | } 66 | }, 67 | { 68 | "user":{ 69 | "gender":"male", 70 | "email":"bruce@example.com", 71 | "username":"Bruce", 72 | "md5":"5084736a5dc54b3d01ab466cbe5a2bfd", 73 | "avatar": "http://photos.breadtrip.com/photo_2016_03_02_15d8f3c6f7ef2061780dcababba1279d.jpg" 74 | } 75 | }, 76 | { 77 | "user":{ 78 | "gender":"male", 79 | "email":"Brian@example.com", 80 | "username":"Brian", 81 | "md5":"5084736a5dc54b3d01ab466cbe5a2b3d", 82 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_e8e0d2fe33f0ab44d7ad6981809dd05d.jpg" 83 | } 84 | }, 85 | { 86 | "user":{ 87 | "gender":"male", 88 | "email":"Bill@example.com", 89 | "username":"Bill", 90 | "md5":"5084736a5dc54b3d01ab466cbe5a2b4d", 91 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_cee4d85f4b33e49c424f467ddc82235b.jpg" 92 | } 93 | }, 94 | { 95 | "user":{ 96 | "gender":"male", 97 | "email":"Brandon@example.com", 98 | "username":"Brandon", 99 | "md5":"5084736a5dc54b3d01ab466cbe5a2b5d", 100 | "avatar": "http://photos.breadtrip.com/photo_2016_03_02_6bb0bc960f8643e59d0df6470484ffa1.jpg" 101 | } 102 | }, 103 | { 104 | "user":{ 105 | "gender":"male", 106 | "email":"Benny@example.com", 107 | "username":"Benny", 108 | "md5":"5084736a5dc54b3d01ab466cbe5a2b6d", 109 | "avatar": "http://photos.breadtrip.com/photo_2016_03_06_7ebf416c280428b49de2f1cb8d88ed3f.jpg" 110 | } 111 | } 112 | ] 113 | }, 114 | { 115 | "organization":"C", 116 | "id":3, 117 | "users":[ 118 | { 119 | "user":{ 120 | "gender":"female", 121 | "email":"Carol@example.com", 122 | "username":"Carol", 123 | "md5":"9bc08bb89d4b7163734e5a83bc1c913f", 124 | "avatar": "http://photos.breadtrip.com/photo_2016_03_06_996f379e211b3518037348ef54414c4c.jpg" 125 | } 126 | }, 127 | { 128 | "user":{ 129 | "gender":"male", 130 | "email":"Chris@example.com", 131 | "username":"Chris", 132 | "md5":"5084736a5dc54b3d01ab666cbe5a2bfd", 133 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_2b506ba181e500fe767e269ed3de496a.jpg" 134 | } 135 | }, 136 | { 137 | "user":{ 138 | "gender":"male", 139 | "email":"Candy@example.com", 140 | "username":"Candy", 141 | "md5":"5084736a5dc54b3d01ab688cbe5a2bfd", 142 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_49605b8fca056f0116b01a8f3f8c909f.jpg" 143 | } 144 | }, 145 | { 146 | "user":{ 147 | "gender":"male", 148 | "email":"Cherry@example.com", 149 | "username":"Cherry", 150 | "md5":"5084736a5dc54b3d01ab688cbe8a2bfd", 151 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_394b42d3c759412ab7c246385963575c.jpg" 152 | } 153 | } 154 | ] 155 | }, 156 | { 157 | "organization":"D", 158 | "id":4, 159 | "users":[ 160 | { 161 | "user":{ 162 | "gender":"female", 163 | "email":"David@example.com", 164 | "username":"David", 165 | "md5":"9ca08bb89d4b7163734e5a83bc1c913f", 166 | "avatar": "http://photos.breadtrip.com/photo_2016_02_28_d886576f5a28e76c7462947a98ed4484.jpg" 167 | } 168 | }, 169 | { 170 | "user":{ 171 | "gender":"male", 172 | "email":"Danny@example.com", 173 | "username":"Danny", 174 | "md5":"5069736a5dc54b3d01ab666cbe5a2bfd", 175 | "avatar": "http://photos.breadtrip.com/photo_2016_02_10_8473c49d999cfa99c91d91c1cea8f45c.jpg" 176 | } 177 | }, 178 | { 179 | "user":{ 180 | "gender":"male", 181 | "email":"Dennis@example.com", 182 | "username":"Dennis", 183 | "md5":"5084735a5dc54b3d01ab688cbe5a2bfd", 184 | "avatar": "http://photos.breadtrip.com/photo_2016_02_10_fba63e42860d5a2f70a29c96804852ba.jpg" 185 | } 186 | }, 187 | { 188 | "user":{ 189 | "gender":"male", 190 | "email":"Daisy@example.com", 191 | "username":"Daisy", 192 | "md5":"5084376a5dc54b3d01ab688cbe8a2bfd", 193 | "avatar": "http://photos.breadtrip.com/photo_2016_03_06_a2f83b17f6b7ae5291767375c17242f2.jpg" 194 | } 195 | } 196 | ] 197 | } 198 | ] 199 | } 200 | -------------------------------------------------------------------------------- /ios/Ledoutong.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 11 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 12 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 13 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 14 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 15 | 00E356F31AD99517003FC87E /* LedoutongTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* LedoutongTests.m */; }; 16 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 17 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 18 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 19 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 20 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 21 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 22 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 23 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 24 | 16D7122D5EC349F387033D5C /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 08167F3AFF8C47BEB8E0E0AF /* Zocial.ttf */; }; 25 | 37DA93C21C78608B00980A15 /* libRCTCamera.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 37DA93B81C78606A00980A15 /* libRCTCamera.a */; }; 26 | 46A4D1CB68C84B2E93180D61 /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5E5232B56BF44F03BAB3CFFC /* Entypo.ttf */; }; 27 | 56C27F2827014E69B1B70CB6 /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = DDD9A6FD083B4EACA91047E2 /* MaterialIcons.ttf */; }; 28 | 5C5EE401A71C41CEB8EED7ED /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 006B3B9DCFB6475C86A5EBAB /* Ionicons.ttf */; }; 29 | 65BD7AB9A7AF40029643ED60 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BB1C0691857B47F587FF43B9 /* FontAwesome.ttf */; }; 30 | 6AD14DC2FADD41F380942620 /* libRNVectorIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AB8682C3E79E46DE804940F1 /* libRNVectorIcons.a */; }; 31 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 32 | A5A8551B33794EBBB76A1564 /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 4D536E7F131E4A6EBA1E16EF /* EvilIcons.ttf */; }; 33 | C475DDD991F3417EBC975D84 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 387DB3D973FB407282F78768 /* Foundation.ttf */; }; 34 | C92D76F96F1D4181BB0F8939 /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 1EFB8D864A094DBD89D70879 /* Octicons.ttf */; }; 35 | /* End PBXBuildFile section */ 36 | 37 | /* Begin PBXContainerItemProxy section */ 38 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 39 | isa = PBXContainerItemProxy; 40 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 41 | proxyType = 2; 42 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 43 | remoteInfo = RCTActionSheet; 44 | }; 45 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 48 | proxyType = 2; 49 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 50 | remoteInfo = RCTGeolocation; 51 | }; 52 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 53 | isa = PBXContainerItemProxy; 54 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 55 | proxyType = 2; 56 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 57 | remoteInfo = RCTImage; 58 | }; 59 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 60 | isa = PBXContainerItemProxy; 61 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 62 | proxyType = 2; 63 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 64 | remoteInfo = RCTNetwork; 65 | }; 66 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 67 | isa = PBXContainerItemProxy; 68 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 69 | proxyType = 2; 70 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 71 | remoteInfo = RCTVibration; 72 | }; 73 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 74 | isa = PBXContainerItemProxy; 75 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 76 | proxyType = 1; 77 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 78 | remoteInfo = Ledoutong; 79 | }; 80 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 81 | isa = PBXContainerItemProxy; 82 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 83 | proxyType = 2; 84 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 85 | remoteInfo = RCTSettings; 86 | }; 87 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 88 | isa = PBXContainerItemProxy; 89 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 90 | proxyType = 2; 91 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 92 | remoteInfo = RCTWebSocket; 93 | }; 94 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 95 | isa = PBXContainerItemProxy; 96 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 97 | proxyType = 2; 98 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 99 | remoteInfo = React; 100 | }; 101 | 37DA93B71C78606A00980A15 /* PBXContainerItemProxy */ = { 102 | isa = PBXContainerItemProxy; 103 | containerPortal = 37DA93B21C78606A00980A15 /* RCTCamera.xcodeproj */; 104 | proxyType = 2; 105 | remoteGlobalIDString = 4107012F1ACB723B00C6AA39; 106 | remoteInfo = RCTCamera; 107 | }; 108 | 37DA93F11C787C3B00980A15 /* PBXContainerItemProxy */ = { 109 | isa = PBXContainerItemProxy; 110 | containerPortal = 1A42499F960D413387763126 /* RNVectorIcons.xcodeproj */; 111 | proxyType = 2; 112 | remoteGlobalIDString = 5DBEB1501B18CEA900B34395; 113 | remoteInfo = RNVectorIcons; 114 | }; 115 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 116 | isa = PBXContainerItemProxy; 117 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 118 | proxyType = 2; 119 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 120 | remoteInfo = RCTLinking; 121 | }; 122 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 123 | isa = PBXContainerItemProxy; 124 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 125 | proxyType = 2; 126 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 127 | remoteInfo = RCTText; 128 | }; 129 | /* End PBXContainerItemProxy section */ 130 | 131 | /* Begin PBXFileReference section */ 132 | 006B3B9DCFB6475C86A5EBAB /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; 133 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = ""; }; 134 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "../node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 135 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "../node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 136 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "../node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 137 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "../node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 138 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "../node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 139 | 00E356EE1AD99517003FC87E /* LedoutongTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LedoutongTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 140 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 141 | 00E356F21AD99517003FC87E /* LedoutongTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LedoutongTests.m; sourceTree = ""; }; 142 | 08167F3AFF8C47BEB8E0E0AF /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; 143 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "../node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 144 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "../node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 145 | 13B07F961A680F5B00A75B9A /* Ledoutong.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ledoutong.app; sourceTree = BUILT_PRODUCTS_DIR; }; 146 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Ledoutong/AppDelegate.h; sourceTree = ""; }; 147 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Ledoutong/AppDelegate.m; sourceTree = ""; }; 148 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 149 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Ledoutong/Images.xcassets; sourceTree = ""; }; 150 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Ledoutong/Info.plist; sourceTree = ""; }; 151 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Ledoutong/main.m; sourceTree = ""; }; 152 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 153 | 1A42499F960D413387763126 /* RNVectorIcons.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNVectorIcons.xcodeproj; path = "../node_modules/react-native-vector-icons/RNVectorIcons.xcodeproj"; sourceTree = ""; }; 154 | 1EFB8D864A094DBD89D70879 /* Octicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = Octicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; }; 155 | 37DA93B21C78606A00980A15 /* RCTCamera.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTCamera.xcodeproj; path = "../node_modules/react-native-camera/ios/RCTCamera.xcodeproj"; sourceTree = ""; }; 156 | 387DB3D973FB407282F78768 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; 157 | 4D536E7F131E4A6EBA1E16EF /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; 158 | 5E5232B56BF44F03BAB3CFFC /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; 159 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "../node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 160 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "../node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 161 | AB8682C3E79E46DE804940F1 /* libRNVectorIcons.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNVectorIcons.a; sourceTree = ""; }; 162 | BB1C0691857B47F587FF43B9 /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; 163 | DDD9A6FD083B4EACA91047E2 /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 0; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 164 | /* End PBXFileReference section */ 165 | 166 | /* Begin PBXFrameworksBuildPhase section */ 167 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 168 | isa = PBXFrameworksBuildPhase; 169 | buildActionMask = 2147483647; 170 | files = ( 171 | ); 172 | runOnlyForDeploymentPostprocessing = 0; 173 | }; 174 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 175 | isa = PBXFrameworksBuildPhase; 176 | buildActionMask = 2147483647; 177 | files = ( 178 | 37DA93C21C78608B00980A15 /* libRCTCamera.a in Frameworks */, 179 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 180 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 181 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 182 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 183 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 184 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 185 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 186 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 187 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 188 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 189 | 6AD14DC2FADD41F380942620 /* libRNVectorIcons.a in Frameworks */, 190 | ); 191 | runOnlyForDeploymentPostprocessing = 0; 192 | }; 193 | /* End PBXFrameworksBuildPhase section */ 194 | 195 | /* Begin PBXGroup section */ 196 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 200 | ); 201 | name = Products; 202 | sourceTree = ""; 203 | }; 204 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 208 | ); 209 | name = Products; 210 | sourceTree = ""; 211 | }; 212 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 213 | isa = PBXGroup; 214 | children = ( 215 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 216 | ); 217 | name = Products; 218 | sourceTree = ""; 219 | }; 220 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 221 | isa = PBXGroup; 222 | children = ( 223 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 224 | ); 225 | name = Products; 226 | sourceTree = ""; 227 | }; 228 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 229 | isa = PBXGroup; 230 | children = ( 231 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 232 | ); 233 | name = Products; 234 | sourceTree = ""; 235 | }; 236 | 00E356EF1AD99517003FC87E /* LedoutongTests */ = { 237 | isa = PBXGroup; 238 | children = ( 239 | 00E356F21AD99517003FC87E /* LedoutongTests.m */, 240 | 00E356F01AD99517003FC87E /* Supporting Files */, 241 | ); 242 | path = LedoutongTests; 243 | sourceTree = ""; 244 | }; 245 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 246 | isa = PBXGroup; 247 | children = ( 248 | 00E356F11AD99517003FC87E /* Info.plist */, 249 | ); 250 | name = "Supporting Files"; 251 | sourceTree = ""; 252 | }; 253 | 139105B71AF99BAD00B5F7CC /* Products */ = { 254 | isa = PBXGroup; 255 | children = ( 256 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 257 | ); 258 | name = Products; 259 | sourceTree = ""; 260 | }; 261 | 139FDEE71B06529A00C62182 /* Products */ = { 262 | isa = PBXGroup; 263 | children = ( 264 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 265 | ); 266 | name = Products; 267 | sourceTree = ""; 268 | }; 269 | 13B07FAE1A68108700A75B9A /* Ledoutong */ = { 270 | isa = PBXGroup; 271 | children = ( 272 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 273 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 274 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 275 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 276 | 13B07FB61A68108700A75B9A /* Info.plist */, 277 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 278 | 13B07FB71A68108700A75B9A /* main.m */, 279 | ); 280 | name = Ledoutong; 281 | sourceTree = ""; 282 | }; 283 | 146834001AC3E56700842450 /* Products */ = { 284 | isa = PBXGroup; 285 | children = ( 286 | 146834041AC3E56700842450 /* libReact.a */, 287 | ); 288 | name = Products; 289 | sourceTree = ""; 290 | }; 291 | 37DA93B31C78606A00980A15 /* Products */ = { 292 | isa = PBXGroup; 293 | children = ( 294 | 37DA93B81C78606A00980A15 /* libRCTCamera.a */, 295 | ); 296 | name = Products; 297 | sourceTree = ""; 298 | }; 299 | 37DA93E31C787C3B00980A15 /* Products */ = { 300 | isa = PBXGroup; 301 | children = ( 302 | 37DA93F21C787C3B00980A15 /* libRNVectorIcons.a */, 303 | ); 304 | name = Products; 305 | sourceTree = ""; 306 | }; 307 | 78C398B11ACF4ADC00677621 /* Products */ = { 308 | isa = PBXGroup; 309 | children = ( 310 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 311 | ); 312 | name = Products; 313 | sourceTree = ""; 314 | }; 315 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 316 | isa = PBXGroup; 317 | children = ( 318 | 37DA93B21C78606A00980A15 /* RCTCamera.xcodeproj */, 319 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 320 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 321 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 322 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 323 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 324 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 325 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 326 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 327 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 328 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 329 | 1A42499F960D413387763126 /* RNVectorIcons.xcodeproj */, 330 | ); 331 | name = Libraries; 332 | sourceTree = ""; 333 | }; 334 | 832341B11AAA6A8300B99B32 /* Products */ = { 335 | isa = PBXGroup; 336 | children = ( 337 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 338 | ); 339 | name = Products; 340 | sourceTree = ""; 341 | }; 342 | 83CBB9F61A601CBA00E9B192 = { 343 | isa = PBXGroup; 344 | children = ( 345 | 13B07FAE1A68108700A75B9A /* Ledoutong */, 346 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 347 | 00E356EF1AD99517003FC87E /* LedoutongTests */, 348 | 83CBBA001A601CBA00E9B192 /* Products */, 349 | 8FDE0F9920C64F2889948413 /* Resources */, 350 | ); 351 | indentWidth = 2; 352 | sourceTree = ""; 353 | tabWidth = 2; 354 | }; 355 | 83CBBA001A601CBA00E9B192 /* Products */ = { 356 | isa = PBXGroup; 357 | children = ( 358 | 13B07F961A680F5B00A75B9A /* Ledoutong.app */, 359 | 00E356EE1AD99517003FC87E /* LedoutongTests.xctest */, 360 | ); 361 | name = Products; 362 | sourceTree = ""; 363 | }; 364 | 8FDE0F9920C64F2889948413 /* Resources */ = { 365 | isa = PBXGroup; 366 | children = ( 367 | 5E5232B56BF44F03BAB3CFFC /* Entypo.ttf */, 368 | 4D536E7F131E4A6EBA1E16EF /* EvilIcons.ttf */, 369 | BB1C0691857B47F587FF43B9 /* FontAwesome.ttf */, 370 | 387DB3D973FB407282F78768 /* Foundation.ttf */, 371 | 006B3B9DCFB6475C86A5EBAB /* Ionicons.ttf */, 372 | DDD9A6FD083B4EACA91047E2 /* MaterialIcons.ttf */, 373 | 1EFB8D864A094DBD89D70879 /* Octicons.ttf */, 374 | 08167F3AFF8C47BEB8E0E0AF /* Zocial.ttf */, 375 | ); 376 | name = Resources; 377 | sourceTree = ""; 378 | }; 379 | /* End PBXGroup section */ 380 | 381 | /* Begin PBXNativeTarget section */ 382 | 00E356ED1AD99517003FC87E /* LedoutongTests */ = { 383 | isa = PBXNativeTarget; 384 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LedoutongTests" */; 385 | buildPhases = ( 386 | 00E356EA1AD99517003FC87E /* Sources */, 387 | 00E356EB1AD99517003FC87E /* Frameworks */, 388 | 00E356EC1AD99517003FC87E /* Resources */, 389 | ); 390 | buildRules = ( 391 | ); 392 | dependencies = ( 393 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 394 | ); 395 | name = LedoutongTests; 396 | productName = LedoutongTests; 397 | productReference = 00E356EE1AD99517003FC87E /* LedoutongTests.xctest */; 398 | productType = "com.apple.product-type.bundle.unit-test"; 399 | }; 400 | 13B07F861A680F5B00A75B9A /* Ledoutong */ = { 401 | isa = PBXNativeTarget; 402 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Ledoutong" */; 403 | buildPhases = ( 404 | 13B07F871A680F5B00A75B9A /* Sources */, 405 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 406 | 13B07F8E1A680F5B00A75B9A /* Resources */, 407 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, 408 | ); 409 | buildRules = ( 410 | ); 411 | dependencies = ( 412 | ); 413 | name = Ledoutong; 414 | productName = "Hello World"; 415 | productReference = 13B07F961A680F5B00A75B9A /* Ledoutong.app */; 416 | productType = "com.apple.product-type.application"; 417 | }; 418 | /* End PBXNativeTarget section */ 419 | 420 | /* Begin PBXProject section */ 421 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 422 | isa = PBXProject; 423 | attributes = { 424 | LastUpgradeCheck = 610; 425 | ORGANIZATIONNAME = Facebook; 426 | TargetAttributes = { 427 | 00E356ED1AD99517003FC87E = { 428 | CreatedOnToolsVersion = 6.2; 429 | TestTargetID = 13B07F861A680F5B00A75B9A; 430 | }; 431 | }; 432 | }; 433 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Ledoutong" */; 434 | compatibilityVersion = "Xcode 3.2"; 435 | developmentRegion = English; 436 | hasScannedForEncodings = 0; 437 | knownRegions = ( 438 | en, 439 | Base, 440 | ); 441 | mainGroup = 83CBB9F61A601CBA00E9B192; 442 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 443 | projectDirPath = ""; 444 | projectReferences = ( 445 | { 446 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 447 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 448 | }, 449 | { 450 | ProductGroup = 37DA93B31C78606A00980A15 /* Products */; 451 | ProjectRef = 37DA93B21C78606A00980A15 /* RCTCamera.xcodeproj */; 452 | }, 453 | { 454 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 455 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 456 | }, 457 | { 458 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 459 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 460 | }, 461 | { 462 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 463 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 464 | }, 465 | { 466 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 467 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 468 | }, 469 | { 470 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 471 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 472 | }, 473 | { 474 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 475 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 476 | }, 477 | { 478 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 479 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 480 | }, 481 | { 482 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 483 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 484 | }, 485 | { 486 | ProductGroup = 146834001AC3E56700842450 /* Products */; 487 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 488 | }, 489 | { 490 | ProductGroup = 37DA93E31C787C3B00980A15 /* Products */; 491 | ProjectRef = 1A42499F960D413387763126 /* RNVectorIcons.xcodeproj */; 492 | }, 493 | ); 494 | projectRoot = ""; 495 | targets = ( 496 | 13B07F861A680F5B00A75B9A /* Ledoutong */, 497 | 00E356ED1AD99517003FC87E /* LedoutongTests */, 498 | ); 499 | }; 500 | /* End PBXProject section */ 501 | 502 | /* Begin PBXReferenceProxy section */ 503 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 504 | isa = PBXReferenceProxy; 505 | fileType = archive.ar; 506 | path = libRCTActionSheet.a; 507 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 508 | sourceTree = BUILT_PRODUCTS_DIR; 509 | }; 510 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 511 | isa = PBXReferenceProxy; 512 | fileType = archive.ar; 513 | path = libRCTGeolocation.a; 514 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 515 | sourceTree = BUILT_PRODUCTS_DIR; 516 | }; 517 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 518 | isa = PBXReferenceProxy; 519 | fileType = archive.ar; 520 | path = libRCTImage.a; 521 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 522 | sourceTree = BUILT_PRODUCTS_DIR; 523 | }; 524 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 525 | isa = PBXReferenceProxy; 526 | fileType = archive.ar; 527 | path = libRCTNetwork.a; 528 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 529 | sourceTree = BUILT_PRODUCTS_DIR; 530 | }; 531 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 532 | isa = PBXReferenceProxy; 533 | fileType = archive.ar; 534 | path = libRCTVibration.a; 535 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 536 | sourceTree = BUILT_PRODUCTS_DIR; 537 | }; 538 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 539 | isa = PBXReferenceProxy; 540 | fileType = archive.ar; 541 | path = libRCTSettings.a; 542 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 543 | sourceTree = BUILT_PRODUCTS_DIR; 544 | }; 545 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 546 | isa = PBXReferenceProxy; 547 | fileType = archive.ar; 548 | path = libRCTWebSocket.a; 549 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 550 | sourceTree = BUILT_PRODUCTS_DIR; 551 | }; 552 | 146834041AC3E56700842450 /* libReact.a */ = { 553 | isa = PBXReferenceProxy; 554 | fileType = archive.ar; 555 | path = libReact.a; 556 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 557 | sourceTree = BUILT_PRODUCTS_DIR; 558 | }; 559 | 37DA93B81C78606A00980A15 /* libRCTCamera.a */ = { 560 | isa = PBXReferenceProxy; 561 | fileType = archive.ar; 562 | path = libRCTCamera.a; 563 | remoteRef = 37DA93B71C78606A00980A15 /* PBXContainerItemProxy */; 564 | sourceTree = BUILT_PRODUCTS_DIR; 565 | }; 566 | 37DA93F21C787C3B00980A15 /* libRNVectorIcons.a */ = { 567 | isa = PBXReferenceProxy; 568 | fileType = archive.ar; 569 | path = libRNVectorIcons.a; 570 | remoteRef = 37DA93F11C787C3B00980A15 /* PBXContainerItemProxy */; 571 | sourceTree = BUILT_PRODUCTS_DIR; 572 | }; 573 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 574 | isa = PBXReferenceProxy; 575 | fileType = archive.ar; 576 | path = libRCTLinking.a; 577 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 578 | sourceTree = BUILT_PRODUCTS_DIR; 579 | }; 580 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 581 | isa = PBXReferenceProxy; 582 | fileType = archive.ar; 583 | path = libRCTText.a; 584 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 585 | sourceTree = BUILT_PRODUCTS_DIR; 586 | }; 587 | /* End PBXReferenceProxy section */ 588 | 589 | /* Begin PBXResourcesBuildPhase section */ 590 | 00E356EC1AD99517003FC87E /* Resources */ = { 591 | isa = PBXResourcesBuildPhase; 592 | buildActionMask = 2147483647; 593 | files = ( 594 | ); 595 | runOnlyForDeploymentPostprocessing = 0; 596 | }; 597 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 598 | isa = PBXResourcesBuildPhase; 599 | buildActionMask = 2147483647; 600 | files = ( 601 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 602 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 603 | 46A4D1CB68C84B2E93180D61 /* Entypo.ttf in Resources */, 604 | A5A8551B33794EBBB76A1564 /* EvilIcons.ttf in Resources */, 605 | 65BD7AB9A7AF40029643ED60 /* FontAwesome.ttf in Resources */, 606 | C475DDD991F3417EBC975D84 /* Foundation.ttf in Resources */, 607 | 5C5EE401A71C41CEB8EED7ED /* Ionicons.ttf in Resources */, 608 | 56C27F2827014E69B1B70CB6 /* MaterialIcons.ttf in Resources */, 609 | C92D76F96F1D4181BB0F8939 /* Octicons.ttf in Resources */, 610 | 16D7122D5EC349F387033D5C /* Zocial.ttf in Resources */, 611 | ); 612 | runOnlyForDeploymentPostprocessing = 0; 613 | }; 614 | /* End PBXResourcesBuildPhase section */ 615 | 616 | /* Begin PBXShellScriptBuildPhase section */ 617 | 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { 618 | isa = PBXShellScriptBuildPhase; 619 | buildActionMask = 2147483647; 620 | files = ( 621 | ); 622 | inputPaths = ( 623 | ); 624 | name = "Bundle React Native code and images"; 625 | outputPaths = ( 626 | ); 627 | runOnlyForDeploymentPostprocessing = 0; 628 | shellPath = /bin/sh; 629 | shellScript = "export NODE_BINARY=node\n../node_modules/react-native/packager/react-native-xcode.sh"; 630 | }; 631 | /* End PBXShellScriptBuildPhase section */ 632 | 633 | /* Begin PBXSourcesBuildPhase section */ 634 | 00E356EA1AD99517003FC87E /* Sources */ = { 635 | isa = PBXSourcesBuildPhase; 636 | buildActionMask = 2147483647; 637 | files = ( 638 | 00E356F31AD99517003FC87E /* LedoutongTests.m in Sources */, 639 | ); 640 | runOnlyForDeploymentPostprocessing = 0; 641 | }; 642 | 13B07F871A680F5B00A75B9A /* Sources */ = { 643 | isa = PBXSourcesBuildPhase; 644 | buildActionMask = 2147483647; 645 | files = ( 646 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 647 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 648 | ); 649 | runOnlyForDeploymentPostprocessing = 0; 650 | }; 651 | /* End PBXSourcesBuildPhase section */ 652 | 653 | /* Begin PBXTargetDependency section */ 654 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 655 | isa = PBXTargetDependency; 656 | target = 13B07F861A680F5B00A75B9A /* Ledoutong */; 657 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 658 | }; 659 | /* End PBXTargetDependency section */ 660 | 661 | /* Begin PBXVariantGroup section */ 662 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 663 | isa = PBXVariantGroup; 664 | children = ( 665 | 13B07FB21A68108700A75B9A /* Base */, 666 | ); 667 | name = LaunchScreen.xib; 668 | path = Ledoutong; 669 | sourceTree = ""; 670 | }; 671 | /* End PBXVariantGroup section */ 672 | 673 | /* Begin XCBuildConfiguration section */ 674 | 00E356F61AD99517003FC87E /* Debug */ = { 675 | isa = XCBuildConfiguration; 676 | buildSettings = { 677 | BUNDLE_LOADER = "$(TEST_HOST)"; 678 | FRAMEWORK_SEARCH_PATHS = ( 679 | "$(SDKROOT)/Developer/Library/Frameworks", 680 | "$(inherited)", 681 | ); 682 | GCC_PREPROCESSOR_DEFINITIONS = ( 683 | "DEBUG=1", 684 | "$(inherited)", 685 | ); 686 | INFOPLIST_FILE = LedoutongTests/Info.plist; 687 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 688 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 689 | LIBRARY_SEARCH_PATHS = ( 690 | "$(inherited)", 691 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 692 | ); 693 | PRODUCT_NAME = "$(TARGET_NAME)"; 694 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Ledoutong.app/Ledoutong"; 695 | }; 696 | name = Debug; 697 | }; 698 | 00E356F71AD99517003FC87E /* Release */ = { 699 | isa = XCBuildConfiguration; 700 | buildSettings = { 701 | BUNDLE_LOADER = "$(TEST_HOST)"; 702 | COPY_PHASE_STRIP = NO; 703 | FRAMEWORK_SEARCH_PATHS = ( 704 | "$(SDKROOT)/Developer/Library/Frameworks", 705 | "$(inherited)", 706 | ); 707 | INFOPLIST_FILE = LedoutongTests/Info.plist; 708 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 709 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 710 | LIBRARY_SEARCH_PATHS = ( 711 | "$(inherited)", 712 | "\"$(SRCROOT)/$(TARGET_NAME)\"", 713 | ); 714 | PRODUCT_NAME = "$(TARGET_NAME)"; 715 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Ledoutong.app/Ledoutong"; 716 | }; 717 | name = Release; 718 | }; 719 | 13B07F941A680F5B00A75B9A /* Debug */ = { 720 | isa = XCBuildConfiguration; 721 | buildSettings = { 722 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 723 | DEAD_CODE_STRIPPING = NO; 724 | HEADER_SEARCH_PATHS = ( 725 | "$(inherited)", 726 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 727 | "$(SRCROOT)/../node_modules/react-native/React/**", 728 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 729 | ); 730 | INFOPLIST_FILE = Ledoutong/Info.plist; 731 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 732 | OTHER_LDFLAGS = "-ObjC"; 733 | PRODUCT_NAME = Ledoutong; 734 | }; 735 | name = Debug; 736 | }; 737 | 13B07F951A680F5B00A75B9A /* Release */ = { 738 | isa = XCBuildConfiguration; 739 | buildSettings = { 740 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 741 | HEADER_SEARCH_PATHS = ( 742 | "$(inherited)", 743 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 744 | "$(SRCROOT)/../node_modules/react-native/React/**", 745 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 746 | ); 747 | INFOPLIST_FILE = Ledoutong/Info.plist; 748 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 749 | OTHER_LDFLAGS = "-ObjC"; 750 | PRODUCT_NAME = Ledoutong; 751 | }; 752 | name = Release; 753 | }; 754 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 755 | isa = XCBuildConfiguration; 756 | buildSettings = { 757 | ALWAYS_SEARCH_USER_PATHS = NO; 758 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 759 | CLANG_CXX_LIBRARY = "libc++"; 760 | CLANG_ENABLE_MODULES = YES; 761 | CLANG_ENABLE_OBJC_ARC = YES; 762 | CLANG_WARN_BOOL_CONVERSION = YES; 763 | CLANG_WARN_CONSTANT_CONVERSION = YES; 764 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 765 | CLANG_WARN_EMPTY_BODY = YES; 766 | CLANG_WARN_ENUM_CONVERSION = YES; 767 | CLANG_WARN_INT_CONVERSION = YES; 768 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 769 | CLANG_WARN_UNREACHABLE_CODE = YES; 770 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 771 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 772 | COPY_PHASE_STRIP = NO; 773 | ENABLE_STRICT_OBJC_MSGSEND = YES; 774 | GCC_C_LANGUAGE_STANDARD = gnu99; 775 | GCC_DYNAMIC_NO_PIC = NO; 776 | GCC_OPTIMIZATION_LEVEL = 0; 777 | GCC_PREPROCESSOR_DEFINITIONS = ( 778 | "DEBUG=1", 779 | "$(inherited)", 780 | ); 781 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 782 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 783 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 784 | GCC_WARN_UNDECLARED_SELECTOR = YES; 785 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 786 | GCC_WARN_UNUSED_FUNCTION = YES; 787 | GCC_WARN_UNUSED_VARIABLE = YES; 788 | HEADER_SEARCH_PATHS = ( 789 | "$(inherited)", 790 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 791 | "$(SRCROOT)/../node_modules/react-native/React/**", 792 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 793 | ); 794 | IPHONEOS_DEPLOYMENT_TARGET = 7.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_BOOL_CONVERSION = YES; 810 | CLANG_WARN_CONSTANT_CONVERSION = YES; 811 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 812 | CLANG_WARN_EMPTY_BODY = YES; 813 | CLANG_WARN_ENUM_CONVERSION = YES; 814 | CLANG_WARN_INT_CONVERSION = YES; 815 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 816 | CLANG_WARN_UNREACHABLE_CODE = YES; 817 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 818 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 819 | COPY_PHASE_STRIP = YES; 820 | ENABLE_NS_ASSERTIONS = NO; 821 | ENABLE_STRICT_OBJC_MSGSEND = YES; 822 | GCC_C_LANGUAGE_STANDARD = gnu99; 823 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 824 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 825 | GCC_WARN_UNDECLARED_SELECTOR = YES; 826 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 827 | GCC_WARN_UNUSED_FUNCTION = YES; 828 | GCC_WARN_UNUSED_VARIABLE = YES; 829 | HEADER_SEARCH_PATHS = ( 830 | "$(inherited)", 831 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 832 | "$(SRCROOT)/../node_modules/react-native/React/**", 833 | "$(SRCROOT)/../node_modules/react-native-vector-icons/RNVectorIconsManager", 834 | ); 835 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 836 | MTL_ENABLE_DEBUG_INFO = NO; 837 | SDKROOT = iphoneos; 838 | VALIDATE_PRODUCT = YES; 839 | }; 840 | name = Release; 841 | }; 842 | /* End XCBuildConfiguration section */ 843 | 844 | /* Begin XCConfigurationList section */ 845 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "LedoutongTests" */ = { 846 | isa = XCConfigurationList; 847 | buildConfigurations = ( 848 | 00E356F61AD99517003FC87E /* Debug */, 849 | 00E356F71AD99517003FC87E /* Release */, 850 | ); 851 | defaultConfigurationIsVisible = 0; 852 | defaultConfigurationName = Release; 853 | }; 854 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "Ledoutong" */ = { 855 | isa = XCConfigurationList; 856 | buildConfigurations = ( 857 | 13B07F941A680F5B00A75B9A /* Debug */, 858 | 13B07F951A680F5B00A75B9A /* Release */, 859 | ); 860 | defaultConfigurationIsVisible = 0; 861 | defaultConfigurationName = Release; 862 | }; 863 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "Ledoutong" */ = { 864 | isa = XCConfigurationList; 865 | buildConfigurations = ( 866 | 83CBBA201A601CBA00E9B192 /* Debug */, 867 | 83CBBA211A601CBA00E9B192 /* Release */, 868 | ); 869 | defaultConfigurationIsVisible = 0; 870 | defaultConfigurationName = Release; 871 | }; 872 | /* End XCConfigurationList section */ 873 | }; 874 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 875 | } 876 | --------------------------------------------------------------------------------