Verify ios/App/App/capacitor.config.json contains the plugin class in packageClassList after npx cap sync ios.
For monorepo local path dependencies, validate Package.swift paths from the real consumer entrypoint (node_modules/...), not just from the plugin folder itself.
Prefer official patterns from create-capacitor-plugin, Capacitor docs, and Capawesome plugins before introducing custom packaging behavior.
If Xcode shows Missing package product 'CapApp-SPM', inspect the real SwiftPM resolution error first; it is usually a downstream symptom.
Commands
cd apps/capacitor-demo
npm run cap:sync
open "ios/App/App.xcodeproj"
xcodebuild -resolvePackageDependencies -project "apps/capacitor-demo/ios/App/App.xcodeproj"
Resources
OpenCode skills docs: use .opencode/skills/<name>/SKILL.md or compatible .agents/skills/<name>/SKILL.md
Capacitor official plugin template: create-capacitor-plugin
1---2name: ddgutierrezc-legato-capacitor-ios-spm3description: When to Use4---56## When to Use78- When adding or fixing a Capacitor iOS plugin that must work with `npx cap sync ios`9- When `CapApp-SPM`, `packageClassList`, or `UNIMPLEMENTED` issues appear on iOS10- When comparing a local plugin package against official Capacitor / Capawesome SPM conventions1112## Critical Patterns1314- Follow the official Capacitor plugin SPM shape: standard `.library(...)`, no custom `type: .dynamic` unless proven necessary by upstream docs.15- Treat `ios/App/CapApp-SPM/Package.swift` as CLI-generated — never hand-edit it.16- The effective package/product naming is whatever `CapApp-SPM` requests; `Package.swift` in the plugin must expose the exact same package/product names.17- Keep plugin discovery class-based: `@objc(PluginClassName)` + `CAPPlugin, CAPBridgedPlugin` + `identifier`, `jsName`, `pluginMethods`.18- Verify `ios/App/App/capacitor.config.json` contains the plugin class in `packageClassList` after `npx cap sync ios`.19- For monorepo local path dependencies, validate `Package.swift` paths from the real consumer entrypoint (`node_modules/...`), not just from the plugin folder itself.20- Prefer official patterns from `create-capacitor-plugin`, Capacitor docs, and Capawesome plugins before introducing custom packaging behavior.21- If Xcode shows `Missing package product 'CapApp-SPM'`, inspect the real SwiftPM resolution error first; it is usually a downstream symptom.2223## Commands2425```bash26cd apps/capacitor-demo27npm run cap:sync28open "ios/App/App.xcodeproj"29xcodebuild -resolvePackageDependencies -project "apps/capacitor-demo/ios/App/App.xcodeproj"30```3132## Resources3334- OpenCode skills docs: use `.opencode/skills/<name>/SKILL.md` or compatible `.agents/skills/<name>/SKILL.md`35- Capacitor official plugin template: `create-capacitor-plugin`36- Capacitor plugin docs: `https://capacitorjs.com/docs/plugins/creating-plugins`3738---39> Source: [ddgutierrezc/legato](https://github.com/ddgutierrezc/legato) — distributed by [TomeVault](https://tomevault.io).40<!-- tomevault:4.0:skill_md:2026-05-23 -->
Run npx skillmds@latest add tomevault-io/ddgutierrezc-legato-capacitor-ios-spm in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
When to Use It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
tomevault-io (@tomevault-io) published this skill. Their other Agent Skills are listed on their SkillMD profile.