ensureMacosPackageSwift function

void ensureMacosPackageSwift(
  1. String pluginName, {
  2. String baseDir = '.',
  3. List<ModuleInfo>? moduleInfos,
})

Mirrors ensureIosPackageSwift for macos/. Creates the Flutter 3.41+ nested SPM layout (macos/<pluginName>/Package.swift) if not present, then syncs C/C++ module sources into SPM Sources directories.

Implementation

void ensureMacosPackageSwift(
  String pluginName, {
  String baseDir = '.',
  List<ModuleInfo>? moduleInfos,
}) {
  final spmStatus = spm.detectSpmStatus(baseDir);
  if (spmStatus.macosHasSpm) {
    _syncCppModuleSourcesToSpm(pluginName, moduleInfos: moduleInfos, baseDir: baseDir);
    return;
  }

  final className = pluginName
      .split('_')
      .map((w) => w.isEmpty ? '' : w[0].toUpperCase() + w.substring(1))
      .join('');

  final packageRoot = p.join(baseDir, 'macos', pluginName);
  Directory(p.join(packageRoot, 'Sources', className)).createSync(recursive: true);
  Directory(p.join(packageRoot, 'Sources', '${className}Cpp')).createSync(recursive: true);

  File(p.join(packageRoot, 'Package.swift')).writeAsStringSync(
    st.macosPackageSwiftContent(pluginName, className),
  );
  _syncCppModuleSourcesToSpm(pluginName, moduleInfos: moduleInfos, baseDir: baseDir);
}