detectSpmStatus function
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,
);
}