|
| 1 | +# Uncomment this line to define a global platform for your project |
| 2 | +# platform :ios, '9.0' |
| 3 | + |
| 4 | +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. |
| 5 | +ENV['COCOAPODS_DISABLE_STATS'] = 'true' |
| 6 | + |
| 7 | +project 'Runner', { |
| 8 | + 'Debug' => :debug, |
| 9 | + 'Profile' => :release, |
| 10 | + 'Release' => :release, |
| 11 | +} |
| 12 | + |
| 13 | +def parse_KV_file(file, separator='=') |
| 14 | + file_abs_path = File.expand_path(file) |
| 15 | + if !File.exists? file_abs_path |
| 16 | + return []; |
| 17 | + end |
| 18 | + generated_key_values = {} |
| 19 | + skip_line_start_symbols = ["#", "/"] |
| 20 | + File.foreach(file_abs_path) do |line| |
| 21 | + next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } |
| 22 | + plugin = line.split(pattern=separator) |
| 23 | + if plugin.length == 2 |
| 24 | + podname = plugin[0].strip() |
| 25 | + path = plugin[1].strip() |
| 26 | + podpath = File.expand_path("#{path}", file_abs_path) |
| 27 | + generated_key_values[podname] = podpath |
| 28 | + else |
| 29 | + puts "Invalid plugin specification: #{line}" |
| 30 | + end |
| 31 | + end |
| 32 | + generated_key_values |
| 33 | +end |
| 34 | + |
| 35 | +target 'Runner' do |
| 36 | + use_frameworks! |
| 37 | + use_modular_headers! |
| 38 | + |
| 39 | + # Flutter Pod |
| 40 | + |
| 41 | + copied_flutter_dir = File.join(__dir__, 'Flutter') |
| 42 | + copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') |
| 43 | + copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') |
| 44 | + unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) |
| 45 | + # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. |
| 46 | + # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. |
| 47 | + # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. |
| 48 | + |
| 49 | + generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') |
| 50 | + unless File.exist?(generated_xcode_build_settings_path) |
| 51 | + raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" |
| 52 | + end |
| 53 | + generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) |
| 54 | + cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; |
| 55 | + |
| 56 | + unless File.exist?(copied_framework_path) |
| 57 | + FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) |
| 58 | + end |
| 59 | + unless File.exist?(copied_podspec_path) |
| 60 | + FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) |
| 61 | + end |
| 62 | + end |
| 63 | + |
| 64 | + # Keep pod path relative so it can be checked into Podfile.lock. |
| 65 | + pod 'Flutter', :path => 'Flutter' |
| 66 | + |
| 67 | + # Plugin Pods |
| 68 | + |
| 69 | + # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock |
| 70 | + # referring to absolute paths on developers' machines. |
| 71 | + system('rm -rf .symlinks') |
| 72 | + system('mkdir -p .symlinks/plugins') |
| 73 | + plugin_pods = parse_KV_file('../.flutter-plugins') |
| 74 | + plugin_pods.each do |name, path| |
| 75 | + symlink = File.join('.symlinks', 'plugins', name) |
| 76 | + File.symlink(path, symlink) |
| 77 | + pod name, :path => File.join(symlink, 'ios') |
| 78 | + end |
| 79 | +end |
| 80 | + |
| 81 | +post_install do |installer| |
| 82 | + installer.pods_project.targets.each do |target| |
| 83 | + target.build_configurations.each do |config| |
| 84 | + config.build_settings['ENABLE_BITCODE'] = 'NO' |
| 85 | + end |
| 86 | + end |
| 87 | +end |
0 commit comments