@@ -15,50 +15,67 @@ def parse_KV_file(file, separator='=')
1515 if !File . exists? file_abs_path
1616 return [ ] ;
1717 end
18- pods_ary = [ ]
18+ generated_key_values = { }
1919 skip_line_start_symbols = [ "#" , "/" ]
20- File . foreach ( file_abs_path ) { |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- pods_ary . push ( { :name => podname , :path => podpath } ) ;
28- else
29- puts "Invalid plugin specification: #{ line } "
30- end
31- }
32- 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
3333end
3434
3535target 'Runner' do
3636 use_frameworks!
37- # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
38- # referring to absolute paths on developers' machines.
39- system ( 'rm -rf .symlinks' )
40- system ( 'mkdir -p .symlinks/plugins' )
37+ use_modular_headers!
38+
39+ # Flutter Pod
4140
42- # Flutter Pods
43- generated_xcode_build_settings = parse_KV_file ( './Flutter/Generated.xcconfig' )
44- if generated_xcode_build_settings . empty?
45- puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first."
46- end
47- generated_xcode_build_settings . map { |p |
48- if p [ :name ] == 'FLUTTER_FRAMEWORK_DIR'
49- symlink = File . join ( '.symlinks' , 'flutter' )
50- File . symlink ( File . dirname ( p [ :path ] ) , symlink )
51- pod 'Flutter' , :path => File . join ( symlink , File . basename ( p [ :path ] ) )
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 )
5258 end
53- }
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'
5466
5567 # 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' )
5673 plugin_pods = parse_KV_file ( '../.flutter-plugins' )
57- plugin_pods . map { | p |
58- symlink = File . join ( '.symlinks' , 'plugins' , p [ : name] )
59- File . symlink ( p [ : path] , symlink )
60- pod p [ : name] , :path => File . join ( symlink , 'ios' )
61- }
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
6279end
6380
6481# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
@@ -70,4 +87,4 @@ post_install do |installer|
7087 config . build_settings [ 'ENABLE_BITCODE' ] = 'NO'
7188 end
7289 end
73- end
90+ end
0 commit comments