ensureIosPackageSwift function

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

Implementation

void ensureIosPackageSwift(
  String pluginName, {
  String baseDir = '.',
  List<ModuleInfo>? moduleInfos,
}) {
  // Check nested layout first (Flutter 3.41+: ios/<pluginName>/Package.swift),
  // then fall back to flat layout (ios/Package.swift).
  final spmStatus = spm.detectSpmStatus(baseDir);
  if (spmStatus.iosHasSpm) {
    // Package.swift already exists — sync C/C++ module sources into Sources/<MainCpp>/.
    _syncCppModuleSourcesToSpm(
      pluginName,
      moduleInfos: moduleInfos,
      baseDir: baseDir,
    );
    return;
  }

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

  // Create nested Flutter 3.41+ layout: ios/<pluginName>/Sources/
  final packageRoot = p.join(baseDir, 'ios', pluginName);
  Directory(p.join(packageRoot, 'Sources', className)).createSync(recursive: true);
  Directory(p.join(packageRoot, 'Sources', '${className}Cpp')).createSync(recursive: true);

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