├── .gitignore ├── demo.gif ├── demo-fb.gif ├── examples ├── .DS_Store ├── RugbyExample │ ├── package.json │ ├── .npmignore │ ├── .gitignore │ ├── iOS │ │ ├── AppDelegate.h │ │ ├── main.m │ │ ├── Images.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── AppDelegate.m │ │ └── Base.lproj │ │ │ └── LaunchScreen.xib │ ├── RugbyExampleTests │ │ ├── Info.plist │ │ └── RugbyExampleTests.m │ ├── .flowconfig │ ├── ScrollingTabBar.js │ ├── RugbyExample.xcodeproj │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── RugbyExample.xcscheme │ │ └── project.pbxproj │ └── index.ios.js └── FacebookTabsExample │ ├── iOS │ ├── main.jsbundle │ ├── AppDelegate.h │ ├── main.m │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ ├── AppDelegate.m │ └── Base.lproj │ │ └── LaunchScreen.xib │ ├── package.json │ ├── .npmignore │ ├── .gitignore │ ├── FacebookTabsExampleTests │ ├── Info.plist │ └── FacebookTabsExampleTests.m │ ├── .flowconfig │ ├── index.ios.js │ ├── FacebookTabBar.js │ └── FacebookTabsExample.xcodeproj │ ├── xcshareddata │ └── xcschemes │ │ └── FacebookTabsExample.xcscheme │ └── project.pbxproj ├── package.json ├── DefaultTabBar.js ├── index.js └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log 2 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corymsmith/react-native-scrollable-tab-view/master/demo.gif -------------------------------------------------------------------------------- /demo-fb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corymsmith/react-native-scrollable-tab-view/master/demo-fb.gif -------------------------------------------------------------------------------- /examples/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/corymsmith/react-native-scrollable-tab-view/master/examples/.DS_Store -------------------------------------------------------------------------------- /examples/RugbyExample/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RugbyExample", 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.8.0" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/main.jsbundle: -------------------------------------------------------------------------------- 1 | // Offline JS 2 | // To re-generate the offline bundle, run this from the root of your project: 3 | // 4 | // $ react-native bundle --minify 5 | // 6 | // See http://facebook.github.io/react-native/docs/runningondevice.html for more details. 7 | 8 | throw new Error('Offline JS file is empty. See iOS/main.jsbundle for instructions'); 9 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FacebookTabsExample", 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.8.0", 10 | "react-native-icons": "^0.2.0", 11 | "react-native-scrollable-tab-view": "^0.1.10" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /examples/RugbyExample/.npmignore: -------------------------------------------------------------------------------- 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 | 24 | # node.js 25 | # 26 | node_modules/ 27 | npm-debug.log 28 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/.npmignore: -------------------------------------------------------------------------------- 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 | 24 | # node.js 25 | # 26 | node_modules/ 27 | npm-debug.log 28 | -------------------------------------------------------------------------------- /examples/RugbyExample/.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 | # node.js 26 | # 27 | node_modules/ 28 | npm-debug.log 29 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/.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 | # node.js 26 | # 27 | node_modules/ 28 | npm-debug.log 29 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | @interface AppDelegate : UIResponder 13 | 14 | @property (nonatomic, strong) UIWindow *window; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import 11 | 12 | #import "AppDelegate.h" 13 | 14 | int main(int argc, char * argv[]) { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /examples/RugbyExample/RugbyExampleTests/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 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/FacebookTabsExampleTests/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 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-scrollable-tab-view", 3 | "version": "0.2.1-alpha", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/brentvatne/react-native-scrollable-tab-view.git" 12 | }, 13 | "keywords": [ 14 | "react-native-component", 15 | "react-component", 16 | "react-native", 17 | "ios", 18 | "tab", 19 | "scrollable" 20 | ], 21 | "author": "Brent Vatne", 22 | "license": "MIT", 23 | "bugs": { 24 | "url": "https://github.com/brentvatne/react-native-scrollable-tab-view/issues" 25 | }, 26 | "homepage": "https://github.com/brentvatne/react-native-scrollable-tab-view#readme", 27 | "peerDependencies": { 28 | "react-native": ">=0.8.0 || 0.8.0-rc || 0.8.0-rc.2 || 0.9.0-rc || 0.10.0-rc" 29 | }, 30 | "dependencies": { 31 | "rebound": "0.0.13" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/.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 | # Ignore react-tools where there are overlaps, but don't ignore anything that 11 | # react-native relies on 12 | .*/node_modules/react-tools/src/vendor/core/ExecutionEnvironment.js 13 | .*/node_modules/react-tools/src/browser/eventPlugins/ResponderEventPlugin.js 14 | .*/node_modules/react-tools/src/browser/ui/React.js 15 | .*/node_modules/react-tools/src/core/ReactInstanceHandles.js 16 | .*/node_modules/react-tools/src/event/EventPropagators.js 17 | 18 | # Ignore commoner tests 19 | .*/node_modules/react-tools/node_modules/commoner/test/.* 20 | 21 | # See https://github.com/facebook/flow/issues/442 22 | .*/react-tools/node_modules/commoner/lib/reader.js 23 | 24 | # Ignore jest 25 | .*/react-native/node_modules/jest-cli/.* 26 | 27 | [include] 28 | 29 | [libs] 30 | node_modules/react-native/Libraries/react-native/react-native-interface.js 31 | 32 | [options] 33 | module.system=haste 34 | 35 | [version] 36 | 0.11.0 37 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | NSLocationWhenInUseUsageDescription 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /examples/RugbyExample/.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 | # Ignore react-tools where there are overlaps, but don't ignore anything that 11 | # react-native relies on 12 | .*/node_modules/react-tools/src/vendor/core/ExecutionEnvironment.js 13 | .*/node_modules/react-tools/src/browser/eventPlugins/ResponderEventPlugin.js 14 | .*/node_modules/react-tools/src/browser/ui/React.js 15 | .*/node_modules/react-tools/src/core/ReactInstanceHandles.js 16 | .*/node_modules/react-tools/src/event/EventPropagators.js 17 | 18 | # Ignore commoner tests 19 | .*/node_modules/commoner/test/.* 20 | 21 | # See https://github.com/facebook/flow/issues/442 22 | .*/react-tools/node_modules/commoner/lib/reader.js 23 | 24 | # Ignore jest 25 | .*/react-native/node_modules/jest-cli/.* 26 | 27 | [include] 28 | 29 | [libs] 30 | node_modules/react-native/Libraries/react-native/react-native-interface.js 31 | 32 | [options] 33 | module.system=haste 34 | 35 | suppress_type=$FlowIssue 36 | suppress_type=$FlowFixMe 37 | suppress_type=$FixMe 38 | 39 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(1[0-3]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) 40 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(1[0-3]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)? #[0-9]+ 41 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy 42 | 43 | [version] 44 | 0.13.1 45 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UIViewControllerBasedStatusBarAppearance 38 | 39 | NSLocationWhenInUseUsageDescription 40 | 41 | NSAppTransportSecurity 42 | 43 | 44 | NSAllowsArbitraryLoads 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /DefaultTabBar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | Dimensions, 6 | StyleSheet, 7 | Text, 8 | TouchableOpacity, 9 | View, 10 | Animated, 11 | } = React; 12 | 13 | var deviceWidth = Dimensions.get('window').width; 14 | 15 | var styles = StyleSheet.create({ 16 | tab: { 17 | flex: 1, 18 | alignItems: 'center', 19 | justifyContent: 'center', 20 | paddingBottom: 10, 21 | }, 22 | 23 | tabs: { 24 | height: 50, 25 | flexDirection: 'row', 26 | justifyContent: 'space-around', 27 | marginTop: 20, 28 | borderWidth: 1, 29 | borderTopWidth: 0, 30 | borderLeftWidth: 0, 31 | borderRightWidth: 0, 32 | borderBottomColor: '#ccc', 33 | }, 34 | }); 35 | 36 | var DefaultTabBar = React.createClass({ 37 | propTypes: { 38 | goToPage: React.PropTypes.func, 39 | activeTab: React.PropTypes.number, 40 | tabs: React.PropTypes.array 41 | }, 42 | 43 | renderTabOption(name, page) { 44 | var isTabActive = this.props.activeTab === page; 45 | 46 | return ( 47 | this.props.goToPage(page)}> 48 | 49 | {name} 50 | 51 | 52 | ); 53 | }, 54 | 55 | render() { 56 | var numberOfTabs = this.props.tabs.length; 57 | var tabUnderlineStyle = { 58 | position: 'absolute', 59 | width: deviceWidth / numberOfTabs, 60 | height: 4, 61 | backgroundColor: 'navy', 62 | bottom: 0, 63 | }; 64 | 65 | var left = this.props.scrollValue.interpolate({ 66 | inputRange: [0, 1], outputRange: [0, deviceWidth / numberOfTabs] 67 | }); 68 | 69 | return ( 70 | 71 | {this.props.tabs.map((tab, i) => this.renderTabOption(tab, i))} 72 | 73 | 74 | ); 75 | }, 76 | }); 77 | 78 | module.exports = DefaultTabBar; 79 | -------------------------------------------------------------------------------- /examples/RugbyExample/RugbyExampleTests/RugbyExampleTests.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 "RCTAssert.h" 14 | #import "RCTRedBox.h" 15 | #import "RCTRootView.h" 16 | 17 | #define TIMEOUT_SECONDS 240 18 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 19 | 20 | @interface RugbyExampleTests : XCTestCase 21 | 22 | @end 23 | 24 | @implementation RugbyExampleTests 25 | 26 | 27 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 28 | { 29 | if (test(view)) { 30 | return YES; 31 | } 32 | for (UIView *subview in [view subviews]) { 33 | if ([self findSubviewInView:subview matching:test]) { 34 | return YES; 35 | } 36 | } 37 | return NO; 38 | } 39 | 40 | - (void)testRendersWelcomeScreen { 41 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 42 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 43 | BOOL foundElement = NO; 44 | NSString *redboxError = nil; 45 | 46 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 47 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 48 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 49 | 50 | redboxError = [[RCTRedBox sharedInstance] currentErrorMessage]; 51 | 52 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 53 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 54 | return YES; 55 | } 56 | return NO; 57 | }]; 58 | } 59 | 60 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 61 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 62 | } 63 | 64 | 65 | @end 66 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import "RCTRootView.h" 13 | 14 | @implementation AppDelegate 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | NSURL *jsCodeLocation; 19 | 20 | /** 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://10.99.40.49.ios.bundle"]; */ 35 | 36 | /** 37 | * OPTION 2 38 | * Load from pre-bundled file on disk. To re-generate the static bundle 39 | * from the root of your project directory, run 40 | * 41 | * $ react-native bundle --minify 42 | * 43 | * see http://facebook.github.io/react-native/docs/runningondevice.html 44 | */ 45 | 46 | jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 47 | 48 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 49 | moduleName:@"RugbyExample" 50 | launchOptions:launchOptions]; 51 | 52 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 53 | UIViewController *rootViewController = [[UIViewController alloc] init]; 54 | rootViewController.view = rootView; 55 | self.window.rootViewController = rootViewController; 56 | [self.window makeKeyAndVisible]; 57 | return YES; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #import "AppDelegate.h" 11 | 12 | #import "RCTRootView.h" 13 | 14 | @implementation AppDelegate 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | NSURL *jsCodeLocation; 19 | 20 | /** 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://localhost:8081/index.ios.bundle"]; 35 | 36 | /** 37 | * OPTION 2 38 | * Load from pre-bundled file on disk. To re-generate the static bundle 39 | * from the root of your project directory, run 40 | * 41 | * $ react-native bundle --minify 42 | * 43 | * see http://facebook.github.io/react-native/docs/runningondevice.html 44 | */ 45 | 46 | // jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 47 | 48 | RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation 49 | moduleName:@"FacebookTabsExample" 50 | launchOptions:launchOptions]; 51 | 52 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 53 | UIViewController *rootViewController = [[UIViewController alloc] init]; 54 | rootViewController.view = rootView; 55 | self.window.rootViewController = rootViewController; 56 | [self.window makeKeyAndVisible]; 57 | return YES; 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /examples/RugbyExample/ScrollingTabBar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { StyleSheet, Text, View, TouchableOpacity, Dimensions, Animated, } = React; 5 | var deviceWidth = Dimensions.get('window').width; 6 | 7 | var styles = StyleSheet.create({ 8 | tab: { 9 | alignItems: 'center', 10 | justifyContent: 'center', 11 | paddingBottom: 15, 12 | width: 95, 13 | textAlign: 'center', 14 | paddingTop: 15, 15 | backgroundColor: '#fff', 16 | }, 17 | 18 | tabs: { 19 | flexDirection: 'row', 20 | borderWidth: 1, 21 | borderTopWidth: 0, 22 | borderLeftWidth: 0, 23 | borderRightWidth: 0, 24 | borderBottomColor: 'rgba(0,0,0,0.05)', 25 | backgroundColor: '#fff', 26 | }, 27 | }); 28 | 29 | var ScrollingTabBar = React.createClass({ 30 | selectedTabIcons: [], 31 | unselectedTabIcons: [], 32 | 33 | propTypes: { 34 | goToPage: React.PropTypes.func, 35 | activeTab: React.PropTypes.number, 36 | tabs: React.PropTypes.array 37 | }, 38 | 39 | getInitialState() { 40 | return { value: new Animated.Value(0) }; 41 | }, 42 | 43 | renderTabOption(name, page) { 44 | var isTabActive = this.props.activeTab === page; 45 | var color = this.state.value.interpolate({inputRange: [page-1, page], 46 | outputRange: ['rgba(0,0,0,1)', 'rgba(50,50,255,1)'], 47 | extrapolate: 'clamp'}); 48 | 49 | return ( 50 | this.props.goToPage(page)}> 51 | 52 | {name} 53 | 54 | 55 | ); 56 | }, 57 | 58 | setAnimationValue(value) { 59 | var currentPage = this.props.activeTab; 60 | this.state.value.setValue(value); 61 | }, 62 | 63 | render() { 64 | var translateX = this.state.value.interpolate({inputRange: [0, 1], outputRange: [0, -95]}); 65 | 66 | return ( 67 | 68 | {this.props.tabs.map((tab, i) => this.renderTabOption(tab, i))} 69 | 70 | ); 71 | }, 72 | }); 73 | 74 | module.exports = ScrollingTabBar; 75 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/FacebookTabsExampleTests/FacebookTabsExampleTests.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 "RCTAssert.h" 14 | #import "RCTRedBox.h" 15 | #import "RCTRootView.h" 16 | 17 | #define TIMEOUT_SECONDS 240 18 | #define TEXT_TO_LOOK_FOR @"Welcome to React Native!" 19 | 20 | @interface FacebookTabsExampleTests : XCTestCase 21 | 22 | @end 23 | 24 | @implementation FacebookTabsExampleTests 25 | 26 | 27 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 28 | { 29 | if (test(view)) { 30 | return YES; 31 | } 32 | for (UIView *subview in [view subviews]) { 33 | if ([self findSubviewInView:subview matching:test]) { 34 | return YES; 35 | } 36 | } 37 | return NO; 38 | } 39 | 40 | - (void)testRendersWelcomeScreen { 41 | UIViewController *vc = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 42 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 43 | BOOL foundElement = NO; 44 | NSString *redboxError = nil; 45 | 46 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 47 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 48 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 49 | 50 | redboxError = [[RCTRedBox sharedInstance] currentErrorMessage]; 51 | 52 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 53 | if ([view respondsToSelector:@selector(attributedText)]) { 54 | NSString *text = [(id)view attributedText].string; 55 | if ([text isEqualToString:TEXT_TO_LOOK_FOR]) { 56 | return YES; 57 | } 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 64 | XCTAssertTrue(foundElement, @"Cound't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 65 | } 66 | 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/index.ios.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | AppRegistry, 6 | StyleSheet, 7 | Text, 8 | View, 9 | ScrollView, 10 | Dimensions, 11 | } = React; 12 | 13 | var ScrollableTabView = require('react-native-scrollable-tab-view'); 14 | var FacebookTabBar = require('./FacebookTabBar'); 15 | var deviceWidth = Dimensions.get('window').width; 16 | 17 | var FacebookTabsExample = React.createClass({ 18 | render() { 19 | return ( 20 | 21 | }> 22 | 23 | 24 | News 25 | 26 | 27 | 28 | 29 | Friends 30 | 31 | 32 | 33 | 34 | Messenger 35 | 36 | 37 | 38 | 39 | Notifications 40 | 41 | 42 | 43 | 44 | Other nav 45 | 46 | 47 | 48 | 49 | ); 50 | } 51 | }); 52 | 53 | var styles = StyleSheet.create({ 54 | container: { 55 | flex: 1, 56 | marginTop: 30, 57 | }, 58 | tabView: { 59 | width: deviceWidth, 60 | padding: 10, 61 | backgroundColor: 'rgba(0,0,0,0.01)', 62 | }, 63 | card: { 64 | borderWidth: 1, 65 | backgroundColor: '#fff', 66 | borderColor: 'rgba(0,0,0,0.1)', 67 | margin: 5, 68 | height: 150, 69 | padding: 15, 70 | shadowColor: '#ccc', 71 | shadowOffset: {width: 2, height: 2}, 72 | shadowOpacity: 0.5, 73 | shadowRadius: 3, 74 | }, 75 | }); 76 | 77 | AppRegistry.registerComponent('FacebookTabsExample', () => FacebookTabsExample); 78 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/FacebookTabBar.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | StyleSheet, 6 | Text, 7 | View, 8 | TouchableOpacity, 9 | Dimensions, 10 | } = React; 11 | 12 | var { Icon, } = require('react-native-icons'); 13 | var deviceWidth = Dimensions.get('window').width; 14 | 15 | var styles = StyleSheet.create({ 16 | tab: { 17 | flex: 1, 18 | alignItems: 'center', 19 | justifyContent: 'center', 20 | paddingBottom: 10, 21 | }, 22 | 23 | tabs: { 24 | height: 45, 25 | flexDirection: 'row', 26 | paddingTop: 5, 27 | borderWidth: 1, 28 | borderTopWidth: 0, 29 | borderLeftWidth: 0, 30 | borderRightWidth: 0, 31 | borderBottomColor: 'rgba(0,0,0,0.05)', 32 | }, 33 | }); 34 | 35 | var FacebookTabBar = React.createClass({ 36 | selectedTabIcons: [], 37 | unselectedTabIcons: [], 38 | 39 | propTypes: { 40 | goToPage: React.PropTypes.func, 41 | activeTab: React.PropTypes.number, 42 | tabs: React.PropTypes.array 43 | }, 44 | 45 | renderTabOption(name, page) { 46 | var isTabActive = this.props.activeTab === page; 47 | console.log(name); 48 | 49 | return ( 50 | this.props.goToPage(page)}> 51 | 52 | { this.selectedTabIcons[page] = icon }}/> 54 | { this.unselectedTabIcons[page] = icon }}/> 56 | 57 | 58 | ); 59 | }, 60 | 61 | setAnimationValue(value) { 62 | var currentPage = this.props.activeTab; 63 | 64 | this.unselectedTabIcons.forEach((icon, i) => { 65 | if (value - i >= 0 && value - i <= 1) { 66 | icon.setNativeProps({opacity: value - i}); 67 | } 68 | if (i - value >= 0 && i - value <= 1) { 69 | icon.setNativeProps({opacity: i - value}); 70 | } 71 | }); 72 | }, 73 | 74 | render() { 75 | return ( 76 | 77 | {this.props.tabs.map((tab, i) => this.renderTabOption(tab, i))} 78 | 79 | ); 80 | }, 81 | }); 82 | 83 | module.exports = FacebookTabBar; 84 | -------------------------------------------------------------------------------- /examples/RugbyExample/iOS/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/iOS/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 21 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var React = require('react-native'); 4 | var { 5 | Dimensions, 6 | Text, 7 | View, 8 | TouchableOpacity, 9 | PanResponder, 10 | Animated, 11 | } = React; 12 | 13 | var DefaultTabBar = require('./DefaultTabBar'); 14 | var deviceWidth = Dimensions.get('window').width; 15 | 16 | var ScrollableTabView = React.createClass({ 17 | getDefaultProps() { 18 | return { 19 | edgeHitWidth: 30, 20 | } 21 | }, 22 | 23 | getInitialState() { 24 | return { currentPage: 0, scrollValue: new Animated.Value(0) }; 25 | }, 26 | 27 | componentWillMount() { 28 | var release = (e, gestureState) => { 29 | var relativeGestureDistance = gestureState.dx / deviceWidth, 30 | lastPageIndex = this.props.children.length - 1, 31 | vx = gestureState.vx, 32 | newPage = this.state.currentPage; 33 | 34 | if (relativeGestureDistance < -0.5 || (relativeGestureDistance < 0 && vx <= 0.5)) { 35 | newPage = newPage + 1; 36 | } else if (relativeGestureDistance > 0.5 || (relativeGestureDistance > 0 && vx >= 0.5)) { 37 | newPage = newPage - 1; 38 | } 39 | 40 | this.props.hasTouch && this.props.hasTouch(false); 41 | this.goToPage(Math.max(0, Math.min(newPage, this.props.children.length - 1))); 42 | } 43 | 44 | this._panResponder = PanResponder.create({ 45 | // Claim responder if it's a horizontal pan 46 | onMoveShouldSetPanResponder: (e, gestureState) => { 47 | if (Math.abs(gestureState.dx) > Math.abs(gestureState.dy)) { 48 | if ((gestureState.moveX <= this.props.edgeHitWidth || 49 | gestureState.moveX >= deviceWidth - this.props.edgeHitWidth) && 50 | this.props.locked !== true) { 51 | this.props.hasTouch && this.props.hasTouch(true); 52 | return true; 53 | } 54 | } 55 | }, 56 | 57 | // Touch is released, scroll to the one that you're closest to 58 | onPanResponderRelease: release, 59 | onPanResponderTerminate: release, 60 | 61 | // Dragging, move the view with the touch 62 | onPanResponderMove: (e, gestureState) => { 63 | var dx = gestureState.dx; 64 | var lastPageIndex = this.props.children.length - 1; 65 | 66 | // This is awkward because when we are scrolling we are offsetting the underlying view 67 | // to the left (-x) 68 | var offsetX = dx - (this.state.currentPage * deviceWidth); 69 | this.state.scrollValue.setValue(-1 * offsetX / deviceWidth); 70 | }, 71 | }); 72 | }, 73 | 74 | goToPage(pageNumber) { 75 | this.props.onChangeTab && this.props.onChangeTab({ 76 | i: pageNumber, ref: this.props.children[pageNumber] 77 | }); 78 | 79 | this.setState({ 80 | currentPage: pageNumber 81 | }); 82 | 83 | Animated.spring(this.state.scrollValue, {toValue: pageNumber, friction: 10, tension: 50}).start(); 84 | }, 85 | 86 | renderTabBar(props) { 87 | if (this.props.renderTabBar === false) { 88 | return null; 89 | } else if (this.props.renderTabBar) { 90 | return React.cloneElement(this.props.renderTabBar(), props); 91 | } else { 92 | return ; 93 | } 94 | }, 95 | 96 | render() { 97 | var sceneContainerStyle = { 98 | width: deviceWidth * this.props.children.length, 99 | flex: 1, 100 | flexDirection: 'row' 101 | }; 102 | 103 | var translateX = this.state.scrollValue.interpolate({ 104 | inputRange: [0, 1], outputRange: [0, -deviceWidth] 105 | }); 106 | 107 | return ( 108 | 109 | {this.renderTabBar({goToPage: this.goToPage, 110 | tabs: this.props.children.map((child) => child.props.tabLabel), 111 | activeTab: this.state.currentPage, 112 | scrollValue: this.state.scrollValue})} 113 | 114 | 116 | {this.props.children} 117 | 118 | 119 | ); 120 | } 121 | }); 122 | 123 | module.exports = ScrollableTabView; 124 | -------------------------------------------------------------------------------- /examples/RugbyExample/RugbyExample.xcodeproj/xcshareddata/xcschemes/RugbyExample.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 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/FacebookTabsExample.xcodeproj/xcshareddata/xcschemes/FacebookTabsExample.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-scrollable-tab-view 2 | 3 | This is probably my favorite navigation pattern on Android, I wish it 4 | were more common on iOS! This is a very simple JavaScript-only 5 | implementation of it for React Native. For more information about how 6 | the animations behind this work, check out the Rebound section of the 7 | [React Native Animation Guide](https://facebook.github.io/react-native/docs/animations.html) 8 | 9 | ## Add it to your project 10 | 11 | 1. Run `npm install react-native-scrollable-tab-view --save` 12 | 2. `var ScrollableTabView = require('react-native-scrollable-tab-view');` 13 | 14 | ## Demo 15 | 16 | 17 | 18 | 19 | ## Basic usage 20 | 21 | ```javascript 22 | var ScrollableTabView = require('react-native-scrollable-tab-view'); 23 | 24 | var App = React.createClass({ 25 | render() { 26 | return ( 27 | 28 | 29 | 30 | 31 | 32 | ); 33 | } 34 | } 35 | ``` 36 | 37 | ## Injecting a custom tab bar 38 | 39 | Suppose we had a custom tab bar called `CustomTabBar`, we would inject 40 | it into our `ScrollableTabView` like this: 41 | 42 | ```javascript 43 | var ScrollableTabView = require('react-native-scrollable-tab-view'); 44 | var CustomTabBar = require('./CustomTabBar'); 45 | 46 | var App = React.createClass({ 47 | render() { 48 | return ( 49 | }> 50 | 51 | 52 | 53 | 54 | ); 55 | } 56 | } 57 | ``` 58 | 59 | Below is the default tab bar, renamed to CustomTabBar, you can use this 60 | as a template for implementing your own. 61 | 62 | ```javascript 63 | var React = require('react-native'); 64 | var { 65 | StyleSheet, 66 | Text, 67 | View, 68 | TouchableOpacity, 69 | } = React; 70 | 71 | var deviceWidth = require('Dimensions').get('window').width; 72 | var precomputeStyle = require('precomputeStyle'); 73 | var TAB_UNDERLINE_REF = 'TAB_UNDERLINE'; 74 | 75 | var styles = StyleSheet.create({ 76 | tab: { 77 | flex: 1, 78 | alignItems: 'center', 79 | justifyContent: 'center', 80 | paddingBottom: 10, 81 | }, 82 | 83 | tabs: { 84 | height: 50, 85 | flexDirection: 'row', 86 | marginTop: 20, 87 | borderWidth: 1, 88 | borderTopWidth: 0, 89 | borderLeftWidth: 0, 90 | borderRightWidth: 0, 91 | borderBottomColor: '#ccc', 92 | }, 93 | }); 94 | 95 | var CustomTabBar = React.createClass({ 96 | propTypes: { 97 | goToPage: React.PropTypes.func, 98 | activeTab: React.PropTypes.number, 99 | tabs: React.PropTypes.array 100 | }, 101 | 102 | renderTabOption(name, page) { 103 | var isTabActive = this.props.activeTab === page; 104 | 105 | return ( 106 | this.props.goToPage(page)}> 107 | 108 | {name} 109 | 110 | 111 | ); 112 | }, 113 | 114 | setAnimationValue(value) { 115 | this.refs[TAB_UNDERLINE_REF].setNativeProps(precomputeStyle({ 116 | left: (deviceWidth * value) / this.props.tabs.length 117 | })); 118 | }, 119 | 120 | render() { 121 | var numberOfTabs = this.props.tabs.length; 122 | var tabUnderlineStyle = { 123 | position: 'absolute', 124 | width: deviceWidth / numberOfTabs, 125 | height: 4, 126 | backgroundColor: 'navy', 127 | bottom: 0, 128 | }; 129 | 130 | return ( 131 | 132 | {this.props.tabs.map((tab, i) => this.renderTabOption(tab, i))} 133 | 134 | 135 | ); 136 | }, 137 | }); 138 | 139 | module.exports = CustomTabBar; 140 | ``` 141 | 142 | ## Props 143 | 144 | - **`renderTabBar`** _(Function:ReactComponent)_ - should return a component to use as 145 | the tab bar. The component has `goToPage`, `tabs`, `activeTab` and 146 | `ref` added to the props, and should implement `setAnimationValue` to 147 | be able to animate itself along with the tab content. 148 | - **`onChangeTab`** _(Function)_ - function to call when tab changes, should accept 1 argument which is an Object containing two keys: `i`: the index of the tab that is selected, `ref`: the ref of the tab that is selected 149 | - **`edgeHitWidth`** _(Integer)_ - region (in pixels) from the left & right edges of the screen that can trigger swipe. Default is 30, which is the same as the swipe-back gesture on iOS. 150 | - **`hasTouch`** _(Function)_ - returns `true` when ScrollableTabView starts being panned and `false` when it is released. Not triggered when `locked` (Bool) is true. 151 | - **`locked`** _(Bool)_ - dynamically disable scrolling between tabs. 152 | - **`springTension`** _(Integer)_ - a number between `1` and `100`, controls the amount of tension on the spring that guides the scroll animation - see [example](http://facebook.github.io/rebound-js/examples/#graph-canvas). 153 | - **`springFriction`** _(Integer)_ - a number between `1` and `30`, controls the amount of friction on the spring that guides the scroll animation - see [example](http://facebook.github.io/rebound-js/examples/#graph-canvas). 154 | - **`clampSpring`** _(Bool)_ - if `true`, the spring will not bounce at all - if `false`, it will oscillate around the target value before settling. 155 | - **`children`** _(ReactComponents)_ - each top-level child component should have a `tabLabel` prop that can be used by the tab bar component to render out the labels. The default tab bar expects it to be a string, but you can use anything you want if you make a custom tab bar. 156 | 157 | --- 158 | 159 | **MIT Licensed** 160 | -------------------------------------------------------------------------------- /examples/RugbyExample/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 { AppRegistry, StyleSheet, Text, View, Dimensions, ScrollView, Image, } = React; 9 | var ScrollableTabView = require('react-native-scrollable-tab-view'); 10 | var deviceWidth = Dimensions.get('window').width; 11 | var ScrollingTabBar = require('./ScrollingTabBar'); 12 | 13 | var exampleStyles = StyleSheet.create({ 14 | match: { 15 | flexDirection: 'row', 16 | }, 17 | 18 | logo: { 19 | width: 40, 20 | height: 40, 21 | }, 22 | }); 23 | 24 | var canucks = { 25 | image: "http://alongtheboards.com/wp-content/uploads/2014/11/Vancouver-Canucks.png", 26 | name: 'VAN', 27 | } 28 | 29 | var flames = { 30 | image: "http://url.brentvatne.ca/7CrT.png", 31 | name: 'CGY', 32 | } 33 | 34 | var rangers = { 35 | image: "http://url.brentvatne.ca/vqUE.png", 36 | name: 'NYR', 37 | } 38 | 39 | var hawks = { 40 | image: "http://url.brentvatne.ca/Pmjv.png", 41 | name: 'CHI', 42 | } 43 | 44 | var pens = { 45 | image: "http://url.brentvatne.ca/14lhe.png", 46 | name: 'PIT', 47 | } 48 | 49 | var jets = { 50 | image: "http://url.brentvatne.ca/FSl.png", 51 | name: 'WPG', 52 | } 53 | 54 | var Team = React.createClass({ 55 | render() { 56 | return ( 57 | 58 | 61 | {this.props.data.name} 62 | 63 | ); 64 | } 65 | }); 66 | 67 | var Match = React.createClass({ 68 | render() { 69 | return ( 70 | 71 | 72 | 73 | 74 | Prematch 75 | {this.props.time}, {this.props.place} 76 | 77 | 78 | 79 | 80 | ) 81 | } 82 | }); 83 | 84 | var ExampleOne = React.createClass({ 85 | render() { 86 | // return ( 87 | // 88 | // Hi! 89 | // 90 | // ); 91 | return ( 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | ) 103 | } 104 | }); 105 | 106 | var ExampleTwo = React.createClass({ 107 | render() { 108 | // return ( 109 | // 110 | // Hi you! 111 | // 112 | // ) 113 | return ( 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | ) 126 | } 127 | }); 128 | 129 | var FakeRugbyTab = React.createClass({ 130 | getInitialState() { 131 | return { 132 | hasBeenActive: false, 133 | } 134 | }, 135 | 136 | componentDidMount() { 137 | this.maybePerformInitialRender(this.props); 138 | }, 139 | 140 | componentWillReceiveProps(props) { 141 | this.maybePerformInitialRender(props); 142 | }, 143 | 144 | shouldComponentUpdate() { 145 | return !this.state.hasBeenActive; 146 | }, 147 | 148 | maybePerformInitialRender(props) { 149 | if (!this.state.hasBeenActive && 150 | (props.activeNumber === this.props.number || 151 | props.activeNumber + 1 === this.props.number || 152 | props.activeNumber - 1 === this.props.number)) { 153 | this.setState({ 154 | hasBeenActive: true, 155 | thingToRender: this.props.number % 2 == 0 ? : 156 | }); 157 | } 158 | }, 159 | 160 | render() { 161 | if (this.state.hasBeenActive) { 162 | return ( 163 | 164 | {this.state.thingToRender} 165 | 166 | ); 167 | } else { 168 | return ; 169 | } 170 | } 171 | }); 172 | 173 | var RugbyExample = React.createClass({ 174 | getInitialState() { 175 | return { selectedTab: 0 } 176 | }, 177 | 178 | renderRounds() { 179 | var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]; 180 | 181 | return numbers.map((n) => { 182 | return ( 183 | 185 | ) 186 | }) 187 | }, 188 | 189 | onChangeTab({i, ref}) { 190 | setTimeout(() => { 191 | this.setState({selectedTab: i}); 192 | }, 500); 193 | }, 194 | 195 | render() { 196 | return ( 197 | 198 | }> 203 | 204 | {this.renderRounds()} 205 | 206 | 207 | ); 208 | } 209 | }); 210 | 211 | var styles = StyleSheet.create({ 212 | container: { 213 | flex: 1, 214 | marginTop: 30, 215 | backgroundColor: 'rgba(0,0,0,0.01)', 216 | }, 217 | tabView: { 218 | overflow: 'hidden', 219 | width: deviceWidth, 220 | padding: 10, 221 | backgroundColor: 'rgba(0,0,0,0.01)', 222 | }, 223 | card: { 224 | borderWidth: 1, 225 | backgroundColor: '#fff', 226 | borderColor: 'rgba(0,0,0,0.1)', 227 | margin: 5, 228 | marginTop: -10, 229 | padding: 15, 230 | }, 231 | }); 232 | 233 | AppRegistry.registerComponent('RugbyExample', () => RugbyExample); 234 | -------------------------------------------------------------------------------- /examples/RugbyExample/RugbyExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */ = {isa = PBXBuildFile; fileRef = 008F07F21AC5B25A0029DE68 /* main.jsbundle */; }; 11 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 12 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 13 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 14 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 15 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 16 | 00E356F31AD99517003FC87E /* RugbyExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* RugbyExampleTests.m */; }; 17 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 18 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 19 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 20 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 21 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 22 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 23 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 24 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 32 | proxyType = 2; 33 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 34 | remoteInfo = RCTActionSheet; 35 | }; 36 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 37 | isa = PBXContainerItemProxy; 38 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 39 | proxyType = 2; 40 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 41 | remoteInfo = RCTGeolocation; 42 | }; 43 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 44 | isa = PBXContainerItemProxy; 45 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 46 | proxyType = 2; 47 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 48 | remoteInfo = RCTImage; 49 | }; 50 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 51 | isa = PBXContainerItemProxy; 52 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 53 | proxyType = 2; 54 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 55 | remoteInfo = RCTNetwork; 56 | }; 57 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 58 | isa = PBXContainerItemProxy; 59 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 60 | proxyType = 2; 61 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 62 | remoteInfo = RCTVibration; 63 | }; 64 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 65 | isa = PBXContainerItemProxy; 66 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 67 | proxyType = 1; 68 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 69 | remoteInfo = RugbyExample; 70 | }; 71 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 72 | isa = PBXContainerItemProxy; 73 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 74 | proxyType = 2; 75 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 76 | remoteInfo = RCTSettings; 77 | }; 78 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 79 | isa = PBXContainerItemProxy; 80 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 81 | proxyType = 2; 82 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 83 | remoteInfo = RCTWebSocket; 84 | }; 85 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 86 | isa = PBXContainerItemProxy; 87 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 88 | proxyType = 2; 89 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 90 | remoteInfo = React; 91 | }; 92 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 93 | isa = PBXContainerItemProxy; 94 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 95 | proxyType = 2; 96 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 97 | remoteInfo = RCTLinking; 98 | }; 99 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 100 | isa = PBXContainerItemProxy; 101 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 102 | proxyType = 2; 103 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 104 | remoteInfo = RCTText; 105 | }; 106 | /* End PBXContainerItemProxy section */ 107 | 108 | /* Begin PBXFileReference section */ 109 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = iOS/main.jsbundle; sourceTree = ""; }; 110 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 111 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 112 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 113 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 114 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 115 | 00E356EE1AD99517003FC87E /* RugbyExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RugbyExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 116 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 117 | 00E356F21AD99517003FC87E /* RugbyExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RugbyExampleTests.m; sourceTree = ""; }; 118 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 119 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 120 | 13B07F961A680F5B00A75B9A /* RugbyExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RugbyExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 121 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iOS/AppDelegate.h; sourceTree = ""; }; 122 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iOS/AppDelegate.m; sourceTree = ""; }; 123 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 124 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = ""; }; 125 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = ""; }; 126 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOS/main.m; sourceTree = ""; }; 127 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 128 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 129 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 130 | /* End PBXFileReference section */ 131 | 132 | /* Begin PBXFrameworksBuildPhase section */ 133 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 134 | isa = PBXFrameworksBuildPhase; 135 | buildActionMask = 2147483647; 136 | files = ( 137 | ); 138 | runOnlyForDeploymentPostprocessing = 0; 139 | }; 140 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 141 | isa = PBXFrameworksBuildPhase; 142 | buildActionMask = 2147483647; 143 | files = ( 144 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 145 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 146 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 147 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 148 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 149 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 150 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 151 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 152 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 153 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | /* End PBXFrameworksBuildPhase section */ 158 | 159 | /* Begin PBXGroup section */ 160 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 161 | isa = PBXGroup; 162 | children = ( 163 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 164 | ); 165 | name = Products; 166 | sourceTree = ""; 167 | }; 168 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 169 | isa = PBXGroup; 170 | children = ( 171 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 172 | ); 173 | name = Products; 174 | sourceTree = ""; 175 | }; 176 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 177 | isa = PBXGroup; 178 | children = ( 179 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 180 | ); 181 | name = Products; 182 | sourceTree = ""; 183 | }; 184 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 185 | isa = PBXGroup; 186 | children = ( 187 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 188 | ); 189 | name = Products; 190 | sourceTree = ""; 191 | }; 192 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 193 | isa = PBXGroup; 194 | children = ( 195 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 196 | ); 197 | name = Products; 198 | sourceTree = ""; 199 | }; 200 | 00E356EF1AD99517003FC87E /* RugbyExampleTests */ = { 201 | isa = PBXGroup; 202 | children = ( 203 | 00E356F21AD99517003FC87E /* RugbyExampleTests.m */, 204 | 00E356F01AD99517003FC87E /* Supporting Files */, 205 | ); 206 | path = RugbyExampleTests; 207 | sourceTree = ""; 208 | }; 209 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 210 | isa = PBXGroup; 211 | children = ( 212 | 00E356F11AD99517003FC87E /* Info.plist */, 213 | ); 214 | name = "Supporting Files"; 215 | sourceTree = ""; 216 | }; 217 | 139105B71AF99BAD00B5F7CC /* Products */ = { 218 | isa = PBXGroup; 219 | children = ( 220 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 221 | ); 222 | name = Products; 223 | sourceTree = ""; 224 | }; 225 | 139FDEE71B06529A00C62182 /* Products */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 229 | ); 230 | name = Products; 231 | sourceTree = ""; 232 | }; 233 | 13B07FAE1A68108700A75B9A /* RugbyExample */ = { 234 | isa = PBXGroup; 235 | children = ( 236 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 237 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 238 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 239 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 240 | 13B07FB61A68108700A75B9A /* Info.plist */, 241 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 242 | 13B07FB71A68108700A75B9A /* main.m */, 243 | ); 244 | name = RugbyExample; 245 | sourceTree = ""; 246 | }; 247 | 146834001AC3E56700842450 /* Products */ = { 248 | isa = PBXGroup; 249 | children = ( 250 | 146834041AC3E56700842450 /* libReact.a */, 251 | ); 252 | name = Products; 253 | sourceTree = ""; 254 | }; 255 | 78C398B11ACF4ADC00677621 /* Products */ = { 256 | isa = PBXGroup; 257 | children = ( 258 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 259 | ); 260 | name = Products; 261 | sourceTree = ""; 262 | }; 263 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 264 | isa = PBXGroup; 265 | children = ( 266 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 267 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 268 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 269 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 270 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 271 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 272 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 273 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 274 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 275 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 276 | ); 277 | name = Libraries; 278 | sourceTree = ""; 279 | }; 280 | 832341B11AAA6A8300B99B32 /* Products */ = { 281 | isa = PBXGroup; 282 | children = ( 283 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 284 | ); 285 | name = Products; 286 | sourceTree = ""; 287 | }; 288 | 83CBB9F61A601CBA00E9B192 = { 289 | isa = PBXGroup; 290 | children = ( 291 | 13B07FAE1A68108700A75B9A /* RugbyExample */, 292 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 293 | 00E356EF1AD99517003FC87E /* RugbyExampleTests */, 294 | 83CBBA001A601CBA00E9B192 /* Products */, 295 | ); 296 | indentWidth = 2; 297 | sourceTree = ""; 298 | tabWidth = 2; 299 | }; 300 | 83CBBA001A601CBA00E9B192 /* Products */ = { 301 | isa = PBXGroup; 302 | children = ( 303 | 13B07F961A680F5B00A75B9A /* RugbyExample.app */, 304 | 00E356EE1AD99517003FC87E /* RugbyExampleTests.xctest */, 305 | ); 306 | name = Products; 307 | sourceTree = ""; 308 | }; 309 | /* End PBXGroup section */ 310 | 311 | /* Begin PBXNativeTarget section */ 312 | 00E356ED1AD99517003FC87E /* RugbyExampleTests */ = { 313 | isa = PBXNativeTarget; 314 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RugbyExampleTests" */; 315 | buildPhases = ( 316 | 00E356EA1AD99517003FC87E /* Sources */, 317 | 00E356EB1AD99517003FC87E /* Frameworks */, 318 | 00E356EC1AD99517003FC87E /* Resources */, 319 | ); 320 | buildRules = ( 321 | ); 322 | dependencies = ( 323 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 324 | ); 325 | name = RugbyExampleTests; 326 | productName = RugbyExampleTests; 327 | productReference = 00E356EE1AD99517003FC87E /* RugbyExampleTests.xctest */; 328 | productType = "com.apple.product-type.bundle.unit-test"; 329 | }; 330 | 13B07F861A680F5B00A75B9A /* RugbyExample */ = { 331 | isa = PBXNativeTarget; 332 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RugbyExample" */; 333 | buildPhases = ( 334 | 13B07F871A680F5B00A75B9A /* Sources */, 335 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 336 | 13B07F8E1A680F5B00A75B9A /* Resources */, 337 | ); 338 | buildRules = ( 339 | ); 340 | dependencies = ( 341 | ); 342 | name = RugbyExample; 343 | productName = "Hello World"; 344 | productReference = 13B07F961A680F5B00A75B9A /* RugbyExample.app */; 345 | productType = "com.apple.product-type.application"; 346 | }; 347 | /* End PBXNativeTarget section */ 348 | 349 | /* Begin PBXProject section */ 350 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 351 | isa = PBXProject; 352 | attributes = { 353 | LastUpgradeCheck = 0610; 354 | ORGANIZATIONNAME = Facebook; 355 | TargetAttributes = { 356 | 00E356ED1AD99517003FC87E = { 357 | CreatedOnToolsVersion = 6.2; 358 | TestTargetID = 13B07F861A680F5B00A75B9A; 359 | }; 360 | 13B07F861A680F5B00A75B9A = { 361 | DevelopmentTeam = GQ4S96SE9Z; 362 | }; 363 | }; 364 | }; 365 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RugbyExample" */; 366 | compatibilityVersion = "Xcode 3.2"; 367 | developmentRegion = English; 368 | hasScannedForEncodings = 0; 369 | knownRegions = ( 370 | en, 371 | Base, 372 | ); 373 | mainGroup = 83CBB9F61A601CBA00E9B192; 374 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 375 | projectDirPath = ""; 376 | projectReferences = ( 377 | { 378 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 379 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 380 | }, 381 | { 382 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 383 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 384 | }, 385 | { 386 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 387 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 388 | }, 389 | { 390 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 391 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 392 | }, 393 | { 394 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 395 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 396 | }, 397 | { 398 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 399 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 400 | }, 401 | { 402 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 403 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 404 | }, 405 | { 406 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 407 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 408 | }, 409 | { 410 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 411 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 412 | }, 413 | { 414 | ProductGroup = 146834001AC3E56700842450 /* Products */; 415 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 416 | }, 417 | ); 418 | projectRoot = ""; 419 | targets = ( 420 | 13B07F861A680F5B00A75B9A /* RugbyExample */, 421 | 00E356ED1AD99517003FC87E /* RugbyExampleTests */, 422 | ); 423 | }; 424 | /* End PBXProject section */ 425 | 426 | /* Begin PBXReferenceProxy section */ 427 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 428 | isa = PBXReferenceProxy; 429 | fileType = archive.ar; 430 | path = libRCTActionSheet.a; 431 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 432 | sourceTree = BUILT_PRODUCTS_DIR; 433 | }; 434 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 435 | isa = PBXReferenceProxy; 436 | fileType = archive.ar; 437 | path = libRCTGeolocation.a; 438 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 439 | sourceTree = BUILT_PRODUCTS_DIR; 440 | }; 441 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 442 | isa = PBXReferenceProxy; 443 | fileType = archive.ar; 444 | path = libRCTImage.a; 445 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 446 | sourceTree = BUILT_PRODUCTS_DIR; 447 | }; 448 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 449 | isa = PBXReferenceProxy; 450 | fileType = archive.ar; 451 | path = libRCTNetwork.a; 452 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 453 | sourceTree = BUILT_PRODUCTS_DIR; 454 | }; 455 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 456 | isa = PBXReferenceProxy; 457 | fileType = archive.ar; 458 | path = libRCTVibration.a; 459 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 460 | sourceTree = BUILT_PRODUCTS_DIR; 461 | }; 462 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 463 | isa = PBXReferenceProxy; 464 | fileType = archive.ar; 465 | path = libRCTSettings.a; 466 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 467 | sourceTree = BUILT_PRODUCTS_DIR; 468 | }; 469 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 470 | isa = PBXReferenceProxy; 471 | fileType = archive.ar; 472 | path = libRCTWebSocket.a; 473 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 474 | sourceTree = BUILT_PRODUCTS_DIR; 475 | }; 476 | 146834041AC3E56700842450 /* libReact.a */ = { 477 | isa = PBXReferenceProxy; 478 | fileType = archive.ar; 479 | path = libReact.a; 480 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 481 | sourceTree = BUILT_PRODUCTS_DIR; 482 | }; 483 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 484 | isa = PBXReferenceProxy; 485 | fileType = archive.ar; 486 | path = libRCTLinking.a; 487 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 488 | sourceTree = BUILT_PRODUCTS_DIR; 489 | }; 490 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 491 | isa = PBXReferenceProxy; 492 | fileType = archive.ar; 493 | path = libRCTText.a; 494 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 495 | sourceTree = BUILT_PRODUCTS_DIR; 496 | }; 497 | /* End PBXReferenceProxy section */ 498 | 499 | /* Begin PBXResourcesBuildPhase section */ 500 | 00E356EC1AD99517003FC87E /* Resources */ = { 501 | isa = PBXResourcesBuildPhase; 502 | buildActionMask = 2147483647; 503 | files = ( 504 | ); 505 | runOnlyForDeploymentPostprocessing = 0; 506 | }; 507 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 508 | isa = PBXResourcesBuildPhase; 509 | buildActionMask = 2147483647; 510 | files = ( 511 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */, 512 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 513 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 514 | ); 515 | runOnlyForDeploymentPostprocessing = 0; 516 | }; 517 | /* End PBXResourcesBuildPhase section */ 518 | 519 | /* Begin PBXSourcesBuildPhase section */ 520 | 00E356EA1AD99517003FC87E /* Sources */ = { 521 | isa = PBXSourcesBuildPhase; 522 | buildActionMask = 2147483647; 523 | files = ( 524 | 00E356F31AD99517003FC87E /* RugbyExampleTests.m in Sources */, 525 | ); 526 | runOnlyForDeploymentPostprocessing = 0; 527 | }; 528 | 13B07F871A680F5B00A75B9A /* Sources */ = { 529 | isa = PBXSourcesBuildPhase; 530 | buildActionMask = 2147483647; 531 | files = ( 532 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 533 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 534 | ); 535 | runOnlyForDeploymentPostprocessing = 0; 536 | }; 537 | /* End PBXSourcesBuildPhase section */ 538 | 539 | /* Begin PBXTargetDependency section */ 540 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 541 | isa = PBXTargetDependency; 542 | target = 13B07F861A680F5B00A75B9A /* RugbyExample */; 543 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 544 | }; 545 | /* End PBXTargetDependency section */ 546 | 547 | /* Begin PBXVariantGroup section */ 548 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 549 | isa = PBXVariantGroup; 550 | children = ( 551 | 13B07FB21A68108700A75B9A /* Base */, 552 | ); 553 | name = LaunchScreen.xib; 554 | path = iOS; 555 | sourceTree = ""; 556 | }; 557 | /* End PBXVariantGroup section */ 558 | 559 | /* Begin XCBuildConfiguration section */ 560 | 00E356F61AD99517003FC87E /* Debug */ = { 561 | isa = XCBuildConfiguration; 562 | buildSettings = { 563 | BUNDLE_LOADER = "$(TEST_HOST)"; 564 | FRAMEWORK_SEARCH_PATHS = ( 565 | "$(SDKROOT)/Developer/Library/Frameworks", 566 | "$(inherited)", 567 | ); 568 | GCC_PREPROCESSOR_DEFINITIONS = ( 569 | "DEBUG=1", 570 | "$(inherited)", 571 | ); 572 | INFOPLIST_FILE = RugbyExampleTests/Info.plist; 573 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 574 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 575 | PRODUCT_NAME = "$(TARGET_NAME)"; 576 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RugbyExample.app/RugbyExample"; 577 | }; 578 | name = Debug; 579 | }; 580 | 00E356F71AD99517003FC87E /* Release */ = { 581 | isa = XCBuildConfiguration; 582 | buildSettings = { 583 | BUNDLE_LOADER = "$(TEST_HOST)"; 584 | COPY_PHASE_STRIP = NO; 585 | FRAMEWORK_SEARCH_PATHS = ( 586 | "$(SDKROOT)/Developer/Library/Frameworks", 587 | "$(inherited)", 588 | ); 589 | INFOPLIST_FILE = RugbyExampleTests/Info.plist; 590 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 591 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 592 | PRODUCT_NAME = "$(TARGET_NAME)"; 593 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/RugbyExample.app/RugbyExample"; 594 | }; 595 | name = Release; 596 | }; 597 | 13B07F941A680F5B00A75B9A /* Debug */ = { 598 | isa = XCBuildConfiguration; 599 | buildSettings = { 600 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 601 | CODE_SIGN_IDENTITY = "iPhone Developer"; 602 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 603 | HEADER_SEARCH_PATHS = ( 604 | "$(inherited)", 605 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 606 | "$(SRCROOT)/node_modules/react-native/React/**", 607 | ); 608 | INFOPLIST_FILE = iOS/Info.plist; 609 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 610 | OTHER_LDFLAGS = "-ObjC"; 611 | PRODUCT_NAME = RugbyExample; 612 | PROVISIONING_PROFILE = ""; 613 | }; 614 | name = Debug; 615 | }; 616 | 13B07F951A680F5B00A75B9A /* Release */ = { 617 | isa = XCBuildConfiguration; 618 | buildSettings = { 619 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 620 | CODE_SIGN_IDENTITY = "iPhone Developer"; 621 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 622 | HEADER_SEARCH_PATHS = ( 623 | "$(inherited)", 624 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 625 | "$(SRCROOT)/node_modules/react-native/React/**", 626 | ); 627 | INFOPLIST_FILE = iOS/Info.plist; 628 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 629 | OTHER_LDFLAGS = "-ObjC"; 630 | PRODUCT_NAME = RugbyExample; 631 | PROVISIONING_PROFILE = ""; 632 | }; 633 | name = Release; 634 | }; 635 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 636 | isa = XCBuildConfiguration; 637 | buildSettings = { 638 | ALWAYS_SEARCH_USER_PATHS = NO; 639 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 640 | CLANG_CXX_LIBRARY = "libc++"; 641 | CLANG_ENABLE_MODULES = YES; 642 | CLANG_ENABLE_OBJC_ARC = YES; 643 | CLANG_WARN_BOOL_CONVERSION = YES; 644 | CLANG_WARN_CONSTANT_CONVERSION = YES; 645 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 646 | CLANG_WARN_EMPTY_BODY = YES; 647 | CLANG_WARN_ENUM_CONVERSION = YES; 648 | CLANG_WARN_INT_CONVERSION = YES; 649 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 650 | CLANG_WARN_UNREACHABLE_CODE = YES; 651 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 652 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 653 | COPY_PHASE_STRIP = NO; 654 | ENABLE_STRICT_OBJC_MSGSEND = YES; 655 | GCC_C_LANGUAGE_STANDARD = gnu99; 656 | GCC_DYNAMIC_NO_PIC = NO; 657 | GCC_OPTIMIZATION_LEVEL = 0; 658 | GCC_PREPROCESSOR_DEFINITIONS = ( 659 | "DEBUG=1", 660 | "$(inherited)", 661 | ); 662 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 663 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 664 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 665 | GCC_WARN_UNDECLARED_SELECTOR = YES; 666 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 667 | GCC_WARN_UNUSED_FUNCTION = YES; 668 | GCC_WARN_UNUSED_VARIABLE = YES; 669 | HEADER_SEARCH_PATHS = ( 670 | "$(inherited)", 671 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 672 | "$(SRCROOT)/node_modules/react-native/React/**", 673 | ); 674 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 675 | MTL_ENABLE_DEBUG_INFO = YES; 676 | ONLY_ACTIVE_ARCH = YES; 677 | SDKROOT = iphoneos; 678 | }; 679 | name = Debug; 680 | }; 681 | 83CBBA211A601CBA00E9B192 /* Release */ = { 682 | isa = XCBuildConfiguration; 683 | buildSettings = { 684 | ALWAYS_SEARCH_USER_PATHS = NO; 685 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 686 | CLANG_CXX_LIBRARY = "libc++"; 687 | CLANG_ENABLE_MODULES = YES; 688 | CLANG_ENABLE_OBJC_ARC = YES; 689 | CLANG_WARN_BOOL_CONVERSION = YES; 690 | CLANG_WARN_CONSTANT_CONVERSION = YES; 691 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 692 | CLANG_WARN_EMPTY_BODY = YES; 693 | CLANG_WARN_ENUM_CONVERSION = YES; 694 | CLANG_WARN_INT_CONVERSION = YES; 695 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 696 | CLANG_WARN_UNREACHABLE_CODE = YES; 697 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 698 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 699 | COPY_PHASE_STRIP = YES; 700 | ENABLE_NS_ASSERTIONS = NO; 701 | ENABLE_STRICT_OBJC_MSGSEND = YES; 702 | GCC_C_LANGUAGE_STANDARD = gnu99; 703 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 704 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 705 | GCC_WARN_UNDECLARED_SELECTOR = YES; 706 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 707 | GCC_WARN_UNUSED_FUNCTION = YES; 708 | GCC_WARN_UNUSED_VARIABLE = YES; 709 | HEADER_SEARCH_PATHS = ( 710 | "$(inherited)", 711 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 712 | "$(SRCROOT)/node_modules/react-native/React/**", 713 | ); 714 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 715 | MTL_ENABLE_DEBUG_INFO = NO; 716 | SDKROOT = iphoneos; 717 | VALIDATE_PRODUCT = YES; 718 | }; 719 | name = Release; 720 | }; 721 | /* End XCBuildConfiguration section */ 722 | 723 | /* Begin XCConfigurationList section */ 724 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "RugbyExampleTests" */ = { 725 | isa = XCConfigurationList; 726 | buildConfigurations = ( 727 | 00E356F61AD99517003FC87E /* Debug */, 728 | 00E356F71AD99517003FC87E /* Release */, 729 | ); 730 | defaultConfigurationIsVisible = 0; 731 | defaultConfigurationName = Release; 732 | }; 733 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "RugbyExample" */ = { 734 | isa = XCConfigurationList; 735 | buildConfigurations = ( 736 | 13B07F941A680F5B00A75B9A /* Debug */, 737 | 13B07F951A680F5B00A75B9A /* Release */, 738 | ); 739 | defaultConfigurationIsVisible = 0; 740 | defaultConfigurationName = Release; 741 | }; 742 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "RugbyExample" */ = { 743 | isa = XCConfigurationList; 744 | buildConfigurations = ( 745 | 83CBBA201A601CBA00E9B192 /* Debug */, 746 | 83CBBA211A601CBA00E9B192 /* Release */, 747 | ); 748 | defaultConfigurationIsVisible = 0; 749 | defaultConfigurationName = Release; 750 | }; 751 | /* End XCConfigurationList section */ 752 | }; 753 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 754 | } 755 | -------------------------------------------------------------------------------- /examples/FacebookTabsExample/FacebookTabsExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */ = {isa = PBXBuildFile; fileRef = 008F07F21AC5B25A0029DE68 /* main.jsbundle */; }; 11 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */; }; 12 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */; }; 13 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */; }; 14 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */; }; 15 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */; }; 16 | 00E356F31AD99517003FC87E /* FacebookTabsExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* FacebookTabsExampleTests.m */; }; 17 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78C398B91ACF4ADC00677621 /* libRCTLinking.a */; }; 18 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */; }; 19 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; }; 20 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 21 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 22 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 23 | 13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 24 | 146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; }; 25 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; }; 26 | CE751EAE1B2CB7C0008F49D8 /* libReactNativeIcons.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE751EAD1B2CB7B5008F49D8 /* libReactNativeIcons.a */; }; 27 | CE751EB31B2CB80D008F49D8 /* FontAwesome.otf in Resources */ = {isa = PBXBuildFile; fileRef = CE751EAF1B2CB80D008F49D8 /* FontAwesome.otf */; }; 28 | CE751EB41B2CB80D008F49D8 /* foundation-icons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE751EB01B2CB80D008F49D8 /* foundation-icons.ttf */; }; 29 | CE751EB51B2CB80D008F49D8 /* ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE751EB11B2CB80D008F49D8 /* ionicons.ttf */; }; 30 | CE751EB61B2CB80D008F49D8 /* zocial-regular-webfont.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CE751EB21B2CB80D008F49D8 /* zocial-regular-webfont.ttf */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXContainerItemProxy section */ 34 | 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 37 | proxyType = 2; 38 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 39 | remoteInfo = RCTActionSheet; 40 | }; 41 | 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 44 | proxyType = 2; 45 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 46 | remoteInfo = RCTGeolocation; 47 | }; 48 | 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 51 | proxyType = 2; 52 | remoteGlobalIDString = 58B5115D1A9E6B3D00147676; 53 | remoteInfo = RCTImage; 54 | }; 55 | 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 58 | proxyType = 2; 59 | remoteGlobalIDString = 58B511DB1A9E6C8500147676; 60 | remoteInfo = RCTNetwork; 61 | }; 62 | 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 65 | proxyType = 2; 66 | remoteGlobalIDString = 832C81801AAF6DEF007FA2F7; 67 | remoteInfo = RCTVibration; 68 | }; 69 | 00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = { 70 | isa = PBXContainerItemProxy; 71 | containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */; 72 | proxyType = 1; 73 | remoteGlobalIDString = 13B07F861A680F5B00A75B9A; 74 | remoteInfo = FacebookTabsExample; 75 | }; 76 | 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */ = { 77 | isa = PBXContainerItemProxy; 78 | containerPortal = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 79 | proxyType = 2; 80 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 81 | remoteInfo = RCTSettings; 82 | }; 83 | 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */ = { 84 | isa = PBXContainerItemProxy; 85 | containerPortal = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 86 | proxyType = 2; 87 | remoteGlobalIDString = 3C86DF461ADF2C930047B81A; 88 | remoteInfo = RCTWebSocket; 89 | }; 90 | 146834031AC3E56700842450 /* PBXContainerItemProxy */ = { 91 | isa = PBXContainerItemProxy; 92 | containerPortal = 146833FF1AC3E56700842450 /* React.xcodeproj */; 93 | proxyType = 2; 94 | remoteGlobalIDString = 83CBBA2E1A601D0E00E9B192; 95 | remoteInfo = React; 96 | }; 97 | 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */ = { 98 | isa = PBXContainerItemProxy; 99 | containerPortal = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 100 | proxyType = 2; 101 | remoteGlobalIDString = 134814201AA4EA6300B7C361; 102 | remoteInfo = RCTLinking; 103 | }; 104 | 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */ = { 105 | isa = PBXContainerItemProxy; 106 | containerPortal = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 107 | proxyType = 2; 108 | remoteGlobalIDString = 58B5119B1A9E6C1200147676; 109 | remoteInfo = RCTText; 110 | }; 111 | CE751EAC1B2CB7B5008F49D8 /* PBXContainerItemProxy */ = { 112 | isa = PBXContainerItemProxy; 113 | containerPortal = CE751E9E1B2CB7B5008F49D8 /* ReactNativeIcons.xcodeproj */; 114 | proxyType = 2; 115 | remoteGlobalIDString = 2F5A3EB81ACDBF8000439386; 116 | remoteInfo = ReactNativeIcons; 117 | }; 118 | /* End PBXContainerItemProxy section */ 119 | 120 | /* Begin PBXFileReference section */ 121 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = main.jsbundle; path = iOS/main.jsbundle; sourceTree = ""; }; 122 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTActionSheet.xcodeproj; path = "node_modules/react-native/Libraries/ActionSheetIOS/RCTActionSheet.xcodeproj"; sourceTree = ""; }; 123 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTGeolocation.xcodeproj; path = "node_modules/react-native/Libraries/Geolocation/RCTGeolocation.xcodeproj"; sourceTree = ""; }; 124 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTImage.xcodeproj; path = "node_modules/react-native/Libraries/Image/RCTImage.xcodeproj"; sourceTree = ""; }; 125 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTNetwork.xcodeproj; path = "node_modules/react-native/Libraries/Network/RCTNetwork.xcodeproj"; sourceTree = ""; }; 126 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTVibration.xcodeproj; path = "node_modules/react-native/Libraries/Vibration/RCTVibration.xcodeproj"; sourceTree = ""; }; 127 | 00E356EE1AD99517003FC87E /* FacebookTabsExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FacebookTabsExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 128 | 00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 129 | 00E356F21AD99517003FC87E /* FacebookTabsExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FacebookTabsExampleTests.m; sourceTree = ""; }; 130 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTSettings.xcodeproj; path = "node_modules/react-native/Libraries/Settings/RCTSettings.xcodeproj"; sourceTree = ""; }; 131 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWebSocket.xcodeproj; path = "node_modules/react-native/Libraries/WebSocket/RCTWebSocket.xcodeproj"; sourceTree = ""; }; 132 | 13B07F961A680F5B00A75B9A /* FacebookTabsExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FacebookTabsExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 133 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = iOS/AppDelegate.h; sourceTree = ""; }; 134 | 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = iOS/AppDelegate.m; sourceTree = ""; }; 135 | 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 136 | 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = iOS/Images.xcassets; sourceTree = ""; }; 137 | 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = iOS/Info.plist; sourceTree = ""; }; 138 | 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = iOS/main.m; sourceTree = ""; }; 139 | 146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "node_modules/react-native/React/React.xcodeproj"; sourceTree = ""; }; 140 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTLinking.xcodeproj; path = "node_modules/react-native/Libraries/LinkingIOS/RCTLinking.xcodeproj"; sourceTree = ""; }; 141 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTText.xcodeproj; path = "node_modules/react-native/Libraries/Text/RCTText.xcodeproj"; sourceTree = ""; }; 142 | CE751E9E1B2CB7B5008F49D8 /* ReactNativeIcons.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeIcons.xcodeproj; path = "node_modules/react-native-icons/ios/ReactNativeIcons.xcodeproj"; sourceTree = ""; }; 143 | CE751EAF1B2CB80D008F49D8 /* FontAwesome.otf */ = {isa = PBXFileReference; lastKnownFileType = file; name = FontAwesome.otf; path = "node_modules/react-native-icons/ios/ReactNativeIcons/Libraries/FontAwesomeKit/FontAwesome.otf"; sourceTree = ""; }; 144 | CE751EB01B2CB80D008F49D8 /* foundation-icons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "foundation-icons.ttf"; path = "node_modules/react-native-icons/ios/ReactNativeIcons/Libraries/FontAwesomeKit/foundation-icons.ttf"; sourceTree = ""; }; 145 | CE751EB11B2CB80D008F49D8 /* ionicons.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = ionicons.ttf; path = "node_modules/react-native-icons/ios/ReactNativeIcons/Libraries/FontAwesomeKit/ionicons.ttf"; sourceTree = ""; }; 146 | CE751EB21B2CB80D008F49D8 /* zocial-regular-webfont.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; name = "zocial-regular-webfont.ttf"; path = "node_modules/react-native-icons/ios/ReactNativeIcons/Libraries/FontAwesomeKit/zocial-regular-webfont.ttf"; sourceTree = ""; }; 147 | /* End PBXFileReference section */ 148 | 149 | /* Begin PBXFrameworksBuildPhase section */ 150 | 00E356EB1AD99517003FC87E /* Frameworks */ = { 151 | isa = PBXFrameworksBuildPhase; 152 | buildActionMask = 2147483647; 153 | files = ( 154 | ); 155 | runOnlyForDeploymentPostprocessing = 0; 156 | }; 157 | 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { 158 | isa = PBXFrameworksBuildPhase; 159 | buildActionMask = 2147483647; 160 | files = ( 161 | CE751EAE1B2CB7C0008F49D8 /* libReactNativeIcons.a in Frameworks */, 162 | 146834051AC3E58100842450 /* libReact.a in Frameworks */, 163 | 00C302E51ABCBA2D00DB3ED1 /* libRCTActionSheet.a in Frameworks */, 164 | 00C302E71ABCBA2D00DB3ED1 /* libRCTGeolocation.a in Frameworks */, 165 | 00C302E81ABCBA2D00DB3ED1 /* libRCTImage.a in Frameworks */, 166 | 133E29F31AD74F7200F7D852 /* libRCTLinking.a in Frameworks */, 167 | 00C302E91ABCBA2D00DB3ED1 /* libRCTNetwork.a in Frameworks */, 168 | 139105C61AF99C1200B5F7CC /* libRCTSettings.a in Frameworks */, 169 | 832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */, 170 | 00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */, 171 | 139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */, 172 | ); 173 | runOnlyForDeploymentPostprocessing = 0; 174 | }; 175 | /* End PBXFrameworksBuildPhase section */ 176 | 177 | /* Begin PBXGroup section */ 178 | 00C302A81ABCB8CE00DB3ED1 /* Products */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */, 182 | ); 183 | name = Products; 184 | sourceTree = ""; 185 | }; 186 | 00C302B61ABCB90400DB3ED1 /* Products */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */, 190 | ); 191 | name = Products; 192 | sourceTree = ""; 193 | }; 194 | 00C302BC1ABCB91800DB3ED1 /* Products */ = { 195 | isa = PBXGroup; 196 | children = ( 197 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */, 198 | ); 199 | name = Products; 200 | sourceTree = ""; 201 | }; 202 | 00C302D41ABCB9D200DB3ED1 /* Products */ = { 203 | isa = PBXGroup; 204 | children = ( 205 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */, 206 | ); 207 | name = Products; 208 | sourceTree = ""; 209 | }; 210 | 00C302E01ABCB9EE00DB3ED1 /* Products */ = { 211 | isa = PBXGroup; 212 | children = ( 213 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */, 214 | ); 215 | name = Products; 216 | sourceTree = ""; 217 | }; 218 | 00E356EF1AD99517003FC87E /* FacebookTabsExampleTests */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | 00E356F21AD99517003FC87E /* FacebookTabsExampleTests.m */, 222 | 00E356F01AD99517003FC87E /* Supporting Files */, 223 | ); 224 | path = FacebookTabsExampleTests; 225 | sourceTree = ""; 226 | }; 227 | 00E356F01AD99517003FC87E /* Supporting Files */ = { 228 | isa = PBXGroup; 229 | children = ( 230 | 00E356F11AD99517003FC87E /* Info.plist */, 231 | ); 232 | name = "Supporting Files"; 233 | sourceTree = ""; 234 | }; 235 | 139105B71AF99BAD00B5F7CC /* Products */ = { 236 | isa = PBXGroup; 237 | children = ( 238 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */, 239 | ); 240 | name = Products; 241 | sourceTree = ""; 242 | }; 243 | 139FDEE71B06529A00C62182 /* Products */ = { 244 | isa = PBXGroup; 245 | children = ( 246 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */, 247 | ); 248 | name = Products; 249 | sourceTree = ""; 250 | }; 251 | 13B07FAE1A68108700A75B9A /* FacebookTabsExample */ = { 252 | isa = PBXGroup; 253 | children = ( 254 | 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 255 | 13B07FAF1A68108700A75B9A /* AppDelegate.h */, 256 | 13B07FB01A68108700A75B9A /* AppDelegate.m */, 257 | 13B07FB51A68108700A75B9A /* Images.xcassets */, 258 | 13B07FB61A68108700A75B9A /* Info.plist */, 259 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 260 | 13B07FB71A68108700A75B9A /* main.m */, 261 | ); 262 | name = FacebookTabsExample; 263 | sourceTree = ""; 264 | }; 265 | 146834001AC3E56700842450 /* Products */ = { 266 | isa = PBXGroup; 267 | children = ( 268 | 146834041AC3E56700842450 /* libReact.a */, 269 | ); 270 | name = Products; 271 | sourceTree = ""; 272 | }; 273 | 78C398B11ACF4ADC00677621 /* Products */ = { 274 | isa = PBXGroup; 275 | children = ( 276 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */, 277 | ); 278 | name = Products; 279 | sourceTree = ""; 280 | }; 281 | 832341AE1AAA6A7D00B99B32 /* Libraries */ = { 282 | isa = PBXGroup; 283 | children = ( 284 | CE751E9E1B2CB7B5008F49D8 /* ReactNativeIcons.xcodeproj */, 285 | 146833FF1AC3E56700842450 /* React.xcodeproj */, 286 | 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */, 287 | 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */, 288 | 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */, 289 | 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */, 290 | 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */, 291 | 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */, 292 | 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */, 293 | 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */, 294 | 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */, 295 | ); 296 | name = Libraries; 297 | sourceTree = ""; 298 | }; 299 | 832341B11AAA6A8300B99B32 /* Products */ = { 300 | isa = PBXGroup; 301 | children = ( 302 | 832341B51AAA6A8300B99B32 /* libRCTText.a */, 303 | ); 304 | name = Products; 305 | sourceTree = ""; 306 | }; 307 | 83CBB9F61A601CBA00E9B192 = { 308 | isa = PBXGroup; 309 | children = ( 310 | CE751EAF1B2CB80D008F49D8 /* FontAwesome.otf */, 311 | CE751EB01B2CB80D008F49D8 /* foundation-icons.ttf */, 312 | CE751EB11B2CB80D008F49D8 /* ionicons.ttf */, 313 | CE751EB21B2CB80D008F49D8 /* zocial-regular-webfont.ttf */, 314 | 13B07FAE1A68108700A75B9A /* FacebookTabsExample */, 315 | 832341AE1AAA6A7D00B99B32 /* Libraries */, 316 | 00E356EF1AD99517003FC87E /* FacebookTabsExampleTests */, 317 | 83CBBA001A601CBA00E9B192 /* Products */, 318 | ); 319 | indentWidth = 2; 320 | sourceTree = ""; 321 | tabWidth = 2; 322 | }; 323 | 83CBBA001A601CBA00E9B192 /* Products */ = { 324 | isa = PBXGroup; 325 | children = ( 326 | 13B07F961A680F5B00A75B9A /* FacebookTabsExample.app */, 327 | 00E356EE1AD99517003FC87E /* FacebookTabsExampleTests.xctest */, 328 | ); 329 | name = Products; 330 | sourceTree = ""; 331 | }; 332 | CE751E9F1B2CB7B5008F49D8 /* Products */ = { 333 | isa = PBXGroup; 334 | children = ( 335 | CE751EAD1B2CB7B5008F49D8 /* libReactNativeIcons.a */, 336 | ); 337 | name = Products; 338 | sourceTree = ""; 339 | }; 340 | /* End PBXGroup section */ 341 | 342 | /* Begin PBXNativeTarget section */ 343 | 00E356ED1AD99517003FC87E /* FacebookTabsExampleTests */ = { 344 | isa = PBXNativeTarget; 345 | buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FacebookTabsExampleTests" */; 346 | buildPhases = ( 347 | 00E356EA1AD99517003FC87E /* Sources */, 348 | 00E356EB1AD99517003FC87E /* Frameworks */, 349 | 00E356EC1AD99517003FC87E /* Resources */, 350 | ); 351 | buildRules = ( 352 | ); 353 | dependencies = ( 354 | 00E356F51AD99517003FC87E /* PBXTargetDependency */, 355 | ); 356 | name = FacebookTabsExampleTests; 357 | productName = FacebookTabsExampleTests; 358 | productReference = 00E356EE1AD99517003FC87E /* FacebookTabsExampleTests.xctest */; 359 | productType = "com.apple.product-type.bundle.unit-test"; 360 | }; 361 | 13B07F861A680F5B00A75B9A /* FacebookTabsExample */ = { 362 | isa = PBXNativeTarget; 363 | buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FacebookTabsExample" */; 364 | buildPhases = ( 365 | 13B07F871A680F5B00A75B9A /* Sources */, 366 | 13B07F8C1A680F5B00A75B9A /* Frameworks */, 367 | 13B07F8E1A680F5B00A75B9A /* Resources */, 368 | ); 369 | buildRules = ( 370 | ); 371 | dependencies = ( 372 | ); 373 | name = FacebookTabsExample; 374 | productName = "Hello World"; 375 | productReference = 13B07F961A680F5B00A75B9A /* FacebookTabsExample.app */; 376 | productType = "com.apple.product-type.application"; 377 | }; 378 | /* End PBXNativeTarget section */ 379 | 380 | /* Begin PBXProject section */ 381 | 83CBB9F71A601CBA00E9B192 /* Project object */ = { 382 | isa = PBXProject; 383 | attributes = { 384 | LastUpgradeCheck = 0610; 385 | ORGANIZATIONNAME = Facebook; 386 | TargetAttributes = { 387 | 00E356ED1AD99517003FC87E = { 388 | CreatedOnToolsVersion = 6.2; 389 | TestTargetID = 13B07F861A680F5B00A75B9A; 390 | }; 391 | }; 392 | }; 393 | buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FacebookTabsExample" */; 394 | compatibilityVersion = "Xcode 3.2"; 395 | developmentRegion = English; 396 | hasScannedForEncodings = 0; 397 | knownRegions = ( 398 | en, 399 | Base, 400 | ); 401 | mainGroup = 83CBB9F61A601CBA00E9B192; 402 | productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; 403 | projectDirPath = ""; 404 | projectReferences = ( 405 | { 406 | ProductGroup = 00C302A81ABCB8CE00DB3ED1 /* Products */; 407 | ProjectRef = 00C302A71ABCB8CE00DB3ED1 /* RCTActionSheet.xcodeproj */; 408 | }, 409 | { 410 | ProductGroup = 00C302B61ABCB90400DB3ED1 /* Products */; 411 | ProjectRef = 00C302B51ABCB90400DB3ED1 /* RCTGeolocation.xcodeproj */; 412 | }, 413 | { 414 | ProductGroup = 00C302BC1ABCB91800DB3ED1 /* Products */; 415 | ProjectRef = 00C302BB1ABCB91800DB3ED1 /* RCTImage.xcodeproj */; 416 | }, 417 | { 418 | ProductGroup = 78C398B11ACF4ADC00677621 /* Products */; 419 | ProjectRef = 78C398B01ACF4ADC00677621 /* RCTLinking.xcodeproj */; 420 | }, 421 | { 422 | ProductGroup = 00C302D41ABCB9D200DB3ED1 /* Products */; 423 | ProjectRef = 00C302D31ABCB9D200DB3ED1 /* RCTNetwork.xcodeproj */; 424 | }, 425 | { 426 | ProductGroup = 139105B71AF99BAD00B5F7CC /* Products */; 427 | ProjectRef = 139105B61AF99BAD00B5F7CC /* RCTSettings.xcodeproj */; 428 | }, 429 | { 430 | ProductGroup = 832341B11AAA6A8300B99B32 /* Products */; 431 | ProjectRef = 832341B01AAA6A8300B99B32 /* RCTText.xcodeproj */; 432 | }, 433 | { 434 | ProductGroup = 00C302E01ABCB9EE00DB3ED1 /* Products */; 435 | ProjectRef = 00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */; 436 | }, 437 | { 438 | ProductGroup = 139FDEE71B06529A00C62182 /* Products */; 439 | ProjectRef = 139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */; 440 | }, 441 | { 442 | ProductGroup = 146834001AC3E56700842450 /* Products */; 443 | ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */; 444 | }, 445 | { 446 | ProductGroup = CE751E9F1B2CB7B5008F49D8 /* Products */; 447 | ProjectRef = CE751E9E1B2CB7B5008F49D8 /* ReactNativeIcons.xcodeproj */; 448 | }, 449 | ); 450 | projectRoot = ""; 451 | targets = ( 452 | 13B07F861A680F5B00A75B9A /* FacebookTabsExample */, 453 | 00E356ED1AD99517003FC87E /* FacebookTabsExampleTests */, 454 | ); 455 | }; 456 | /* End PBXProject section */ 457 | 458 | /* Begin PBXReferenceProxy section */ 459 | 00C302AC1ABCB8CE00DB3ED1 /* libRCTActionSheet.a */ = { 460 | isa = PBXReferenceProxy; 461 | fileType = archive.ar; 462 | path = libRCTActionSheet.a; 463 | remoteRef = 00C302AB1ABCB8CE00DB3ED1 /* PBXContainerItemProxy */; 464 | sourceTree = BUILT_PRODUCTS_DIR; 465 | }; 466 | 00C302BA1ABCB90400DB3ED1 /* libRCTGeolocation.a */ = { 467 | isa = PBXReferenceProxy; 468 | fileType = archive.ar; 469 | path = libRCTGeolocation.a; 470 | remoteRef = 00C302B91ABCB90400DB3ED1 /* PBXContainerItemProxy */; 471 | sourceTree = BUILT_PRODUCTS_DIR; 472 | }; 473 | 00C302C01ABCB91800DB3ED1 /* libRCTImage.a */ = { 474 | isa = PBXReferenceProxy; 475 | fileType = archive.ar; 476 | path = libRCTImage.a; 477 | remoteRef = 00C302BF1ABCB91800DB3ED1 /* PBXContainerItemProxy */; 478 | sourceTree = BUILT_PRODUCTS_DIR; 479 | }; 480 | 00C302DC1ABCB9D200DB3ED1 /* libRCTNetwork.a */ = { 481 | isa = PBXReferenceProxy; 482 | fileType = archive.ar; 483 | path = libRCTNetwork.a; 484 | remoteRef = 00C302DB1ABCB9D200DB3ED1 /* PBXContainerItemProxy */; 485 | sourceTree = BUILT_PRODUCTS_DIR; 486 | }; 487 | 00C302E41ABCB9EE00DB3ED1 /* libRCTVibration.a */ = { 488 | isa = PBXReferenceProxy; 489 | fileType = archive.ar; 490 | path = libRCTVibration.a; 491 | remoteRef = 00C302E31ABCB9EE00DB3ED1 /* PBXContainerItemProxy */; 492 | sourceTree = BUILT_PRODUCTS_DIR; 493 | }; 494 | 139105C11AF99BAD00B5F7CC /* libRCTSettings.a */ = { 495 | isa = PBXReferenceProxy; 496 | fileType = archive.ar; 497 | path = libRCTSettings.a; 498 | remoteRef = 139105C01AF99BAD00B5F7CC /* PBXContainerItemProxy */; 499 | sourceTree = BUILT_PRODUCTS_DIR; 500 | }; 501 | 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */ = { 502 | isa = PBXReferenceProxy; 503 | fileType = archive.ar; 504 | path = libRCTWebSocket.a; 505 | remoteRef = 139FDEF31B06529B00C62182 /* PBXContainerItemProxy */; 506 | sourceTree = BUILT_PRODUCTS_DIR; 507 | }; 508 | 146834041AC3E56700842450 /* libReact.a */ = { 509 | isa = PBXReferenceProxy; 510 | fileType = archive.ar; 511 | path = libReact.a; 512 | remoteRef = 146834031AC3E56700842450 /* PBXContainerItemProxy */; 513 | sourceTree = BUILT_PRODUCTS_DIR; 514 | }; 515 | 78C398B91ACF4ADC00677621 /* libRCTLinking.a */ = { 516 | isa = PBXReferenceProxy; 517 | fileType = archive.ar; 518 | path = libRCTLinking.a; 519 | remoteRef = 78C398B81ACF4ADC00677621 /* PBXContainerItemProxy */; 520 | sourceTree = BUILT_PRODUCTS_DIR; 521 | }; 522 | 832341B51AAA6A8300B99B32 /* libRCTText.a */ = { 523 | isa = PBXReferenceProxy; 524 | fileType = archive.ar; 525 | path = libRCTText.a; 526 | remoteRef = 832341B41AAA6A8300B99B32 /* PBXContainerItemProxy */; 527 | sourceTree = BUILT_PRODUCTS_DIR; 528 | }; 529 | CE751EAD1B2CB7B5008F49D8 /* libReactNativeIcons.a */ = { 530 | isa = PBXReferenceProxy; 531 | fileType = archive.ar; 532 | path = libReactNativeIcons.a; 533 | remoteRef = CE751EAC1B2CB7B5008F49D8 /* PBXContainerItemProxy */; 534 | sourceTree = BUILT_PRODUCTS_DIR; 535 | }; 536 | /* End PBXReferenceProxy section */ 537 | 538 | /* Begin PBXResourcesBuildPhase section */ 539 | 00E356EC1AD99517003FC87E /* Resources */ = { 540 | isa = PBXResourcesBuildPhase; 541 | buildActionMask = 2147483647; 542 | files = ( 543 | ); 544 | runOnlyForDeploymentPostprocessing = 0; 545 | }; 546 | 13B07F8E1A680F5B00A75B9A /* Resources */ = { 547 | isa = PBXResourcesBuildPhase; 548 | buildActionMask = 2147483647; 549 | files = ( 550 | CE751EB31B2CB80D008F49D8 /* FontAwesome.otf in Resources */, 551 | CE751EB41B2CB80D008F49D8 /* foundation-icons.ttf in Resources */, 552 | CE751EB51B2CB80D008F49D8 /* ionicons.ttf in Resources */, 553 | CE751EB61B2CB80D008F49D8 /* zocial-regular-webfont.ttf in Resources */, 554 | 008F07F31AC5B25A0029DE68 /* main.jsbundle in Resources */, 555 | 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, 556 | 13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */, 557 | ); 558 | runOnlyForDeploymentPostprocessing = 0; 559 | }; 560 | /* End PBXResourcesBuildPhase section */ 561 | 562 | /* Begin PBXSourcesBuildPhase section */ 563 | 00E356EA1AD99517003FC87E /* Sources */ = { 564 | isa = PBXSourcesBuildPhase; 565 | buildActionMask = 2147483647; 566 | files = ( 567 | 00E356F31AD99517003FC87E /* FacebookTabsExampleTests.m in Sources */, 568 | ); 569 | runOnlyForDeploymentPostprocessing = 0; 570 | }; 571 | 13B07F871A680F5B00A75B9A /* Sources */ = { 572 | isa = PBXSourcesBuildPhase; 573 | buildActionMask = 2147483647; 574 | files = ( 575 | 13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */, 576 | 13B07FC11A68108700A75B9A /* main.m in Sources */, 577 | ); 578 | runOnlyForDeploymentPostprocessing = 0; 579 | }; 580 | /* End PBXSourcesBuildPhase section */ 581 | 582 | /* Begin PBXTargetDependency section */ 583 | 00E356F51AD99517003FC87E /* PBXTargetDependency */ = { 584 | isa = PBXTargetDependency; 585 | target = 13B07F861A680F5B00A75B9A /* FacebookTabsExample */; 586 | targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */; 587 | }; 588 | /* End PBXTargetDependency section */ 589 | 590 | /* Begin PBXVariantGroup section */ 591 | 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { 592 | isa = PBXVariantGroup; 593 | children = ( 594 | 13B07FB21A68108700A75B9A /* Base */, 595 | ); 596 | name = LaunchScreen.xib; 597 | path = iOS; 598 | sourceTree = ""; 599 | }; 600 | /* End PBXVariantGroup section */ 601 | 602 | /* Begin XCBuildConfiguration section */ 603 | 00E356F61AD99517003FC87E /* Debug */ = { 604 | isa = XCBuildConfiguration; 605 | buildSettings = { 606 | BUNDLE_LOADER = "$(TEST_HOST)"; 607 | FRAMEWORK_SEARCH_PATHS = ( 608 | "$(SDKROOT)/Developer/Library/Frameworks", 609 | "$(inherited)", 610 | ); 611 | GCC_PREPROCESSOR_DEFINITIONS = ( 612 | "DEBUG=1", 613 | "$(inherited)", 614 | ); 615 | INFOPLIST_FILE = FacebookTabsExampleTests/Info.plist; 616 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 617 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 618 | PRODUCT_NAME = "$(TARGET_NAME)"; 619 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; 620 | }; 621 | name = Debug; 622 | }; 623 | 00E356F71AD99517003FC87E /* Release */ = { 624 | isa = XCBuildConfiguration; 625 | buildSettings = { 626 | BUNDLE_LOADER = "$(TEST_HOST)"; 627 | COPY_PHASE_STRIP = NO; 628 | FRAMEWORK_SEARCH_PATHS = ( 629 | "$(SDKROOT)/Developer/Library/Frameworks", 630 | "$(inherited)", 631 | ); 632 | INFOPLIST_FILE = FacebookTabsExampleTests/Info.plist; 633 | IPHONEOS_DEPLOYMENT_TARGET = 8.2; 634 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 635 | PRODUCT_NAME = "$(TARGET_NAME)"; 636 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/FacebookTabsExample.app/FacebookTabsExample"; 637 | }; 638 | name = Release; 639 | }; 640 | 13B07F941A680F5B00A75B9A /* Debug */ = { 641 | isa = XCBuildConfiguration; 642 | buildSettings = { 643 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 644 | HEADER_SEARCH_PATHS = ( 645 | "$(inherited)", 646 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 647 | "$(SRCROOT)/node_modules/react-native/React/**", 648 | ); 649 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; 650 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 651 | OTHER_LDFLAGS = "-ObjC"; 652 | PRODUCT_NAME = FacebookTabsExample; 653 | }; 654 | name = Debug; 655 | }; 656 | 13B07F951A680F5B00A75B9A /* Release */ = { 657 | isa = XCBuildConfiguration; 658 | buildSettings = { 659 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 660 | HEADER_SEARCH_PATHS = ( 661 | "$(inherited)", 662 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 663 | "$(SRCROOT)/node_modules/react-native/React/**", 664 | ); 665 | INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; 666 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 667 | OTHER_LDFLAGS = "-ObjC"; 668 | PRODUCT_NAME = FacebookTabsExample; 669 | }; 670 | name = Release; 671 | }; 672 | 83CBBA201A601CBA00E9B192 /* Debug */ = { 673 | isa = XCBuildConfiguration; 674 | buildSettings = { 675 | ALWAYS_SEARCH_USER_PATHS = NO; 676 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 677 | CLANG_CXX_LIBRARY = "libc++"; 678 | CLANG_ENABLE_MODULES = YES; 679 | CLANG_ENABLE_OBJC_ARC = YES; 680 | CLANG_WARN_BOOL_CONVERSION = YES; 681 | CLANG_WARN_CONSTANT_CONVERSION = YES; 682 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 683 | CLANG_WARN_EMPTY_BODY = YES; 684 | CLANG_WARN_ENUM_CONVERSION = YES; 685 | CLANG_WARN_INT_CONVERSION = YES; 686 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 687 | CLANG_WARN_UNREACHABLE_CODE = YES; 688 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 689 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 690 | COPY_PHASE_STRIP = NO; 691 | ENABLE_STRICT_OBJC_MSGSEND = YES; 692 | GCC_C_LANGUAGE_STANDARD = gnu99; 693 | GCC_DYNAMIC_NO_PIC = NO; 694 | GCC_OPTIMIZATION_LEVEL = 0; 695 | GCC_PREPROCESSOR_DEFINITIONS = ( 696 | "DEBUG=1", 697 | "$(inherited)", 698 | ); 699 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 700 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 701 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 702 | GCC_WARN_UNDECLARED_SELECTOR = YES; 703 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 704 | GCC_WARN_UNUSED_FUNCTION = YES; 705 | GCC_WARN_UNUSED_VARIABLE = YES; 706 | HEADER_SEARCH_PATHS = ( 707 | "$(inherited)", 708 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 709 | "$(SRCROOT)/node_modules/react-native/React/**", 710 | ); 711 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 712 | MTL_ENABLE_DEBUG_INFO = YES; 713 | ONLY_ACTIVE_ARCH = YES; 714 | SDKROOT = iphoneos; 715 | }; 716 | name = Debug; 717 | }; 718 | 83CBBA211A601CBA00E9B192 /* Release */ = { 719 | isa = XCBuildConfiguration; 720 | buildSettings = { 721 | ALWAYS_SEARCH_USER_PATHS = NO; 722 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 723 | CLANG_CXX_LIBRARY = "libc++"; 724 | CLANG_ENABLE_MODULES = YES; 725 | CLANG_ENABLE_OBJC_ARC = YES; 726 | CLANG_WARN_BOOL_CONVERSION = YES; 727 | CLANG_WARN_CONSTANT_CONVERSION = YES; 728 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 729 | CLANG_WARN_EMPTY_BODY = YES; 730 | CLANG_WARN_ENUM_CONVERSION = YES; 731 | CLANG_WARN_INT_CONVERSION = YES; 732 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 733 | CLANG_WARN_UNREACHABLE_CODE = YES; 734 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 735 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 736 | COPY_PHASE_STRIP = YES; 737 | ENABLE_NS_ASSERTIONS = NO; 738 | ENABLE_STRICT_OBJC_MSGSEND = YES; 739 | GCC_C_LANGUAGE_STANDARD = gnu99; 740 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 741 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 742 | GCC_WARN_UNDECLARED_SELECTOR = YES; 743 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 744 | GCC_WARN_UNUSED_FUNCTION = YES; 745 | GCC_WARN_UNUSED_VARIABLE = YES; 746 | HEADER_SEARCH_PATHS = ( 747 | "$(inherited)", 748 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include, 749 | "$(SRCROOT)/node_modules/react-native/React/**", 750 | ); 751 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 752 | MTL_ENABLE_DEBUG_INFO = NO; 753 | SDKROOT = iphoneos; 754 | VALIDATE_PRODUCT = YES; 755 | }; 756 | name = Release; 757 | }; 758 | /* End XCBuildConfiguration section */ 759 | 760 | /* Begin XCConfigurationList section */ 761 | 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "FacebookTabsExampleTests" */ = { 762 | isa = XCConfigurationList; 763 | buildConfigurations = ( 764 | 00E356F61AD99517003FC87E /* Debug */, 765 | 00E356F71AD99517003FC87E /* Release */, 766 | ); 767 | defaultConfigurationIsVisible = 0; 768 | defaultConfigurationName = Release; 769 | }; 770 | 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FacebookTabsExample" */ = { 771 | isa = XCConfigurationList; 772 | buildConfigurations = ( 773 | 13B07F941A680F5B00A75B9A /* Debug */, 774 | 13B07F951A680F5B00A75B9A /* Release */, 775 | ); 776 | defaultConfigurationIsVisible = 0; 777 | defaultConfigurationName = Release; 778 | }; 779 | 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FacebookTabsExample" */ = { 780 | isa = XCConfigurationList; 781 | buildConfigurations = ( 782 | 83CBBA201A601CBA00E9B192 /* Debug */, 783 | 83CBBA211A601CBA00E9B192 /* Release */, 784 | ); 785 | defaultConfigurationIsVisible = 0; 786 | defaultConfigurationName = Release; 787 | }; 788 | /* End XCConfigurationList section */ 789 | }; 790 | rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; 791 | } 792 | --------------------------------------------------------------------------------