From 3fd518679e0891e9f76513554025a2daa534f9df Mon Sep 17 00:00:00 2001 From: Miguel Ruivo Date: Tue, 24 Sep 2019 12:04:07 +0100 Subject: [PATCH 1/2] fixes an issue that could result in a crash when picking videos from gallery on iOS 13 or above --- packages/image_picker/ios/Classes/ImagePickerPlugin.m | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/image_picker/ios/Classes/ImagePickerPlugin.m b/packages/image_picker/ios/Classes/ImagePickerPlugin.m index a23e13918148..5d4abb8a292b 100644 --- a/packages/image_picker/ios/Classes/ImagePickerPlugin.m +++ b/packages/image_picker/ios/Classes/ImagePickerPlugin.m @@ -241,6 +241,16 @@ - (void)imagePickerController:(UIImagePickerController *)picker return; } if (videoURL != nil) { + if (@available(iOS 13.0, *)) { + NSString *fileName = [videoURL lastPathComponent]; + NSURL *destination = + [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]]; + + if ([[NSFileManager defaultManager] isReadableFileAtPath:[videoURL path]]) { + [[NSFileManager defaultManager] copyItemAtURL:videoURL toURL:destination error:nil]; + videoURL = destination; + } + } self.result(videoURL.path); self.result = nil; } else { From c24ab81e39635d5180ae8ff29e598ea39eb06109 Mon Sep 17 00:00:00 2001 From: Miguel Ruivo Date: Thu, 31 Oct 2019 17:04:39 +0000 Subject: [PATCH 2/2] [image_picker] Adds error handler when caching a video file from the picker --- packages/image_picker/CHANGELOG.md | 4 ++++ .../image_picker/ios/Classes/ImagePickerPlugin.m | 14 +++++++++++++- packages/image_picker/pubspec.yaml | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index d8a170e47499..11c48e8724bc 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.2 + +* iOS: Fixes an issue where picking conent from Gallery would result in a crash on iOS 13. + ## 0.6.1+11 * Stability and Maintainability: update documentations, add unit tests. diff --git a/packages/image_picker/ios/Classes/ImagePickerPlugin.m b/packages/image_picker/ios/Classes/ImagePickerPlugin.m index 5d4abb8a292b..5ac31a695a58 100644 --- a/packages/image_picker/ios/Classes/ImagePickerPlugin.m +++ b/packages/image_picker/ios/Classes/ImagePickerPlugin.m @@ -247,12 +247,24 @@ - (void)imagePickerController:(UIImagePickerController *)picker [NSURL fileURLWithPath:[NSTemporaryDirectory() stringByAppendingPathComponent:fileName]]; if ([[NSFileManager defaultManager] isReadableFileAtPath:[videoURL path]]) { - [[NSFileManager defaultManager] copyItemAtURL:videoURL toURL:destination error:nil]; + NSError *error; + if (![[videoURL path] isEqualToString:[destination path]]) { + [[NSFileManager defaultManager] copyItemAtURL:videoURL toURL:destination error:&error]; + + if (error) { + self.result([FlutterError errorWithCode:@"flutter_image_picker_copy_video_error" + message:@"Could not cache the video file." + details:nil]); + self.result = nil; + return; + } + } videoURL = destination; } } self.result(videoURL.path); self.result = nil; + } else { UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage]; if (image == nil) { diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 998d921005a1..bca5a9df2059 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.6.1+11 +version: 0.6.2 flutter: plugin: