xsephtion
xsephtion

Reputation: 193

Imagepicker React Native crashes on iOS but works fine on Android

I am currently using imagepicker on react native. When I use android to pick image it works fine. However when I use iOS it crashes when I choose a photo.

This is the error it shows in xcode debugger:

2020-04-03 11:54:27.802434+0800 app[7218:1993193] -[NSURLResponse allHeaderFields]: unrecognized selector sent to instance 0x28281aba0 2020-04-03 11:54:27.802766+0800 app[7218:1993193] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURLResponse allHeaderFields]: unrecognized selector sent to instance 0x28281aba0' * First throw call stack: (0x19d01c164 0x19cd30c1c 0x19cf1a7e0 0x19d02085c 0x19d022b60 0x102b27bc8 0x102b27a90 0x102b01ce0 0x1059f5d10 0x1059f718c 0x1059fe968 0x1059ff580 0x105a0b0f0 0x19cd23714 0x19cd299c8) libc++abi.dylib: terminating with uncaught exception of type NSException

and this is my code:

chooseImage = async (id) => {
        //await this.askPermissionsAsync();
        let options = {
          title: 'Select Image',
          storageOptions: {
            skipBackup: true,
            path: 'images',
          },
        };
        ImagePicker.showImagePicker(options, (response) => {
          console.log('Response = ', response.error);

          if (response.didCancel) {
            console.log('User cancelled image picker');
          } else if (response.error) {
            console.log('ImagePicker Error: ', response.error);
          } else {
            const source = { uri: response.uri };

            // You can also display the image using data:
            // const source = { uri: 'data:image/jpeg;base64,' + response.data };
            // alert(JSON.stringify(response));


            let file_data = [...this.state.fileData];
            file_data[id] = response.data;

            let file_uri = [...this.state.fileUri];
            file_uri[id] = response.uri;

            this.setState({filePath:response, fileData: file_data, fileUri: file_uri});
          }
        });
      }

I have also added the permissions in info.plist:

    <key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string></string>
    <key>NSDocumentsFolderUsageDescription</key>
    <string></string>

but the problem still persist in ios.

Upvotes: 3

Views: 3611

Answers (2)

Neelam Soni
Neelam Soni

Reputation: 1351

react-native link did not link the library, so the mage picker lib did not build with the app. Thats why I as getting null pointer exception because there was no lib.

Or else manually add the library.

<key>NSCameraUsageDescription</key>
	<string>Access to take a photo by camera</string>
<key>NSAppleMusicUsageDescription</key>
	<string>Access to pick a photo</string>
<key>NSPhotoLibraryUsageDescription</key>
	<string>Access to pick a photo</string>

Upvotes: 0

xsephtion
xsephtion

Reputation: 193

The issue was

'data:image/jpeg;base64,' + this.state.fileData[id]

while rendering it on Image tag. This issue is indicated here:

YellowBox Crash

Image Crash with data:image/png;base64

The solution I did was to add "noData: true" on option and access directly the URI file location in the image tag.

Hope this helps

Upvotes: 2

Related Questions