├── index.js ├── android ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── reactnativerecordersound │ │ ├── ReactNativeRecordSoundPackager.java │ │ └── ReactNativeRecordSound.java └── build.gradle ├── ios ├── RCTRecordSound │ ├── RCTRecordSound.h │ └── RCTRecordSound.m └── RCTRecordSound.xcodeproj │ └── project.pbxproj ├── .gitignore ├── .npmignore ├── package.json └── README.md /index.js: -------------------------------------------------------------------------------- 1 | import { NativeModules } from 'react-native'; 2 | module.exports = NativeModules.ReactNativeRecordSound; 3 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /ios/RCTRecordSound/RCTRecordSound.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTRecordSound.h 3 | // RCTRecordSound 4 | // 5 | // Created by Alex Dana on 08/06/16. 6 | // Copyright © 2016 Alex Dana. All rights reserved. 7 | // 8 | 9 | // RecordSound.h 10 | // add AVFoundation Framework in Xcode 11 | 12 | #import 13 | #import 14 | 15 | @interface ReactNativeRecordSound : NSObject 16 | @end -------------------------------------------------------------------------------- /.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 | 36 | # BUCK 37 | buck-out/ 38 | \.buckd/ 39 | android/app/libs 40 | android/keystores/debug.keystore 41 | -------------------------------------------------------------------------------- /.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 | 36 | # BUCK 37 | buck-out/ 38 | \.buckd/ 39 | android/app/libs 40 | android/keystores/debug.keystore 41 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | jcenter() 4 | } 5 | 6 | dependencies { 7 | classpath 'com.android.tools.build:gradle:1.1.3' 8 | } 9 | } 10 | 11 | apply plugin: 'com.android.library' 12 | 13 | android { 14 | compileSdkVersion 23 15 | buildToolsVersion "23.0.1" 16 | 17 | defaultConfig { 18 | minSdkVersion 16 19 | targetSdkVersion 22 20 | versionCode 1 21 | versionName "1.0" 22 | } 23 | lintOptions { 24 | abortOnError false 25 | } 26 | } 27 | 28 | repositories { 29 | mavenCentral() 30 | } 31 | 32 | dependencies { 33 | compile 'com.facebook.react:react-native:0.12.+' 34 | } 35 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-record-sound", 3 | "version": "1.2.6", 4 | "description": "record sound in mp4 from react native for IOS and Android", 5 | "keywords": [ 6 | "react-component", 7 | "react-native", 8 | "ios", 9 | "android", 10 | "record" 11 | ], 12 | "main": "index.js", 13 | "scripts": { 14 | "test": "echo \"Error: no test specified\" && exit 1" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/MisterAlex95/react-native-record-sound.git" 19 | }, 20 | "author": "MisterAlex95 ", 21 | "license": "ISC", 22 | "bugs": { 23 | "url": "https://github.com/MisterAlex95/react-native-record-sound/issues" 24 | }, 25 | "homepage": "https://github.com/MisterAlex95/react-native-record-sound#readme" 26 | } 27 | -------------------------------------------------------------------------------- /android/src/main/java/com/reactnativerecordersound/ReactNativeRecordSoundPackager.java: -------------------------------------------------------------------------------- 1 | package com.reactnativerecordsound; 2 | 3 | import com.facebook.react.bridge.NativeModule; 4 | import com.facebook.react.bridge.ReactApplicationContext; 5 | import com.facebook.react.bridge.ReactContext; 6 | import com.facebook.react.bridge.ReactContextBaseJavaModule; 7 | import com.facebook.react.bridge.ReactMethod; 8 | import com.facebook.react.bridge.JavaScriptModule; 9 | import com.facebook.react.ReactPackage; 10 | import com.facebook.react.uimanager.ViewManager; 11 | 12 | import com.reactnativerecordsound.ReactNativeRecordSound; 13 | 14 | import java.util.Arrays; 15 | import java.util.List; 16 | import java.util.ArrayList; 17 | import java.util.Collections; 18 | 19 | import android.os.Environment; 20 | 21 | public class ReactNativeRecordSoundPackager implements ReactPackage { 22 | @Override 23 | public List createNativeModules(ReactApplicationContext reactContext) { 24 | List modules = new ArrayList<>(); 25 | modules.add(new ReactNativeRecordSound(reactContext)); 26 | return modules; 27 | } 28 | 29 | @Override 30 | public List> createJSModules() { 31 | return Collections.emptyList(); 32 | } 33 | 34 | @Override 35 | public List createViewManagers(ReactApplicationContext reactContext) { 36 | return Arrays.asList(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-native-record-sound 2 | 3 | [DEPRECATED]: I have to update the ObjC and Java code. And update RN version. 4 | 5 | ## Installation 6 | 7 | * Install the module 8 | 9 | ```bash 10 | npm i --save react-native-record-sound 11 | ``` 12 | 13 | * In `android/settings.gradle` 14 | 15 | ```gradle 16 | ... 17 | include ':react-native-record-sound', ':app' 18 | project(':react-native-record-sound').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-record-sound/android') 19 | ``` 20 | 21 | * In `android/app/build.gradle` 22 | 23 | ```gradle 24 | ... 25 | dependencies { 26 | ... 27 | compile project(':react-native-record-sound') 28 | } 29 | ``` 30 | 31 | * Register module (in MainActivity.java) 32 | 33 | ```java 34 | import com.reactnativerecordsound.ReactNativeRecordSoundPackager; // <--- import 35 | 36 | public class MainActivity extends ReactActivity { 37 | ...... 38 | @Override 39 | protected List getPackages() { 40 | return Arrays.asList( 41 | new MainReactPackage(), 42 | new ReactNativeRecordSoundPackager() // <------ add here 43 | ); 44 | } 45 | ...... 46 | 47 | } 48 | ``` 49 | 50 | ## How to use 51 | 52 | ```javascript 53 | import Record from 'react-native-record-sound'; 54 | let isRecording = false; 55 | ... 56 | recordSound() { 57 | if (isRecording === false) 58 | Record.startRecord(path + 'sound.mp4', (err) => {console.log(err)}); 59 | else 60 | Record.stopRecord(); 61 | isRecording = !isRecording; 62 | } 63 | ``` 64 | -------------------------------------------------------------------------------- /android/src/main/java/com/reactnativerecordersound/ReactNativeRecordSound.java: -------------------------------------------------------------------------------- 1 | package com.reactnativerecordsound; 2 | 3 | import android.media.MediaRecorder; 4 | import java.io.IOException; 5 | 6 | import com.facebook.react.bridge.NativeModule; 7 | import com.facebook.react.bridge.ReactApplicationContext; 8 | import com.facebook.react.bridge.ReactContext; 9 | import com.facebook.react.bridge.ReactContextBaseJavaModule; 10 | import com.facebook.react.bridge.ReactMethod; 11 | import com.facebook.react.bridge.Callback; 12 | 13 | import java.util.Map; 14 | 15 | public class ReactNativeRecordSound extends ReactContextBaseJavaModule { 16 | 17 | private static final String LOG_TAG = "RecordModule"; 18 | private MediaRecorder mRecorder = null; 19 | 20 | public ReactNativeRecordSound(ReactApplicationContext reactContext) { 21 | super(reactContext); 22 | } 23 | 24 | @Override 25 | public String getName() { 26 | return "ReactNativeRecordSound"; 27 | } 28 | 29 | @ReactMethod 30 | public void startRecord(String filename, Callback res) { 31 | if (mRecorder == null) { 32 | mRecorder = new MediaRecorder(); 33 | mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 34 | mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 35 | mRecorder.setAudioChannels(1); // Mono 1 Stereo 2 36 | mRecorder.setOutputFile(filename); 37 | mRecorder.setAudioEncodingBitRate(8000); 38 | mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 39 | 40 | try { 41 | mRecorder.prepare(); 42 | } catch (IOException e) { 43 | res.invoke(LOG_TAG + e.toString()); 44 | } 45 | mRecorder.start(); 46 | } 47 | } 48 | 49 | @ReactMethod 50 | public void stopRecord() { 51 | if (mRecorder != null) { 52 | mRecorder.stop(); 53 | mRecorder.release(); 54 | mRecorder = null; 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /ios/RCTRecordSound/RCTRecordSound.m: -------------------------------------------------------------------------------- 1 | // 2 | // RCTRecordSound.m 3 | // RCTRecordSound 4 | // 5 | // Created by Alex Dana on 08/06/16. 6 | // Copyright © 2016 Alex Dana. All rights reserved. 7 | // 8 | 9 | #import "RCTRecordSound.h" 10 | #import 11 | #import 12 | #import 13 | #import 14 | 15 | @implementation ReactNativeRecordSound { 16 | NSDictionary* recordSettings; 17 | AVAudioSession* audioSession; 18 | AVAudioRecorder* _audioRecord; 19 | } 20 | 21 | RCT_EXPORT_MODULE(); 22 | 23 | 24 | RCT_EXPORT_METHOD(startRecord:(NSString *)filename : (RCTResponseSenderBlock)callback) { 25 | 26 | AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission]; 27 | switch (permissionStatus) { 28 | case AVAudioSessionRecordPermissionUndetermined: 29 | NSLog(@("undetermined")); 30 | break; 31 | case AVAudioSessionRecordPermissionDenied: 32 | NSLog(@("denied")); 33 | break; 34 | case AVAudioSessionRecordPermissionGranted: 35 | NSLog(@("granted")); 36 | break; 37 | default: 38 | NSLog(@("Error checking device authorization status.")); 39 | break; 40 | } 41 | 42 | NSNumber *_audioQuality = [NSNumber numberWithInt:AVAudioQualityHigh]; 43 | NSNumber *_audioEncoding = [NSNumber numberWithInt:kAudioFormatMPEG4AAC]; 44 | NSNumber *_audioChannels = [NSNumber numberWithInt:1]; 45 | NSNumber *_audioSampleRate = [NSNumber numberWithFloat:16000.0]; 46 | 47 | recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: 48 | _audioQuality, AVEncoderAudioQualityKey, 49 | _audioEncoding, AVFormatIDKey, 50 | _audioChannels, AVNumberOfChannelsKey, 51 | _audioSampleRate, AVSampleRateKey, 52 | nil]; 53 | 54 | NSError* err = nil; 55 | 56 | AVAudioSession* audioSession = [AVAudioSession sharedInstance]; 57 | [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord 58 | error:nil]; 59 | 60 | NSURL *soundFileURL = [NSURL fileURLWithPath:filename]; 61 | 62 | _audioRecord = [[AVAudioRecorder alloc] 63 | initWithURL: soundFileURL 64 | settings:recordSettings 65 | error: &err]; 66 | _audioRecord.delegate = self; 67 | 68 | if (err) { 69 | NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 70 | return; 71 | } else { 72 | [_audioRecord prepareToRecord]; 73 | NSLog(@"audioSession: launch record"); 74 | } 75 | 76 | if (!_audioRecord.recording) { 77 | [_audioRecord record]; 78 | [audioSession setActive:YES error:nil]; 79 | } 80 | } 81 | 82 | RCT_EXPORT_METHOD(stopRecord) { 83 | if (_audioRecord.recording) { 84 | NSLog(@"audioSession: stop record"); 85 | [_audioRecord stop]; 86 | [audioSession setActive:NO error:nil]; 87 | } 88 | } 89 | 90 | @end -------------------------------------------------------------------------------- /ios/RCTRecordSound.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 47; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | FA40C5061D085B5900EF80D7 /* RCTRecordSound.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = FA40C5051D085B5900EF80D7 /* RCTRecordSound.h */; }; 11 | FA40C5081D085B5900EF80D7 /* RCTRecordSound.m in Sources */ = {isa = PBXBuildFile; fileRef = FA40C5071D085B5900EF80D7 /* RCTRecordSound.m */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXCopyFilesBuildPhase section */ 15 | FA40C5001D085B5900EF80D7 /* CopyFiles */ = { 16 | isa = PBXCopyFilesBuildPhase; 17 | buildActionMask = 2147483647; 18 | dstPath = "include/$(PRODUCT_NAME)"; 19 | dstSubfolderSpec = 16; 20 | files = ( 21 | FA40C5061D085B5900EF80D7 /* RCTRecordSound.h in CopyFiles */, 22 | ); 23 | runOnlyForDeploymentPostprocessing = 0; 24 | }; 25 | /* End PBXCopyFilesBuildPhase section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | FA40C5021D085B5900EF80D7 /* libRCTRecordSound.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTRecordSound.a; sourceTree = BUILT_PRODUCTS_DIR; }; 29 | FA40C5051D085B5900EF80D7 /* RCTRecordSound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RCTRecordSound.h; sourceTree = ""; }; 30 | FA40C5071D085B5900EF80D7 /* RCTRecordSound.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RCTRecordSound.m; sourceTree = ""; }; 31 | /* End PBXFileReference section */ 32 | 33 | /* Begin PBXFrameworksBuildPhase section */ 34 | FA40C4FF1D085B5900EF80D7 /* Frameworks */ = { 35 | isa = PBXFrameworksBuildPhase; 36 | buildActionMask = 2147483647; 37 | files = ( 38 | ); 39 | runOnlyForDeploymentPostprocessing = 0; 40 | }; 41 | /* End PBXFrameworksBuildPhase section */ 42 | 43 | /* Begin PBXGroup section */ 44 | FA40C4F91D085B5900EF80D7 = { 45 | isa = PBXGroup; 46 | children = ( 47 | FA40C5041D085B5900EF80D7 /* RCTRecordSound */, 48 | FA40C5031D085B5900EF80D7 /* Products */, 49 | ); 50 | sourceTree = ""; 51 | }; 52 | FA40C5031D085B5900EF80D7 /* Products */ = { 53 | isa = PBXGroup; 54 | children = ( 55 | FA40C5021D085B5900EF80D7 /* libRCTRecordSound.a */, 56 | ); 57 | name = Products; 58 | sourceTree = ""; 59 | }; 60 | FA40C5041D085B5900EF80D7 /* RCTRecordSound */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | FA40C5051D085B5900EF80D7 /* RCTRecordSound.h */, 64 | FA40C5071D085B5900EF80D7 /* RCTRecordSound.m */, 65 | ); 66 | path = RCTRecordSound; 67 | sourceTree = ""; 68 | }; 69 | /* End PBXGroup section */ 70 | 71 | /* Begin PBXHeadersBuildPhase section */ 72 | FA4E3A121D08683D00B5A3F9 /* Headers */ = { 73 | isa = PBXHeadersBuildPhase; 74 | buildActionMask = 2147483647; 75 | files = ( 76 | ); 77 | runOnlyForDeploymentPostprocessing = 0; 78 | }; 79 | /* End PBXHeadersBuildPhase section */ 80 | 81 | /* Begin PBXNativeTarget section */ 82 | FA40C5011D085B5900EF80D7 /* RCTRecordSound */ = { 83 | isa = PBXNativeTarget; 84 | buildConfigurationList = FA40C50B1D085B5900EF80D7 /* Build configuration list for PBXNativeTarget "RCTRecordSound" */; 85 | buildPhases = ( 86 | FA40C4FE1D085B5900EF80D7 /* Sources */, 87 | FA40C5001D085B5900EF80D7 /* CopyFiles */, 88 | FA40C4FF1D085B5900EF80D7 /* Frameworks */, 89 | FA4E3A121D08683D00B5A3F9 /* Headers */, 90 | ); 91 | buildRules = ( 92 | ); 93 | dependencies = ( 94 | ); 95 | name = RCTRecordSound; 96 | productName = RCTRecordSound; 97 | productReference = FA40C5021D085B5900EF80D7 /* libRCTRecordSound.a */; 98 | productType = "com.apple.product-type.library.static"; 99 | }; 100 | /* End PBXNativeTarget section */ 101 | 102 | /* Begin PBXProject section */ 103 | FA40C4FA1D085B5900EF80D7 /* Project object */ = { 104 | isa = PBXProject; 105 | attributes = { 106 | LastUpgradeCheck = 0730; 107 | ORGANIZATIONNAME = "Alex Dana"; 108 | TargetAttributes = { 109 | FA40C5011D085B5900EF80D7 = { 110 | CreatedOnToolsVersion = 7.3.1; 111 | }; 112 | }; 113 | }; 114 | buildConfigurationList = FA40C4FD1D085B5900EF80D7 /* Build configuration list for PBXProject "RCTRecordSound" */; 115 | compatibilityVersion = "Xcode 6.3"; 116 | developmentRegion = English; 117 | hasScannedForEncodings = 0; 118 | knownRegions = ( 119 | en, 120 | ); 121 | mainGroup = FA40C4F91D085B5900EF80D7; 122 | productRefGroup = FA40C5031D085B5900EF80D7 /* Products */; 123 | projectDirPath = ""; 124 | projectRoot = ""; 125 | targets = ( 126 | FA40C5011D085B5900EF80D7 /* RCTRecordSound */, 127 | ); 128 | }; 129 | /* End PBXProject section */ 130 | 131 | /* Begin PBXSourcesBuildPhase section */ 132 | FA40C4FE1D085B5900EF80D7 /* Sources */ = { 133 | isa = PBXSourcesBuildPhase; 134 | buildActionMask = 2147483647; 135 | files = ( 136 | FA40C5081D085B5900EF80D7 /* RCTRecordSound.m in Sources */, 137 | ); 138 | runOnlyForDeploymentPostprocessing = 0; 139 | }; 140 | /* End PBXSourcesBuildPhase section */ 141 | 142 | /* Begin XCBuildConfiguration section */ 143 | FA40C5091D085B5900EF80D7 /* Debug */ = { 144 | isa = XCBuildConfiguration; 145 | buildSettings = { 146 | ALWAYS_SEARCH_USER_PATHS = NO; 147 | CLANG_ANALYZER_NONNULL = YES; 148 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 149 | CLANG_CXX_LIBRARY = "libc++"; 150 | CLANG_ENABLE_MODULES = YES; 151 | CLANG_ENABLE_OBJC_ARC = YES; 152 | CLANG_WARN_BOOL_CONVERSION = YES; 153 | CLANG_WARN_CONSTANT_CONVERSION = YES; 154 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 155 | CLANG_WARN_EMPTY_BODY = YES; 156 | CLANG_WARN_ENUM_CONVERSION = YES; 157 | CLANG_WARN_INT_CONVERSION = YES; 158 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 159 | CLANG_WARN_UNREACHABLE_CODE = YES; 160 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 161 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 162 | COPY_PHASE_STRIP = NO; 163 | DEBUG_INFORMATION_FORMAT = dwarf; 164 | ENABLE_STRICT_OBJC_MSGSEND = YES; 165 | ENABLE_TESTABILITY = YES; 166 | GCC_C_LANGUAGE_STANDARD = gnu99; 167 | GCC_DYNAMIC_NO_PIC = NO; 168 | GCC_NO_COMMON_BLOCKS = YES; 169 | GCC_OPTIMIZATION_LEVEL = 0; 170 | GCC_PREPROCESSOR_DEFINITIONS = ( 171 | "DEBUG=1", 172 | "$(inherited)", 173 | ); 174 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 175 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 176 | GCC_WARN_UNDECLARED_SELECTOR = YES; 177 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 178 | GCC_WARN_UNUSED_FUNCTION = YES; 179 | GCC_WARN_UNUSED_VARIABLE = YES; 180 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 181 | MTL_ENABLE_DEBUG_INFO = YES; 182 | ONLY_ACTIVE_ARCH = YES; 183 | SDKROOT = iphoneos; 184 | }; 185 | name = Debug; 186 | }; 187 | FA40C50A1D085B5900EF80D7 /* Release */ = { 188 | isa = XCBuildConfiguration; 189 | buildSettings = { 190 | ALWAYS_SEARCH_USER_PATHS = NO; 191 | CLANG_ANALYZER_NONNULL = YES; 192 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 193 | CLANG_CXX_LIBRARY = "libc++"; 194 | CLANG_ENABLE_MODULES = YES; 195 | CLANG_ENABLE_OBJC_ARC = YES; 196 | CLANG_WARN_BOOL_CONVERSION = YES; 197 | CLANG_WARN_CONSTANT_CONVERSION = YES; 198 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 199 | CLANG_WARN_EMPTY_BODY = YES; 200 | CLANG_WARN_ENUM_CONVERSION = YES; 201 | CLANG_WARN_INT_CONVERSION = YES; 202 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 203 | CLANG_WARN_UNREACHABLE_CODE = YES; 204 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 205 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 206 | COPY_PHASE_STRIP = NO; 207 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 208 | ENABLE_NS_ASSERTIONS = NO; 209 | ENABLE_STRICT_OBJC_MSGSEND = YES; 210 | GCC_C_LANGUAGE_STANDARD = gnu99; 211 | GCC_NO_COMMON_BLOCKS = YES; 212 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 213 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 214 | GCC_WARN_UNDECLARED_SELECTOR = YES; 215 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 216 | GCC_WARN_UNUSED_FUNCTION = YES; 217 | GCC_WARN_UNUSED_VARIABLE = YES; 218 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 219 | MTL_ENABLE_DEBUG_INFO = NO; 220 | SDKROOT = iphoneos; 221 | VALIDATE_PRODUCT = YES; 222 | }; 223 | name = Release; 224 | }; 225 | FA40C50C1D085B5900EF80D7 /* Debug */ = { 226 | isa = XCBuildConfiguration; 227 | buildSettings = { 228 | ALWAYS_SEARCH_USER_PATHS = NO; 229 | HEADER_SEARCH_PATHS = ( 230 | "$(inherite)", 231 | "$(SRCROOT)/../../../React/**", 232 | "$(SRCROOT)/../../react-native/React/**", 233 | "$(SRCROOT)/node_modules/react-native/Libraries/**", 234 | "$(SRCROOT)/node_modules/**", 235 | "$(SRCROOT)/../../node_modules/react-native/React/**/**", 236 | "$(SRCROOT)/../../React/**/**", 237 | ); 238 | LD_RUNPATH_SEARCH_PATHS = "$(SRCROOT)/../../node_modules/react-native/React/**"; 239 | LIBRARY_SEARCH_PATHS = "$(inherite)"; 240 | OTHER_LDFLAGS = "-ObjC"; 241 | PRODUCT_NAME = "$(TARGET_NAME)"; 242 | SKIP_INSTALL = YES; 243 | USER_HEADER_SEARCH_PATHS = ""; 244 | }; 245 | name = Debug; 246 | }; 247 | FA40C50D1D085B5900EF80D7 /* Release */ = { 248 | isa = XCBuildConfiguration; 249 | buildSettings = { 250 | ALWAYS_SEARCH_USER_PATHS = NO; 251 | HEADER_SEARCH_PATHS = ( 252 | "$(inherite)", 253 | "$(SRCROOT)/../../../React/**", 254 | "$(SRCROOT)/../../react-native/React/**", 255 | "$(SRCROOT)/node_modules/**", 256 | "$(SRCROOT)/node_modules/react-native/Libraries/**", 257 | "$(SRCROOT)/../../node_modules/react-native/React/**/**", 258 | "$(SRCROOT)/../../React/**/**", 259 | ); 260 | LD_RUNPATH_SEARCH_PATHS = "$(SRCROOT)/../../node_modules/react-native/React/**"; 261 | LIBRARY_SEARCH_PATHS = "$(inherite)"; 262 | OTHER_LDFLAGS = "-ObjC"; 263 | PRODUCT_NAME = "$(TARGET_NAME)"; 264 | SKIP_INSTALL = YES; 265 | USER_HEADER_SEARCH_PATHS = ""; 266 | }; 267 | name = Release; 268 | }; 269 | /* End XCBuildConfiguration section */ 270 | 271 | /* Begin XCConfigurationList section */ 272 | FA40C4FD1D085B5900EF80D7 /* Build configuration list for PBXProject "RCTRecordSound" */ = { 273 | isa = XCConfigurationList; 274 | buildConfigurations = ( 275 | FA40C5091D085B5900EF80D7 /* Debug */, 276 | FA40C50A1D085B5900EF80D7 /* Release */, 277 | ); 278 | defaultConfigurationIsVisible = 0; 279 | defaultConfigurationName = Release; 280 | }; 281 | FA40C50B1D085B5900EF80D7 /* Build configuration list for PBXNativeTarget "RCTRecordSound" */ = { 282 | isa = XCConfigurationList; 283 | buildConfigurations = ( 284 | FA40C50C1D085B5900EF80D7 /* Debug */, 285 | FA40C50D1D085B5900EF80D7 /* Release */, 286 | ); 287 | defaultConfigurationIsVisible = 0; 288 | defaultConfigurationName = Release; 289 | }; 290 | /* End XCConfigurationList section */ 291 | }; 292 | rootObject = FA40C4FA1D085B5900EF80D7 /* Project object */; 293 | } 294 | --------------------------------------------------------------------------------