From 2bd8c65af82ad093da2dd97f76af3384c6d64bee Mon Sep 17 00:00:00 2001 From: Rui Mendes Date: Mon, 27 Apr 2026 17:56:36 +0100 Subject: [PATCH] fix: handle Cordova plugins without iOS source files --- cli/src/ios/update.ts | 4 ++++ cli/src/plugin.ts | 2 +- cli/src/util/spm.ts | 20 ++++++++++++++++---- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/cli/src/ios/update.ts b/cli/src/ios/update.ts index 14bab0da67..550a7f8bd4 100644 --- a/cli/src/ios/update.ts +++ b/cli/src/ios/update.ts @@ -98,6 +98,10 @@ async function generateCordovaPackageFile(p: Plugin, config: Config) { ); await writeFile(packageSwiftPath, content); } else { + const sourceFiles = getPlatformElement(p, platform, 'source-file'); + if (sourceFiles.length === 0 && headerFiles.length === 0) { + return; + } const content = `// swift-tools-version: 5.9 import PackageDescription diff --git a/cli/src/plugin.ts b/cli/src/plugin.ts index 884bba998a..b4cb692cf4 100644 --- a/cli/src/plugin.ts +++ b/cli/src/plugin.ts @@ -154,7 +154,7 @@ export function getPluginPlatform(p: Plugin, platform: string): any { }); return platforms[0]; } - return []; + return undefined; } export function getPlatformElement(p: Plugin, platform: string, elementName: string): any { diff --git a/cli/src/util/spm.ts b/cli/src/util/spm.ts index c50c39735c..daf6da926d 100644 --- a/cli/src/util/spm.ts +++ b/cli/src/util/spm.ts @@ -11,7 +11,7 @@ import { fatal } from '../errors'; import { getMajoriOSVersion } from '../ios/common'; import { logger } from '../log'; import type { Plugin } from '../plugin'; -import { getPluginPlatform, getPluginType, PluginType } from '../plugin'; +import { getPlatformElement, getPluginPlatform, getPluginType, PluginType } from '../plugin'; import { runCommand } from '../util/subprocess'; export interface SwiftPlugin { @@ -124,6 +124,11 @@ let package = Package( const relPath = relative(config.ios.nativeXcodeProjDirAbs, plugin.rootPath); packageSwiftText += `,\n .package(name: "${plugin.id}", path: "${relPath}")`; } else { + const sourceFiles = getPlatformElement(plugin, config.ios.name, 'source-file'); + const headerFiles = getPlatformElement(plugin, config.ios.name, 'header-file'); + if (sourceFiles.length === 0 && headerFiles.length === 0) { + continue; + } packageSwiftText += `,\n .package(name: "${plugin.name}", path: "../../capacitor-cordova-ios-plugins/sources/${plugin.name}")`; } } else { @@ -151,14 +156,21 @@ let package = Package( .product(name: "Cordova", package: "capacitor-swift-pm")`; for (const plugin of plugins) { - let pluginText = `,\n .product(name: "${plugin.ios?.name}", package: "${plugin.ios?.name}")`; if (getPluginType(plugin, config.ios.name) === PluginType.Cordova) { const platformTag = getPluginPlatform(plugin, config.ios.name); if (platformTag.$?.package) { - pluginText = `,\n .product(name: "${plugin.id}", package: "${plugin.id}")`; + packageSwiftText += `,\n .product(name: "${plugin.id}", package: "${plugin.id}")`; + } else { + const sourceFiles = getPlatformElement(plugin, config.ios.name, 'source-file'); + const headerFiles = getPlatformElement(plugin, config.ios.name, 'header-file'); + if (sourceFiles.length === 0 && headerFiles.length === 0) { + continue; + } + packageSwiftText += `,\n .product(name: "${plugin.ios?.name}", package: "${plugin.ios?.name}")`; } + } else { + packageSwiftText += `,\n .product(name: "${plugin.ios?.name}", package: "${plugin.ios?.name}")`; } - packageSwiftText += pluginText; } packageSwiftText += `