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