title: Undefined is not an object (evaluating 'imagePicker.openPicker')
body: <p>I am trying to use react-native-image-crop-picker. The code is given below. I already tried doing npm install react-native-image-crop-picker@latest.</p>
  
  <p>Whenever i select any one of the options undefined is not an object(evaluating 'imagePicker.openPicker')is shown. 
  Please help fixing this issue. </p>
  
  <pre><code>import React, {Component} from 'react';
  import {
  View, Text, StyleSheet, ScrollView, Alert,
  Image, TouchableOpacity, NativeModules, Dimensions
  } from 'react-native';
  
  var ImagePicker = NativeModules.ImageCropPicker;
  
  const styles = StyleSheet.create({
    container: {
      flex: 1,
      justifyContent: 'center',
      alignItems: 'center'
    },
    button: {
      backgroundColor: 'blue',
      marginBottom: 10
    },
    text: {
      color: 'white',
      fontSize: 20,
      textAlign: 'center'
    }
  });
  
  export default class Upload extends Component {
  
    constructor() {
      super();
      this.state = {
        image: null,
        images: null
      };
    }
  
    pickSingleWithCamera(cropping) {
      ImagePicker.openCamera({
        cropping: cropping,
        width: 500,
        height: 500,
      }).then(image =&gt; {
        console.log('received image', image);
        this.setState({
          image: {uri: image.path, width: image.width, height: image.height},
          images: null
        });
      }).catch(e =&gt; alert(e));
    }
  
    pickSingleBase64(cropit) {
      ImagePicker.openPicker({
        width: 300,
        height: 300,
        cropping: cropit,
        includeBase64: true
      }).then(image =&gt; {
        console.log('received base64 image');
        this.setState({
          image: {uri: `data:${image.mime};base64,`+ image.data, width: image.width, height: image.height},
          images: null
        });
      }).catch(e =&gt; alert(e));
    }
  
    cleanupImages() {
      ImagePicker.clean().then(() =&gt; {
        console.log('removed tmp images from tmp directory');
      }).catch(e =&gt; {
        alert(e);
      });
    }
  
    cleanupSingleImage() {
      let image = this.state.image || (this.state.images &amp;&amp; this.state.images.length ? this.state.images[0] : null);
      console.log('will cleanup image', image);
  
      ImagePicker.cleanSingle(image ? image.uri : null).then(() =&gt; {
        console.log(`removed tmp image ${image.uri} from tmp directory`);
      }).catch(e =&gt; {
        alert(e);
      })
    }
  
    cropLast() {
      if (!this.state.image) {
        return Alert.alert('No image', 'Before open cropping only, please select image');
      }
  
      openCropper({
        path: this.state.image.uri,
        width: 200,
        height: 200
      }).then(image =&gt; {
        console.log('received cropped image', image);
        this.setState({
          image: {uri: image.path, width: image.width, height: image.height, mime: image.mime},
          images: null
        });
      }).catch(e =&gt; {
        console.log(e);
        Alert.alert(e.message ? e.message : e);
      });
    }
  
    pickSingle(cropit, circular=false) {
      ImagePicker.openPicker({
        width: 300,
        height: 300,
        cropping: cropit,
        cropperCircleOverlay: circular,
        compressImageMaxWidth: 640,
        compressImageMaxHeight: 480,
        compressImageQuality: 0.5,
        compressVideoPreset: 'MediumQuality',
      }).then(image =&gt; {
        console.log('received image', image);
        this.setState({
          image: {uri: image.path, width: image.width, height: image.height, mime: image.mime},
          images: null
        });
      }).catch(e =&gt; {
        console.log(e);
        Alert.alert(e.message ? e.message : e);
      });
    }
  
    pickMultiple() {
      ImagePicker.openPicker({
        multiple: true,
        waitAnimationEnd: false
      }).then(images =&gt; {
        this.setState({
          image: null,
          images: images.map(i =&gt; {
            console.log('received image', i);
            return {uri: i.path, width: i.width, height: i.height, mime: i.mime};
          })
        });
      }).catch(e =&gt; alert(e));
    }
  
    scaledHeight(oldW, oldH, newW) {
      return (oldH / oldW) * newW;
    }
  
    renderVideo(video) {
      return (&lt;View style={{height: 300, width: 300}}&gt;
        &lt;Video source={{uri: video.uri, type: video.mime}}
           style={{position: 'absolute',
              top: 0,
              left: 0,
              bottom: 0,
              right: 0
            }}
           rate={1}
           paused={false}
           volume={1}
           muted={false}
           resizeMode={'cover'}
           onError={e =&gt; console.log(e)}
           onLoad={load =&gt; console.log(load)}
           repeat={true} /&gt;
       &lt;/View&gt;);
    }
  
    renderImage(image) {
      return &lt;Image style={{width: 300, height: 300, resizeMode: 'contain'}} source={image} /&gt;
    }
  
    renderAsset(image) {
      if (image.mime &amp;&amp; image.mime.toLowerCase().indexOf('video/') !== -1) {
        return this.renderVideo(image);
      }
  
      return this.renderImage(image);
    }
  
    render() {
      return (&lt;View style={styles.container}&gt;
        &lt;ScrollView&gt;
          {this.state.image ? this.renderAsset(this.state.image) : null}
          {this.state.images ? this.state.images.map(i =&gt; &lt;View key={i.uri}&gt;{this.renderAsset(i)}&lt;/View&gt;) : null}
        &lt;/ScrollView&gt;
  
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingleWithCamera(false)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single With Camera&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingleWithCamera(true)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single With Camera With Cropping&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingle(false)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.cropLast()} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Crop Last Selected Image&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingleBase64(false)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single Returning Base64&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingle(true)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single With Cropping&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={() =&gt; this.pickSingle(true, true)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Single With Circular Cropping&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={this.pickMultiple.bind(this)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Select Multiple&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={this.cleanupImages.bind(this)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Cleanup All Images&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
        &lt;TouchableOpacity onPress={this.cleanupSingleImage.bind(this)} style={styles.button}&gt;
          &lt;Text style={styles.text}&gt;Cleanup Single Image&lt;/Text&gt;
        &lt;/TouchableOpacity&gt;
      &lt;/View&gt;
      );
    }
    }
  </code></pre>