mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Enables the CocoaPods-based plugin workflow for macOS. This allows a macOS project to automatically fetch and add native plugin implementations via CocoaPods for anything in pubspec.yaml, as is done on iOS.
80 lines
2.5 KiB
Plaintext
80 lines
2.5 KiB
Plaintext
platform :osx, '10.13'
|
|
|
|
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
|
|
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
|
|
|
|
project 'Runner', {
|
|
'Debug' => :debug,
|
|
# TODO: Add Profile support to projects.
|
|
#'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 = []
|
|
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
|
|
end
|
|
|
|
def pubspec_supports_macos(file)
|
|
file_abs_path = File.expand_path(file)
|
|
if !File.exists? file_abs_path
|
|
return false;
|
|
end
|
|
File.foreach(file_abs_path) { |line|
|
|
# TODO(stuartmorgan): Use formal platform declaration once it exists,
|
|
# see https://github.com/flutter/flutter/issues/33597.
|
|
return true if line =~ /^\s*macosPrefix:/
|
|
}
|
|
return false
|
|
end
|
|
|
|
target 'Runner' do
|
|
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
|
|
# referring to absolute paths on developers' machines.
|
|
ephemeral_dir = File.join('Flutter', 'ephemeral')
|
|
symlink_dir = File.join(ephemeral_dir, '.symlinks')
|
|
symlink_plugins_dir = File.join(symlink_dir, 'plugins')
|
|
system("rm -rf #{symlink_dir}")
|
|
system("mkdir -p #{symlink_plugins_dir}")
|
|
|
|
# Flutter Pods
|
|
generated_xcconfig = parse_KV_file(File.join(ephemeral_dir, 'Flutter-Generated.xcconfig'))
|
|
if generated_xcconfig.empty?
|
|
puts "Flutter-Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first."
|
|
end
|
|
generated_xcconfig.map { |p|
|
|
if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
|
|
symlink = File.join(symlink_dir, 'flutter')
|
|
File.symlink(File.dirname(p[:path]), symlink)
|
|
pod 'FlutterMacOS', :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(symlink_plugins_dir, p[:name])
|
|
File.symlink(p[:path], symlink)
|
|
if pubspec_supports_macos(File.join(symlink, 'pubspec.yaml'))
|
|
pod p[:name], :path => File.join(symlink, 'macos')
|
|
end
|
|
}
|
|
end
|