syncBridgeFiles function

void syncBridgeFiles(
  1. String workingDirectory
)

Synchronizes generated bridge files from lib/src/generated to native project roots (ios/Classes). This is needed for iOS development as CocoaPods normally uses copies instead of symlinks.

Implementation

void syncBridgeFiles(String workingDirectory) {
  final classesDir = Directory(p.join(workingDirectory, 'ios', 'Classes'));
  if (!classesDir.existsSync()) return;

  final generatedDir = Directory(p.join(workingDirectory, 'lib', 'src', 'generated'));
  if (!generatedDir.existsSync()) return;

  // Sync Swift bridges
  final swiftSource = Directory(p.join(generatedDir.path, 'swift'));
  if (swiftSource.existsSync()) {
    for (final file in swiftSource.listSync().whereType<File>()) {
      final name = p.basename(file.path);
      if (name.endsWith('.bridge.g.swift')) {
        file.copySync(p.join(classesDir.path, name));
      }
    }
  }

  // Sync C++/Obj-C++ bridges
  final cppSource = Directory(p.join(generatedDir.path, 'cpp'));
  if (cppSource.existsSync()) {
    for (final file in cppSource.listSync().whereType<File>()) {
      final name = p.basename(file.path);
      if (name.endsWith('.bridge.g.h') || name.endsWith('.bridge.g.cpp')) {
        // .bridge.g.cpp -> .bridge.g.mm for iOS Objective-C++ support
        final targetName = name.endsWith('.bridge.g.cpp') ? name.replaceFirst('.bridge.g.cpp', '.bridge.g.mm') : name;
        file.copySync(p.join(classesDir.path, targetName));
      }
    }
  }
}