ensureIosPackageSwift function

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

Implementation

void ensureIosPackageSwift(String pluginName, {String baseDir = '.', List<ModuleInfo>? moduleInfos}) {
  final packageSwift = File(p.join(baseDir, 'ios', 'Package.swift'));
  if (packageSwift.existsSync()) {
    // 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('');
  Directory(p.join(baseDir, 'ios', 'Sources', className)).createSync(recursive: true);
  Directory(p.join(baseDir, 'ios', 'Sources', '${className}Cpp')).createSync(recursive: true);
  packageSwift.writeAsStringSync(
    '// swift-tools-version: 5.9\n'
    'import PackageDescription\n'
    '\n'
    'let package = Package(\n'
    '  name: "$pluginName",\n'
    '  platforms: [.iOS(.v13)],\n'
    '  products: [\n'
    '    .library(name: "$pluginName", targets: ["$pluginName"])\n'
    '  ],\n'
    '  targets: [\n'
    '    .target(\n'
    '      name: "${className}Cpp",\n'
    '      path: "Sources/${className}Cpp",\n'
    '      publicHeadersPath: "include",\n'
    '      cxxSettings: [\n'
    '        .headerSearchPath("include"),\n'
    '        .unsafeFlags(["-std=c++17", "-I.symlinks/plugins/nitro/src/native"])\n'
    '      ]\n'
    '    ),\n'
    '    .target(\n'
    '      name: "$pluginName",\n'
    '      dependencies: ["${className}Cpp"],\n'
    '      path: "Sources/$className"\n'
    '    )\n'
    '  ]\n'
    ')\n',
  );
  _syncCppModuleSourcesToSpm(pluginName, moduleInfos: moduleInfos, baseDir: baseDir);
}