Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 24 additions & 3 deletions cli/src/ios/update.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@ import {
getAllElements,
getFilePath,
getPlatformElement,
getPluginPlatform,
getPluginType,
getPlugins,
printPlugins,
} from '../plugin';
import type { Plugin } from '../plugin';
import { copy as copyTask } from '../tasks/copy';
import { setAllStringIn } from '../tasks/migrate';
import { convertToUnixPath } from '../util/fs';
import { generateIOSPackageJSON } from '../util/iosplugin';
import { resolveNode } from '../util/node';
Expand Down Expand Up @@ -83,7 +85,20 @@ async function generateCordovaPackageFile(p: Plugin, config: Config) {
publicHeadersPath: "."`;
}

const content = `// swift-tools-version: 5.9
const platformTag = getPluginPlatform(p, platform);
if (platformTag.$?.package) {
const packageSwiftPath = join(p.rootPath, 'Package.swift');
let content = await readFile(packageSwiftPath, { encoding: 'utf-8' });
content = content.replace(`apache`, `ionic-team`).replaceAll(`cordova-ios`, `capacitor-swift-pm`);
content = setAllStringIn(
content,
`url: "https://github.com/ionic-team/capacitor-swift-pm.git",`,
`)`,
` from: "${iosPlatformVersion}"`,
);
await writeFile(packageSwiftPath, content);
} else {
const content = `// swift-tools-version: 5.9

import PackageDescription

Expand All @@ -109,7 +124,9 @@ let package = Package(
)
]
)`;
await writeFile(join(config.ios.cordovaPluginsDirAbs, 'sources', p.name, 'Package.swift'), content);

await writeFile(join(config.ios.cordovaPluginsDirAbs, 'sources', p.name, 'Package.swift'), content);
}
}

export async function installCocoaPodsPlugins(config: Config, plugins: Plugin[], deployment: boolean): Promise<void> {
Expand Down Expand Up @@ -388,12 +405,16 @@ function getLinkerFlags(config: Config) {

async function copyPluginsNativeFiles(config: Config, cordovaPlugins: Plugin[]) {
for (const p of cordovaPlugins) {
const platformTag = getPluginPlatform(p, platform);
if (platformTag.$?.package) {
continue;
}
const sourceFiles = getPlatformElement(p, platform, 'source-file');
const headerFiles = getPlatformElement(p, platform, 'header-file');
const codeFiles = sourceFiles.concat(headerFiles);
const frameworks = getPlatformElement(p, platform, 'framework');
let sourcesFolderName = 'sources';
if (needsStaticPod(p)) {
if ((await config.ios.packageManager) !== 'SPM' && needsStaticPod(p)) {
sourcesFolderName += 'static';
}
const sourcesFolder = join(config.ios.cordovaPluginsDirAbs, sourcesFolderName, p.name);
Expand Down
2 changes: 1 addition & 1 deletion cli/src/tasks/migrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ async function updateFile(
return false;
}

function setAllStringIn(data: string, start: string, end: string, replacement: string): string {
export function setAllStringIn(data: string, start: string, end: string, replacement: string): string {
let position = 0;
let result = data;
let replaced = true;
Expand Down
20 changes: 16 additions & 4 deletions cli/src/util/spm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import { fatal } from '../errors';
import { getMajoriOSVersion } from '../ios/common';
import { logger } from '../log';
import type { Plugin } from '../plugin';
import { getPluginType, PluginType } from '../plugin';
import { getPluginPlatform, getPluginType, PluginType } from '../plugin';
import { runCommand } from '../util/subprocess';

export interface SwiftPlugin {
Expand Down Expand Up @@ -52,7 +52,6 @@ export async function generatePackageFile(config: Config, plugins: Plugin[]): Pr

export async function checkPluginsForPackageSwift(config: Config, plugins: Plugin[]): Promise<Plugin[]> {
const iOSCapacitorPlugins = plugins.filter((p) => getPluginType(p, 'ios') === PluginType.Core);

const packageSwiftPluginList = await pluginsWithPackageSwift(iOSCapacitorPlugins);

if (plugins.length == packageSwiftPluginList.length) {
Expand Down Expand Up @@ -118,7 +117,13 @@ let package = Package(

for (const plugin of plugins) {
if (getPluginType(plugin, config.ios.name) === PluginType.Cordova) {
packageSwiftText += `,\n .package(name: "${plugin.name}", path: "../../capacitor-cordova-ios-plugins/sources/${plugin.name}")`;
const platformTag = getPluginPlatform(plugin, config.ios.name);
if (platformTag.$?.package) {
const relPath = relative(config.ios.nativeXcodeProjDirAbs, plugin.rootPath);
packageSwiftText += `,\n .package(name: "${plugin.id}", path: "${relPath}")`;
} else {
packageSwiftText += `,\n .package(name: "${plugin.name}", path: "../../capacitor-cordova-ios-plugins/sources/${plugin.name}")`;
}
} else {
const relPath = relative(config.ios.nativeXcodeProjDirAbs, plugin.rootPath);
const traits = packageTraits[plugin.id];
Expand All @@ -144,7 +149,14 @@ let package = Package(
.product(name: "Cordova", package: "capacitor-swift-pm")`;

for (const plugin of plugins) {
packageSwiftText += `,\n .product(name: "${plugin.ios?.name}", package: "${plugin.ios?.name}")`;
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 += pluginText;
}

packageSwiftText += `
Expand Down
Loading