installFastlanePlugin function
Implementation
Future<void> installFastlanePlugin(
String pluginName, {
String? workingDirectory,
}) async {
final gemFile = File('$workingDirectory/Gemfile');
if (!(await gemFile.exists() &&
(await gemFile.readAsString()).contains('plugins_path'))) {
// Need to create a fastlane directory before working with plugins and the project.
await Directory('$workingDirectory/fastlane').create(recursive: true);
// Needed to support plugins
final gemFileContent = '''
source "https://rubygems.org"
gem "fastlane"
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
eval_gemfile(plugins_path) if File.exist?(plugins_path)
''';
await gemFile.writeAsString(gemFileContent);
}
final pluginFile = File('$workingDirectory/fastlane/Pluginfile');
if (await pluginFile.exists() &&
(await pluginFile.readAsString())
.contains('fastlane-plugin-$pluginName')) {
// Plugin already installed
return;
}
// Install plugin to resolve the application id
// Must run in sudo mode because of https://github.com/rubygems/rubygems/issues/6272#issuecomment-1381683835
await runProcess(
'sudo',
['fastlane', 'add_plugin', pluginName],
workingDirectory: workingDirectory,
runInShell: true,
printCall: true,
);
}