detectSpmStatus function

SpmStatus detectSpmStatus(
  1. String baseDir
)

Detects SPM and CocoaPods status for a plugin directory.

Handles both the flat layout (ios/Package.swift) and the Flutter 3.41+ nested layout (ios/<pluginName>/Package.swift).

Implementation

SpmStatus detectSpmStatus(String baseDir) {
  final iosDir = Directory(p.join(baseDir, 'ios'));
  final macosDir = Directory(p.join(baseDir, 'macos'));

  final iosPackageSwiftPath = _findPackageSwift(iosDir);
  final macosPackageSwiftPath = _findPackageSwift(macosDir);

  final iosHasSpm = iosPackageSwiftPath != null;
  final macosHasSpm = macosPackageSwiftPath != null;

  final iosPodspecs = iosDir.existsSync() ? iosDir.listSync().whereType<File>().where((f) => f.path.endsWith('.podspec')).toList() : <File>[];
  final macosPodspecs = macosDir.existsSync() ? macosDir.listSync().whereType<File>().where((f) => f.path.endsWith('.podspec')).toList() : <File>[];

  final issues = <String>[];
  final warnings = <String>[];

  // Validate Package.swift structure if present
  if (iosPackageSwiftPath != null) {
    final validation = validatePackageSwift(iosPackageSwiftPath, 'ios');
    issues.addAll(validation.issues);
    warnings.addAll(validation.warnings);
  }
  if (macosPackageSwiftPath != null) {
    final validation = validatePackageSwift(macosPackageSwiftPath, 'macos');
    issues.addAll(validation.issues);
    warnings.addAll(validation.warnings);
  }

  return SpmStatus(
    hasSpm: iosHasSpm || macosHasSpm,
    hasCocoaPods: iosPodspecs.isNotEmpty || macosPodspecs.isNotEmpty,
    iosHasSpm: iosHasSpm,
    macosHasSpm: macosHasSpm,
    iosHasPodspec: iosPodspecs.isNotEmpty,
    macosHasPodspec: macosPodspecs.isNotEmpty,
    iosPackageSwiftPath: iosPackageSwiftPath,
    macosPackageSwiftPath: macosPackageSwiftPath,
    issues: issues,
    warnings: warnings,
  );
}