├── tea.yaml ├── ios ├── InputScrollViewPlugin │ ├── InputScrollViewPlugin.h │ └── InputScrollViewPlugin.m └── InputScrollViewPlugin.xcodeproj │ └── project.pbxproj ├── .gitignore ├── .npmignore ├── README.md ├── package.json └── index.js /tea.yaml: -------------------------------------------------------------------------------- 1 | # https://tea.xyz/what-is-this-file 2 | --- 3 | version: 1.0.0 4 | codeOwners: 5 | - '0x10D90dC0034E2e82F0AC55954B3ed4EC0550ECe7' 6 | quorum: 1 7 | -------------------------------------------------------------------------------- /ios/InputScrollViewPlugin/InputScrollViewPlugin.h: -------------------------------------------------------------------------------- 1 | // 2 | // InputScrollViewPlugin.h 3 | // InputScrollViewPlugin 4 | // 5 | // Created by LvBingru on 4/11/16. 6 | // Copyright © 2016 erica. All rights reserved. 7 | // 8 | 9 | #import "RCTBridgeModule.h" 10 | 11 | @interface InputScrollViewPlugin : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | .idea 28 | .gradle 29 | local.properties 30 | 31 | # node.js 32 | # 33 | node_modules/ 34 | npm-debug.log 35 | -------------------------------------------------------------------------------- /.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 | project.xcworkspace 24 | 25 | # Android/IJ 26 | # 27 | .idea 28 | .gradle 29 | local.properties 30 | 31 | # node.js 32 | # 33 | node_modules/ 34 | npm-debug.log 35 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-native-inputscrollview 2 | 3 | 1. 防止键盘弹出时候,输入框被遮挡 4 | 2. 解决在ScrollView中点击其它元素时需要点击两次才能生效的问题 5 | 6 | ## 如何安装 7 | 8 | 0.35以上: 9 | 10 | ```bash 11 | npm install react-native-inputscrollview --save 12 | rnpm link react-native-inputscrollview 13 | 14 | ``` 15 | 16 | 0.34以下: 17 | 18 | ```bash 19 | npm install react-native-inputscrollview@1.x --save 20 | rnpm link react-native-inputscrollview 21 | 22 | ``` 23 | 24 | 25 | ## 如何使用 26 | 用InputScrollView替换InputView外层的ScrollView组件 27 | 28 | ## 属性 29 | 30 | ### distance: number (default 50) 31 | 32 | 当输入框非常靠近底部的时候,会自动和键盘保持一定的距离。这可以为你其它的组件留出空间。 33 | 34 | ### tapToDismiss: boolean (default true) 35 | 36 | 是否可以点击ScrollView来关闭键盘。 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-inputscrollview", 3 | "version": "2.0.0", 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/reactnativecn/react-native-inputscrollview.git%22.git" 12 | }, 13 | "keywords": [ 14 | "react-native", 15 | "ios", 16 | "android", 17 | "键盘遮挡输入框" 18 | ], 19 | "author": "lvbingru", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/reactnativecn/react-native-inputscrollview.git%22/issues" 23 | }, 24 | "homepage": "https://github.com/reactnativecn/react-native-inputscrollview.git%22#readme", 25 | "dependencies": { 26 | "semver": "^5.1.0" 27 | }, 28 | "peerDependencies": { 29 | "react-native": "^0.35.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ios/InputScrollViewPlugin/InputScrollViewPlugin.m: -------------------------------------------------------------------------------- 1 | // 2 | // InputScrollViewPlugin.m 3 | // InputScrollViewPlugin 4 | // 5 | // Created by LvBingru on 4/11/16. 6 | // Copyright © 2016 erica. All rights reserved. 7 | // 8 | 9 | #import "InputScrollViewPlugin.h" 10 | #import "RCTShadowView.h" 11 | #import "RCTUIManager.h" 12 | #import "RCTTextField.h" 13 | #import "RCTTextView.h" 14 | 15 | @implementation InputScrollViewPlugin 16 | 17 | RCT_EXPORT_MODULE(); 18 | 19 | @synthesize bridge = _bridge; 20 | 21 | RCT_EXPORT_METHOD(isSubview:(nonnull NSNumber *)reactTag 22 | relativeTo:(nonnull NSNumber *)ancestorReactTag 23 | callback:(RCTResponseSenderBlock)callback) 24 | { 25 | dispatch_async(dispatch_get_main_queue(), ^{ 26 | UIView *view = [_bridge.uiManager viewForReactTag:reactTag]; 27 | UIView *ancestorView = [_bridge.uiManager viewForReactTag:ancestorReactTag]; 28 | 29 | while (view) { 30 | view = view.superview; 31 | if (view == ancestorView) { 32 | if (callback) { 33 | callback(@[@(YES)]); 34 | } 35 | return; 36 | } 37 | } 38 | 39 | if (callback) { 40 | callback(@[@(NO)]); 41 | } 42 | }); 43 | } 44 | 45 | RCT_EXPORT_METHOD(isTextInput:(nonnull NSNumber *)reactTag 46 | callback:(RCTResponseSenderBlock)callback) 47 | { 48 | dispatch_async(dispatch_get_main_queue(), ^{ 49 | UIView *view = [_bridge.uiManager viewForReactTag:reactTag]; 50 | if ([view isKindOfClass:[RCTTextField class]] || [view isKindOfClass:[RCTTextView class]]) { 51 | if (callback) { 52 | callback(@[@(YES)]); 53 | } 54 | } 55 | else { 56 | if (callback) { 57 | callback(@[@(NO)]); 58 | } 59 | } 60 | }); 61 | } 62 | 63 | 64 | @end 65 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by lvbingru on 12/16/15. 3 | */ 4 | 5 | import React, {Component, PropTypes } from 'react'; 6 | import ReactNative, { 7 | InteractionManager, View, Text, ScrollView, Platform, Animated, UIManager, NativeModules, Dimensions, 8 | Keyboard, 9 | } from 'react-native'; 10 | import TextInputState from 'react-native/Libraries/Components/TextInput/TextInputState'; 11 | const ViewPlugins = NativeModules.InputScrollViewPlugin; 12 | const dismissKeyboard = Keyboard.dismiss; 13 | 14 | const propTypes = { 15 | distance : PropTypes.number, 16 | tapToDismiss : PropTypes.bool, 17 | } 18 | 19 | const defaultProps = { 20 | distance : 50, 21 | tapToDismiss : true, 22 | } 23 | 24 | export default class InputScrollView extends Component { 25 | constructor(props) { 26 | super(props); 27 | 28 | this.state = { 29 | keyboardHeightAnim: new Animated.Value(0) 30 | }; 31 | 32 | this.offsetY = 0; 33 | this.moved = false; 34 | } 35 | 36 | componentWillMount() { 37 | this.keyboardWillShowListener = Keyboard.addListener('keyboardWillShow', this.onKeyboardWillShow); 38 | this.keyboardWillHideListener = Keyboard.addListener('keyboardWillHide', this.onKeyboardWillHide); 39 | } 40 | 41 | componentWillUnmount() { 42 | this.keyboardWillShowListener.remove(); 43 | this.keyboardWillHideListener.remove(); 44 | } 45 | 46 | onKeyboardWillShow = e => { 47 | if (!this.scrollViewRef) { 48 | return; 49 | } 50 | const currentlyFocusedTextInput = TextInputState.currentlyFocusedField(); 51 | if (currentlyFocusedTextInput != null) { 52 | ViewPlugins && ViewPlugins.isSubview( 53 | currentlyFocusedTextInput, 54 | this.scrollViewRef.getInnerViewNode(), 55 | r => { 56 | if (r === true) { 57 | this.move(currentlyFocusedTextInput, e) 58 | } 59 | }); 60 | } 61 | }; 62 | onKeyboardWillHide = e=> { 63 | if (!this.scrollViewRef) { 64 | return; 65 | } 66 | if (this.moved) { 67 | this.moved = false; 68 | this.scrollToY(this.offsetY); 69 | } 70 | }; 71 | 72 | render() { 73 | const {distance, tapToDismiss, onKeyboardWillShow, keyboardShouldPersistTaps, children, ...others} = this.props 74 | return ( 75 | { 78 | if (tapToDismiss === true) { 79 | const currentlyFocusedTextInput = TextInputState.currentlyFocusedField(); 80 | if (e.target != currentlyFocusedTextInput) { 81 | if (ViewPlugins && ViewPlugins.isTextInput) { 82 | ViewPlugins.isTextInput( 83 | e.target, 84 | r => { 85 | if (r===false) { 86 | dismissKeyboard(); 87 | } 88 | } 89 | ); 90 | } 91 | else { 92 | dismissKeyboard(); 93 | } 94 | } 95 | } 96 | return false; 97 | }} 98 | > 99 | { 104 | this.scrollViewRef = srcollView; 105 | }} 106 | onMomentumScrollEnd = {e=>{ 107 | if (!this.moved) { 108 | this.offsetY = Math.max(0, e.nativeEvent.contentOffset.y) 109 | } 110 | }} 111 | {...others} 112 | > 113 | {children} 114 | 115 | 116 | 117 | ); 118 | } 119 | 120 | move(currentlyFocusedTextInput, e) { 121 | UIManager.measureLayout( 122 | currentlyFocusedTextInput, 123 | ReactNative.findNodeHandle(this.scrollViewRef.getInnerViewNode()), 124 | e=>{console.warning(e)}, 125 | (left, top, width, height)=>{ 126 | let keyboardScreenY = Dimensions.get('window').height; 127 | if (e) { 128 | keyboardScreenY = e.endCoordinates.screenY; 129 | } 130 | let scrollOffsetY = top - keyboardScreenY + height + this.props.distance; 131 | scrollOffsetY = Math.max(this.offsetY, scrollOffsetY); 132 | this.scrollToY(scrollOffsetY); 133 | } 134 | ); 135 | this.moved = true; 136 | } 137 | 138 | getInnerScrollView() { 139 | return this.scrollViewRef; 140 | } 141 | 142 | scrollToY(offsetY) { 143 | this.scrollViewRef.scrollTo({x:0, y:offsetY}); 144 | } 145 | } 146 | 147 | InputScrollView.propTypes = propTypes; 148 | InputScrollView.defaultProps = defaultProps; 149 | -------------------------------------------------------------------------------- /ios/InputScrollViewPlugin.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9182DCCD1CBB66AC002206C2 /* InputScrollViewPlugin.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9182DCCC1CBB66AC002206C2 /* InputScrollViewPlugin.h */; }; 11 | 9182DCCF1CBB66AC002206C2 /* InputScrollViewPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 9182DCCE1CBB66AC002206C2 /* InputScrollViewPlugin.m */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXCopyFilesBuildPhase section */ 15 | 9182DCC71CBB66AC002206C2 /* CopyFiles */ = { 16 | isa = PBXCopyFilesBuildPhase; 17 | buildActionMask = 2147483647; 18 | dstPath = "include/$(PRODUCT_NAME)"; 19 | dstSubfolderSpec = 16; 20 | files = ( 21 | 9182DCCD1CBB66AC002206C2 /* InputScrollViewPlugin.h in CopyFiles */, 22 | ); 23 | runOnlyForDeploymentPostprocessing = 0; 24 | }; 25 | /* End PBXCopyFilesBuildPhase section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 9182DCC91CBB66AC002206C2 /* libInputScrollViewPlugin.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInputScrollViewPlugin.a; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | 9182DCCC1CBB66AC002206C2 /* InputScrollViewPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InputScrollViewPlugin.h; sourceTree = ""; }; 30 | 9182DCCE1CBB66AC002206C2 /* InputScrollViewPlugin.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InputScrollViewPlugin.m; sourceTree = ""; }; 31 | /* End PBXFileReference section */ 32 | 33 | /* Begin PBXFrameworksBuildPhase section */ 34 | 9182DCC61CBB66AC002206C2 /* Frameworks */ = { 35 | isa = PBXFrameworksBuildPhase; 36 | buildActionMask = 2147483647; 37 | files = ( 38 | ); 39 | runOnlyForDeploymentPostprocessing = 0; 40 | }; 41 | /* End PBXFrameworksBuildPhase section */ 42 | 43 | /* Begin PBXGroup section */ 44 | 9182DCC01CBB66AC002206C2 = { 45 | isa = PBXGroup; 46 | children = ( 47 | 9182DCCB1CBB66AC002206C2 /* InputScrollViewPlugin */, 48 | 9182DCCA1CBB66AC002206C2 /* Products */, 49 | ); 50 | sourceTree = ""; 51 | }; 52 | 9182DCCA1CBB66AC002206C2 /* Products */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | 9182DCC91CBB66AC002206C2 /* libInputScrollViewPlugin.a */, 56 | ); 57 | name = Products; 58 | sourceTree = ""; 59 | }; 60 | 9182DCCB1CBB66AC002206C2 /* InputScrollViewPlugin */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 9182DCCC1CBB66AC002206C2 /* InputScrollViewPlugin.h */, 64 | 9182DCCE1CBB66AC002206C2 /* InputScrollViewPlugin.m */, 65 | ); 66 | path = InputScrollViewPlugin; 67 | sourceTree = ""; 68 | }; 69 | /* End PBXGroup section */ 70 | 71 | /* Begin PBXNativeTarget section */ 72 | 9182DCC81CBB66AC002206C2 /* InputScrollViewPlugin */ = { 73 | isa = PBXNativeTarget; 74 | buildConfigurationList = 9182DCD21CBB66AC002206C2 /* Build configuration list for PBXNativeTarget "InputScrollViewPlugin" */; 75 | buildPhases = ( 76 | 9182DCC51CBB66AC002206C2 /* Sources */, 77 | 9182DCC61CBB66AC002206C2 /* Frameworks */, 78 | 9182DCC71CBB66AC002206C2 /* CopyFiles */, 79 | ); 80 | buildRules = ( 81 | ); 82 | dependencies = ( 83 | ); 84 | name = InputScrollViewPlugin; 85 | productName = InputScrollViewPlugin; 86 | productReference = 9182DCC91CBB66AC002206C2 /* libInputScrollViewPlugin.a */; 87 | productType = "com.apple.product-type.library.static"; 88 | }; 89 | /* End PBXNativeTarget section */ 90 | 91 | /* Begin PBXProject section */ 92 | 9182DCC11CBB66AC002206C2 /* Project object */ = { 93 | isa = PBXProject; 94 | attributes = { 95 | LastUpgradeCheck = 0720; 96 | ORGANIZATIONNAME = erica; 97 | TargetAttributes = { 98 | 9182DCC81CBB66AC002206C2 = { 99 | CreatedOnToolsVersion = 7.2; 100 | }; 101 | }; 102 | }; 103 | buildConfigurationList = 9182DCC41CBB66AC002206C2 /* Build configuration list for PBXProject "InputScrollViewPlugin" */; 104 | compatibilityVersion = "Xcode 3.2"; 105 | developmentRegion = English; 106 | hasScannedForEncodings = 0; 107 | knownRegions = ( 108 | en, 109 | ); 110 | mainGroup = 9182DCC01CBB66AC002206C2; 111 | productRefGroup = 9182DCCA1CBB66AC002206C2 /* Products */; 112 | projectDirPath = ""; 113 | projectRoot = ""; 114 | targets = ( 115 | 9182DCC81CBB66AC002206C2 /* InputScrollViewPlugin */, 116 | ); 117 | }; 118 | /* End PBXProject section */ 119 | 120 | /* Begin PBXSourcesBuildPhase section */ 121 | 9182DCC51CBB66AC002206C2 /* Sources */ = { 122 | isa = PBXSourcesBuildPhase; 123 | buildActionMask = 2147483647; 124 | files = ( 125 | 9182DCCF1CBB66AC002206C2 /* InputScrollViewPlugin.m in Sources */, 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | /* End PBXSourcesBuildPhase section */ 130 | 131 | /* Begin XCBuildConfiguration section */ 132 | 9182DCD01CBB66AC002206C2 /* Debug */ = { 133 | isa = XCBuildConfiguration; 134 | buildSettings = { 135 | ALWAYS_SEARCH_USER_PATHS = NO; 136 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 137 | CLANG_CXX_LIBRARY = "libc++"; 138 | CLANG_ENABLE_MODULES = YES; 139 | CLANG_ENABLE_OBJC_ARC = YES; 140 | CLANG_WARN_BOOL_CONVERSION = YES; 141 | CLANG_WARN_CONSTANT_CONVERSION = YES; 142 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 143 | CLANG_WARN_EMPTY_BODY = YES; 144 | CLANG_WARN_ENUM_CONVERSION = YES; 145 | CLANG_WARN_INT_CONVERSION = YES; 146 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 147 | CLANG_WARN_UNREACHABLE_CODE = YES; 148 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 149 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 150 | COPY_PHASE_STRIP = NO; 151 | DEBUG_INFORMATION_FORMAT = dwarf; 152 | ENABLE_STRICT_OBJC_MSGSEND = YES; 153 | ENABLE_TESTABILITY = YES; 154 | GCC_C_LANGUAGE_STANDARD = gnu99; 155 | GCC_DYNAMIC_NO_PIC = NO; 156 | GCC_NO_COMMON_BLOCKS = YES; 157 | GCC_OPTIMIZATION_LEVEL = 0; 158 | GCC_PREPROCESSOR_DEFINITIONS = ( 159 | "DEBUG=1", 160 | "$(inherited)", 161 | ); 162 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 163 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 164 | GCC_WARN_UNDECLARED_SELECTOR = YES; 165 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 166 | GCC_WARN_UNUSED_FUNCTION = YES; 167 | GCC_WARN_UNUSED_VARIABLE = YES; 168 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 169 | MTL_ENABLE_DEBUG_INFO = YES; 170 | ONLY_ACTIVE_ARCH = YES; 171 | SDKROOT = iphoneos; 172 | }; 173 | name = Debug; 174 | }; 175 | 9182DCD11CBB66AC002206C2 /* Release */ = { 176 | isa = XCBuildConfiguration; 177 | buildSettings = { 178 | ALWAYS_SEARCH_USER_PATHS = NO; 179 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 180 | CLANG_CXX_LIBRARY = "libc++"; 181 | CLANG_ENABLE_MODULES = YES; 182 | CLANG_ENABLE_OBJC_ARC = YES; 183 | CLANG_WARN_BOOL_CONVERSION = YES; 184 | CLANG_WARN_CONSTANT_CONVERSION = YES; 185 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 186 | CLANG_WARN_EMPTY_BODY = YES; 187 | CLANG_WARN_ENUM_CONVERSION = YES; 188 | CLANG_WARN_INT_CONVERSION = YES; 189 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 190 | CLANG_WARN_UNREACHABLE_CODE = YES; 191 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 192 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 193 | COPY_PHASE_STRIP = NO; 194 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 195 | ENABLE_NS_ASSERTIONS = NO; 196 | ENABLE_STRICT_OBJC_MSGSEND = YES; 197 | GCC_C_LANGUAGE_STANDARD = gnu99; 198 | GCC_NO_COMMON_BLOCKS = YES; 199 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 200 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 201 | GCC_WARN_UNDECLARED_SELECTOR = YES; 202 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 203 | GCC_WARN_UNUSED_FUNCTION = YES; 204 | GCC_WARN_UNUSED_VARIABLE = YES; 205 | IPHONEOS_DEPLOYMENT_TARGET = 9.2; 206 | MTL_ENABLE_DEBUG_INFO = NO; 207 | SDKROOT = iphoneos; 208 | VALIDATE_PRODUCT = YES; 209 | }; 210 | name = Release; 211 | }; 212 | 9182DCD31CBB66AC002206C2 /* Debug */ = { 213 | isa = XCBuildConfiguration; 214 | buildSettings = { 215 | HEADER_SEARCH_PATHS = ( 216 | "$(SRCROOT)/../../react-native/React/**", 217 | "$(SRCROOT)/../../react-native/Libraries/**", 218 | ); 219 | OTHER_LDFLAGS = "-ObjC"; 220 | PRODUCT_NAME = "$(TARGET_NAME)"; 221 | SKIP_INSTALL = YES; 222 | }; 223 | name = Debug; 224 | }; 225 | 9182DCD41CBB66AC002206C2 /* Release */ = { 226 | isa = XCBuildConfiguration; 227 | buildSettings = { 228 | HEADER_SEARCH_PATHS = ( 229 | "$(SRCROOT)/../../react-native/React/**", 230 | "$(SRCROOT)/../../react-native/Libraries/**", 231 | ); 232 | OTHER_LDFLAGS = "-ObjC"; 233 | PRODUCT_NAME = "$(TARGET_NAME)"; 234 | SKIP_INSTALL = YES; 235 | }; 236 | name = Release; 237 | }; 238 | /* End XCBuildConfiguration section */ 239 | 240 | /* Begin XCConfigurationList section */ 241 | 9182DCC41CBB66AC002206C2 /* Build configuration list for PBXProject "InputScrollViewPlugin" */ = { 242 | isa = XCConfigurationList; 243 | buildConfigurations = ( 244 | 9182DCD01CBB66AC002206C2 /* Debug */, 245 | 9182DCD11CBB66AC002206C2 /* Release */, 246 | ); 247 | defaultConfigurationIsVisible = 0; 248 | defaultConfigurationName = Release; 249 | }; 250 | 9182DCD21CBB66AC002206C2 /* Build configuration list for PBXNativeTarget "InputScrollViewPlugin" */ = { 251 | isa = XCConfigurationList; 252 | buildConfigurations = ( 253 | 9182DCD31CBB66AC002206C2 /* Debug */, 254 | 9182DCD41CBB66AC002206C2 /* Release */, 255 | ); 256 | defaultConfigurationIsVisible = 0; 257 | }; 258 | /* End XCConfigurationList section */ 259 | }; 260 | rootObject = 9182DCC11CBB66AC002206C2 /* Project object */; 261 | } 262 | --------------------------------------------------------------------------------