Loading...
Loading...
Guides the agent through adding Swift Package Manager (SPM) support to an existing Capacitor plugin. Covers creating a Package.swift manifest, replacing Objective-C bridge files with the CAPBridgedPlugin Swift protocol, updating .gitignore for SPM artifacts, cleaning up the Xcode project file, and updating package.json. Do not use for Capacitor app projects, creating new plugins from scratch, or non-Capacitor plugin frameworks.
npx skill4agent add capawesome-team/skills capacitor-plugin-spm-supportCAPBridgedPluginPackage.swift| Requirement | Version |
|---|---|
| Capacitor | 6+ |
| Swift | 5.9+ |
| Xcode | 15+ |
ios/Plugin/package.json@capawesome/capacitor-app-reviewfilesscripts.podspecPod::Spec.newCapawesomeCapacitorAppReviews.ios.deployment_target'13.0'13s.dependencyspec.dependencyCapacitorCapacitorCordovaios/Plugin/CAPPlugin@objc(<PluginClassName>)AppReviewPlugin.mCAP_PLUGINAppReviewCAP_PLUGIN_METHOD.mCAPPluginReturnPromiseios/Plugin/<PluginClassName>.h<PluginClassName>.mCAP_PLUGINpackage.jsonpeerDependencies["@capacitor/core"]6"<dependency_name>" Swift Package Manager~> 5.0.upToNextMajor(from: "5.0.0")= 2.1.0.exact("2.1.0")"<dependency_name>" SPM alternativePackage.swiftPackage.swiftPackage.swift// swift-tools-version: 5.9
import PackageDescription
let package = Package(
name: "<SPM_PACKAGE_NAME>",
platforms: [.iOS(.v<SPM_IOS_VERSION>)],
products: [
.library(
name: "<SPM_PACKAGE_NAME>",
targets: ["<PLUGIN_CLASS_NAME>"])
],
dependencies: [
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", branch: "<CAPACITOR_MAJOR_VERSION>.0.0")
// <ADDITIONAL_PACKAGE_DEPENDENCIES>
],
targets: [
.target(
name: "<PLUGIN_CLASS_NAME>",
dependencies: [
.product(name: "Capacitor", package: "capacitor-swift-pm"),
.product(name: "Cordova", package: "capacitor-swift-pm")
// <ADDITIONAL_TARGET_DEPENDENCIES>
],
path: "ios/Plugin"),
.testTarget(
name: "<PLUGIN_CLASS_NAME>Tests",
dependencies: ["<PLUGIN_CLASS_NAME>"],
path: "ios/PluginTests")
]
)<SPM_IOS_VERSION>13<SPM_PACKAGE_NAME>CapawesomeCapacitorAppReview<PLUGIN_CLASS_NAME>AppReviewPlugin<CAPACITOR_MAJOR_VERSION>6<ADDITIONAL_PACKAGE_DEPENDENCIES>.package(url: "<repo_url>", <version_requirement>)<ADDITIONAL_TARGET_DEPENDENCIES>.product(name: "<ProductName>", package: "<package-name>")ios/Plugin/<PluginClassName>.swiftCAPBridgedPlugin @objc(<PluginClassName>)
-public class <PluginClassName>: CAPPlugin {
+public class <PluginClassName>: CAPPlugin, CAPBridgedPlugin {
+ public let identifier = "<PluginClassName>"
+ public let jsName = "<JS_NAME>"
+ public let pluginMethods: [CAPPluginMethod] = [
+ CAPPluginMethod(name: "<method1>", returnType: CAPPluginReturnPromise),
+ CAPPluginMethod(name: "<method2>", returnType: CAPPluginReturnPromise)
+ ]<PluginClassName>AppReviewPlugin<JS_NAME>.mCAP_PLUGINAppReviewpluginMethods.mCAP_PLUGIN_METHODios/Plugin/<PluginClassName>.h<PluginClassName>.mCAPBridgedPluginios/Plugin.xcodeproj/project.pbxproj<PluginClassName>.hPBXBuildFilePBXFileReferencePBXGroupPBXHeadersBuildPhase<PluginClassName>.mPBXBuildFilePBXFileReferencePBXGroupPBXSourcesBuildPhase.pbxproj.gitignore.gitignore # iOS files
+Package.resolved
+/.build
+/Packages
+.swiftpm/configuration/registries.json
+.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
+.netrc.gitignorePodsPodfile.lockpackage.jsonpackage.json"Package.swift"files "ios/Plugin/",
- "<PodName>.podspec"
+ "<PodName>.podspec",
+ "Package.swift"
],ios:spm:installscripts "ios:pod:install": "cd ios && pod install --repo-update && cd ..",
+ "ios:spm:install": "cd ios && swift package resolve && cd ..",ios:pod:installios:spm:installnpm installpackage.json.pbxprojCAPBridgedPlugin@capacitor/corecapacitor-swift-pmswift package resolvePackage.swiftios/Pluginios/PluginTestsios/PluginTests.testTargetPackage.swift.swift.mCAPPluginReturnNoneCAPPluginReturnPromisepluginMethods