ensureIosPackageSwift function
void
ensureIosPackageSwift(
- String pluginName, {
- String baseDir = '.',
- 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,
);
}