From 43a27cd117a13f6d06d84979c427d5c756262922 Mon Sep 17 00:00:00 2001 From: Miguel Ruivo Date: Tue, 28 Apr 2020 10:30:59 +0100 Subject: [PATCH] Refactors CUSTOM to custom on getFile() --- CHANGELOG.md | 3 ++ example/ios/Podfile | 95 +++++++++++++++++++++++++--------------- example/ios/Podfile.lock | 8 ++-- lib/file_picker.dart | 2 +- pubspec.yaml | 2 +- 5 files changed, 68 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 07c4d72..bfe7162 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 1.8.0+1 +Minor fix on `getFile()` method — should affect only those on 1.8.0. + ## 1.8.0 Adds `FileType.media` that will allow you to pick video and images at the same time. On iOS, this will let you pick directly from Photos app (gallery), if you want to use Files app, you _must_ use `FileType.custom` with desired extensions. diff --git a/example/ios/Podfile b/example/ios/Podfile index 97e4d2c..7c81246 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -1,64 +1,87 @@ # Uncomment this line to define a global platform for your project -platform :ios, '8.0' +# platform :ios, '9.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + def parse_KV_file(file, separator='=') file_abs_path = File.expand_path(file) if !File.exists? file_abs_path return []; end - pods_ary = [] + generated_key_values = {} skip_line_start_symbols = ["#", "/"] - File.foreach(file_abs_path) { |line| - next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } - plugin = line.split(pattern=separator) - if plugin.length == 2 - podname = plugin[0].strip() - path = plugin[1].strip() - podpath = File.expand_path("#{path}", file_abs_path) - pods_ary.push({:name => podname, :path => podpath}); - else - puts "Invalid plugin specification: #{line}" - end - } - return pods_ary + File.foreach(file_abs_path) do |line| + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } + plugin = line.split(pattern=separator) + if plugin.length == 2 + podname = plugin[0].strip() + path = plugin[1].strip() + podpath = File.expand_path("#{path}", file_abs_path) + generated_key_values[podname] = podpath + else + puts "Invalid plugin specification: #{line}" + end + end + generated_key_values end target 'Runner' do + # Flutter Pod use_frameworks! + copied_flutter_dir = File.join(__dir__, 'Flutter') + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. + + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') + unless File.exist?(generated_xcode_build_settings_path) + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; + + unless File.exist?(copied_framework_path) + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) + end + unless File.exist?(copied_podspec_path) + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) + end + end + + # Keep pod path relative so it can be checked into Podfile.lock. + pod 'Flutter', :path => 'Flutter' + + # Plugin Pods + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock # referring to absolute paths on developers' machines. system('rm -rf .symlinks') system('mkdir -p .symlinks/plugins') - - # Flutter Pods - generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') - if generated_xcode_build_settings.empty? - puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." - end - generated_xcode_build_settings.map { |p| - if p[:name] == 'FLUTTER_FRAMEWORK_DIR' - symlink = File.join('.symlinks', 'flutter') - File.symlink(File.dirname(p[:path]), symlink) - pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) - end - } - - # Plugin Pods plugin_pods = parse_KV_file('../.flutter-plugins') - plugin_pods.map { |p| - symlink = File.join('.symlinks', 'plugins', p[:name]) - File.symlink(p[:path], symlink) - pod p[:name], :path => File.join(symlink, 'ios') - } + plugin_pods.each do |name, path| + symlink = File.join('.symlinks', 'plugins', name) + File.symlink(path, symlink) + pod name, :path => File.join(symlink, 'ios') + end end +# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. +install! 'cocoapods', :disable_input_output_paths => true + post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['ENABLE_BITCODE'] = 'NO' end end -end +end \ No newline at end of file diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index e990691..cfefee6 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -65,7 +65,7 @@ PODS: DEPENDENCIES: - file_picker (from `.symlinks/plugins/file_picker/ios`) - - Flutter (from `.symlinks/flutter/ios`) + - Flutter (from `Flutter`) - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`) SPEC REPOS: @@ -82,7 +82,7 @@ EXTERNAL SOURCES: file_picker: :path: ".symlinks/plugins/file_picker/ios" Flutter: - :path: ".symlinks/flutter/ios" + :path: Flutter flutter_plugin_android_lifecycle: :path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios" @@ -98,6 +98,6 @@ SPEC CHECKSUMS: SDWebImage: 97351f6582ceca541ea294ba66a1fcb342a331c2 SDWebImageFLPlugin: 6c2295fb1242d44467c6c87dc5db6b0a13228fd8 -PODFILE CHECKSUM: 27341c1ab2a92ab24c1e60a397ab924b94c94ff5 +PODFILE CHECKSUM: d5067366bad8216f789a99f6384e7bef21d4a19b -COCOAPODS: 1.8.4 +COCOAPODS: 1.9.1 diff --git a/lib/file_picker.dart b/lib/file_picker.dart index 61689eb..bef4db4 100644 --- a/lib/file_picker.dart +++ b/lib/file_picker.dart @@ -66,7 +66,7 @@ class FilePicker { static Future _getPath(String type, bool allowMultipleSelection, List allowedExtensions) async { - if (type != 'CUSTOM' && (allowedExtensions?.isNotEmpty ?? false)) { + if (type != 'custom' && (allowedExtensions?.isNotEmpty ?? false)) { throw Exception( 'If you are using a custom extension filter, please use the FileType.custom instead.'); } diff --git a/pubspec.yaml b/pubspec.yaml index dcb65cd..c26ee40 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: file_picker description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support. homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker -version: 1.8.0 +version: 1.8.0+1 dependencies: flutter: