run method

  1. @override
Future? run()
override

Executes the initialization command to set up the project.

This method performs the following tasks:

  • Creates necessary distribution directories
  • Validates required development tools
  • Sets up platform-specific configurations
  • Generates initial configuration files
  • Downloads metadata for Android publishing

The initialization process includes:

  • Directory structure creation for Android and iOS (macOS only)
  • Tool validation for Flutter, Firebase, Git, Fastlane, and compression tools
  • Fastlane configuration setup
  • Google Play Console metadata download

Implementation

@override
Future? run() async {
  final initialized = <String, bool>{};
  String configFilePath =
      globalResults?['config'] as String? ?? 'distribution.yaml';
  _logWelcome();
  _checkPubspecFile();
  await _createDirectory(path.join("distribution", "android", "output"),
      initialized, "android_directory");
  if (Platform.isMacOS) {
    await _createDirectory(path.join("distribution", "ios", "output"),
        initialized, "ios_directory");
  }

  if (!(argResults!['skip-tools'] as bool)) {
    await _checkTool("flutter", "Flutter", initialized, args: ['--version'])
        .catchError((_) => -1);
    await _checkTool("firebase", "Firebase", initialized)
        .catchError((_) => -1);
    await _checkTool("git", "Git", initialized, args: ['--version'])
        .catchError((_) => -1);

    await CompressFiles.checkTools().then((value) {
      if (!value) {
        logger.logWarning(
            "Compress tool is not installed, some features may not work as expected.");
      } else {
        logger.logSuccess('Compress tool is installed.');
        initialized["compress_tool"] = true;
      }
    });

    await _checkTool("fastlane", "Fastlane", initialized, args: ['actions'])
        .catchError((_) => -1)
        .then((value) async {
      if (value == 0) {
        await _validateFastlaneJson(initialized).then((value) async {
          if (value == 0) return await _downloadAndroidMetaData();
        });
      } else {
        if (Platform.isWindows) {
          logger.logWarning(
              'Tips : In Windows, you can install fastlane using "gem install fastlane", make sure you have Ruby installed.');
        } else if (Platform.isLinux) {
          logger.logWarning(
              'Tips : In Linux, you can install fastlane using "sudo gem install fastlane", make sure you have Ruby installed.');
        } else if (Platform.isMacOS) {
          logger.logWarning(
              'Tips : In MacOS, you can install fastlane using "sudo gem install fastlane", make sure you have Ruby installed.');
        }
        initialized["fastlane_json"] = false;
      }
    });
    if (Platform.isMacOS) {
      await _checkTool("xcrun", "XCRun", initialized, args: ["altool", "-h"])
          .catchError((_) => -1);
    }
  }

  final yaml = File(configFilePath);
  if (!yaml.existsSync()) {
    yaml.writeAsString(yamlEncode(structures), flush: true);
  }

  return;
}