К основному содержанию
скилл CX Codex

capacitor-app-upgrade-v5-to-v6 — скилл для Claude Code: апгрейд

Ведёт приложение на Capacitor с версии 5 на 6: запускает npx cap migrate, потом добивает ручной чеклист по Android и iOS.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Cap-go/capgo-skills --skill capacitor-app-upgrade-v5-to-v6 -a claude-code
Открыть на GitHub

Что делает capacitor-app-upgrade-v5-to-v6

Скилл включается, когда @capacitor/core в проекте стоит 5.x, а нужен 6.x. Сначала он смотрит снапшот package.json и показывает текущие версии пакетов @capacitor/*, чтобы вы не гадали, с какой ветки начинать.

Дальше процедура такая: решить судьбу androidScheme до миграции, поставить @capacitor/cli@latest-6 и прогнать npx cap migrate, разобрать шаги, которые миграция пометила как проваленные. Потом правки по платформам: на Android — AGP 8.2.1, Gradle 8.2.1, compileSdk вместо compileSdkVersion, SDK 34; на iOS — регистрация локальных плагинов через подкласс CAPBridgeViewController и возврат зума через zoomEnabled: true, если приложение на пинч-зум опиралось.

Главная ловушка — смена схемы. В Capacitor 6 существующие приложения по умолчанию переезжают на https, а это другой origin для WebView: localStorage, IndexedDB, куки и service workers из установленной сборки становятся недоступны. Если androidScheme сейчас не задан, скилл советует прописать server: { androidScheme: "http" }, чтобы не потерять данные. Ещё addListener теперь возвращает только Promise<PluginListenerHandle>, так что старый h.remove() не соберётся — нужен await. Заранее понадобятся Node.js 18+, Xcode 15.0+, Android Studio Hedgehog 2023.1.1+, JDK 17.

Какие задачи решает

  • перевести приложение с Capacitor 5 на 6 без ручного перебора breaking changes
  • сохранить localStorage и куки у пользователей Android после апгрейда
  • починить локальный iOS-плагин, который после обновления отвечает «not implemented»
  • исправить ошибку компиляции вокруг addListener(...).remove
  • обновить Gradle, AGP и compileSdk под требования Capacitor 6

Примеры запросов агенту

  • Проверь, что у меня @capacitor/core 5.x, и проведи апгрейд до 6 по чеклисту
  • После обновления на Android пользователей выкинуло из аккаунтов — что чинить?
  • Мой локальный iOS-плагин пишет plugin is not implemented on ios, зарегистрируй его правильно

Как установить capacitor-app-upgrade-v5-to-v6

1Через Skills CLI (Vercel)

npx skills add Cap-go/capgo-skills --skill capacitor-app-upgrade-v5-to-v6 -a claude-code

2Вручную: положить файлы

~/.claude/skills/capacitor-app-upgrade-v5-to-v6/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/capacitor-app-upgrade-v5-to-v6/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о capacitor-app-upgrade-v5-to-v6

Как установить capacitor-app-upgrade-v5-to-v6 в Claude?

Одной командой: npx skills add Cap-go/capgo-skills --skill capacitor-app-upgrade-v5-to-v6 -a claude-code. Скилл окажется в ~/.claude/skills/capacitor-app-upgrade-v5-to-v6/SKILL.md.

Что делает этот скилл?

Проводит миграцию Capacitor-приложения с 5 на 6: запускает npx cap migrate, затем закрывает ручные пункты по Android и iOS и проверяет результат сборкой.

Почему после апгрейда на Android пропали данные пользователей?

Capacitor 6 переводит существующие приложения на схему https по умолчанию, а смена схемы меняет origin WebView. Верните прежнее значение androidScheme, и localStorage с куками снова станут доступны.

Исходный текст

SKILL.md · MIT
---
name: capacitor-app-upgrade-v5-to-v6
description: Upgrades a Capacitor app from v5 to v6 using `npx cap migrate` from `@capacitor/cli@latest-6`, then the manual checklist - Node 18+, Xcode 15+, Android Studio Hedgehog, AGP 8.2.1, Gradle 8.2.1, compile/target SDK 34, `compileSdkVersion` to `compileSdk`, the `androidScheme` default flipping to `https` (data loss risk), iOS local plugins no longer auto-registered, iOS zoom disabled by default, and official plugin breaking changes (`addListener` returns only a Promise, Camera Photo Picker, Filesystem ctime/mtime numbers). Use when `@capacitor/core` is 5.x and the target is 6.x, or after the upgrade users are logged out on Android, a custom iOS plugin is "not implemented", or `addListener(...).remove` no longer compiles. Do not use for other major versions, plugin library upgrades, or non-Capacitor apps.
allowed-tools:
  - Bash(node -e *)
---

# Capacitor App Upgrade v5 to v6

Move a Capacitor 5 app to Capacitor 6. Source of truth: https://capacitorjs.com/docs/updating/6-0

## When to Use

- `@capacitor/core` in the snapshot below is `5.x` and the user wants `6.x`.
- After upgrading: Android users lose localStorage/cookies, a local (non-npm) iOS plugin reports `"<Name>" plugin is not implemented on ios`, pinch-zoom stopped working on iOS, or TypeScript errors around `addListener`.
- The user asks for the exact 5 -> 6 checklist.

Do not use:

- App on 4.x -> `capacitor-app-upgrade-v4-to-v5` first. On 6.x -> `capacitor-app-upgrade-v6-to-v7`. Multi-hop planning -> `capacitor-app-upgrades`.
- Plugin library upgrade -> `capacitor-plugin-upgrade-v5-to-v6`.
- Moving iOS from CocoaPods to SPM (experimental in 6) -> `cocoapods-to-spm`.

## Live Project Snapshot

Current Capacitor packages from `package.json`:
!`node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const out=[];for(const section of ['dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"`

## References

Only load a reference when its topic is in play.

| File | Load when |
| --- | --- |
| `references/android.md` | Editing `variables.gradle`, `build.gradle`, wrapper, or Kotlin by hand |
| `references/plugins.md` | The app uses official `@capacitor/*` plugins or stores `addListener` results |

## Preflight

| Tool | Minimum for Capacitor 6 |
| --- | --- |
| Node.js | 18+ (latest LTS recommended) |
| Xcode | 15.0+ |
| Android Studio | Hedgehog 2023.1.1+ |
| Java (Gradle JDK) | 17 |
| AGP / Gradle | 8.2.1 / 8.2.1 |
| Android SDK | minSdk 22, compileSdk 34, targetSdk 34 |
| iOS deployment target | 13.0 (unchanged) |

```bash
node -v && xcodebuild -version && java -version
git status --short
grep -rn "androidScheme" capacitor.config.*   # decide the scheme BEFORE migrating
```

## Procedure

1. Confirm 5.x from the snapshot.
2. **Decide `androidScheme` first** (judgement call, ask the user if unclear). Capacitor 6 defaults existing apps to `https`. Changing scheme changes the WebView origin, so localStorage, IndexedDB, cookies and service workers from the installed app are no longer readable.
   - No `androidScheme` set today -> add `server: { androidScheme: "http" }` to keep user data.
   - Already `"https"` -> the entry can be removed.
3. Run the automated migration:

   ```bash
   npm i -D @capacitor/cli@latest-6
   npx cap migrate
   ```

   Read the output and finish every step it reports as failed.
4. **iOS**:
   - Plugin classes are no longer auto-registered. npm plugins are handled by the CLI-generated list. Local plugins written in the app target (custom code guide) need a `CAPBridgeViewController` subclass that overrides `capacitorDidLoad()` and calls `bridge?.registerPluginInstance(MyPlugin())`, and `Main.storyboard` must use that subclass as the view controller's custom class.
   - Zoom is disabled by default. If the app relied on pinch zoom, set `zoomEnabled: true` in the Capacitor config.
5. **Android**: apply `references/android.md` (AGP 8.2.1, Gradle 8.2.1, google-services 4.4.0, `compileSdk`, Kotlin 1.9.10).
6. Update all `@capacitor/*` plugins to `^6.0.0` and community plugins to their Capacitor 6 releases. Fix code per `references/plugins.md`.
7. Run verification.

## Traps

- `addListener` now returns only `Promise<PluginListenerHandle>`. `const h = Plugin.addListener(...); h.remove()` no longer compiles; use `const h = await Plugin.addListener(...)`.
- Camera now uses the Android Photo Picker. Gallery cancel rejects with `"User cancelled photos app"` on Android, like other platforms; update error matching.
- Filesystem `stat()` on iOS returns `ctime` / `mtime` as numbers, not strings.
- Do not remove `READ_MEDIA_IMAGES` / storage permissions if `saveToGallery: true` or another plugin needs them.

## Verification

```bash
grep -rn "androidScheme" capacitor.config.*                 # explicit decision recorded
grep -n "compileSdkVersion rootProject" android/app/build.gradle   # expect none (now compileSdk)
grep -n "gradle:8.2.1\|google-services:4.4.0" android/build.gradle
grep -n "distributionUrl" android/gradle/wrapper/gradle-wrapper.properties   # gradle-8.2.1
grep -n "SdkVersion" android/variables.gradle                # 22 / 34 / 34
grep -rnE "= *[A-Za-z]+\.addListener\(" src/                 # each must be awaited
grep -rn "registerPluginInstance" ios/App/App/               # present if the app has local plugins
npx cap sync
cd android && ./gradlew assembleDebug
```

Build and launch iOS in Xcode 15+. On a device that had the v5 build installed, upgrade in place and confirm login/localStorage survived.

## Error Handling

| Error | Fix |
| --- | --- |
| `Migrate can only be used on capacitor 5 and above, please use the CLI in Capacitor 5 to upgrade to 5 first` | Run `capacitor-app-upgrade-v4-to-v5` first. |
| `Capacitor 6 requires JDK 17 or higher. Some steps may fail.` | Set Gradle JDK to 17+. |
| `Unable to find "<text>" in <file>. Try updating it manually` | Apply the diff from `references/android.md`. |
| `"<Plugin>" plugin is not implemented on ios` (local plugin) | Register it in a `CAPBridgeViewController` subclass (step 4). |
| `Property 'remove' does not exist on type 'Promise<PluginListenerHandle>'` | `await` the `addListener` call. |
| Users logged out / data gone on Android | Scheme changed. Restore the previous `androidScheme` value. |

© Cap-go · MIT · Cap-go/capgo-skills

Похожие скиллы

Всё по теме «Мобильная разработка» →
capacitor-app-upgrades capawesome-team Ведёт агента через обновление Capacitor-проекта до новой мажорной версии, включая прыжки через несколько версий. Пригодится, когда пора перейти с 4 на 8 и не хочется разбираться в миграции вручную. CX Codex +1 902установок capacitor-app-creation capawesome-team Скилл ведёт агента по шагам при создании Capacitor-приложения с нуля: каркас веб-проекта, настройка, нативные платформы, запуск. CX Codex +1 820установок agp-9-upgrade Google LLC Ведёт Android-проект с AGP 8 на Android Gradle Plugin 9: поднимает зависимости, переводит сборку на встроенный Kotlin и новый DSL. CX Codex +1 1 200установок play-billing-library-version-upgrade Google LLC Скилл ведёт Android-проект с устаревшей Google Play Billing Library до актуальной стабильной версии. Он сам находит зависимость в Gradle и проверяет сборку после каждого шага. CX Codex +1 1 900установок upgrade-react-native react-native-community Обновляет проекты React Native Community CLI на заданную версию через diff-файлы React Native Upgrade Helper. CX Codex +1 1 300установок mobile-app-debugging secondsky Скилл для отладки iOS, Android и кроссплатформенных приложений: падения, утечки памяти, просадки FPS, сетевые проблемы. CX Codex +1 428установок

Из того же набора29

capgo-release-management Скилл ведёт релизы Capgo из CLI: загрузка бандлов, каналы, постепенный выкат, откат и шифрование. Пригодится, когда релиз ломается на загрузке или нужно откатить бандл. CX Codex +1 705установок capacitor-app-upgrade-v7-to-v8 Ведёт приложение на Capacitor 7 к восьмой версии: сначала npx cap migrate, потом ручной чек-лист по iOS и Android. CX Codex +1 704установок webapp-to-capacitor Планирует и выполняет превращение веб-приложения, PWA или SPA в приложение под iOS и Android на Capacitor, которое проходит ревью магазинов. CX Codex +1 665установок ionic-appflow-migration Переводит Ionic или Capacitor проект с Ionic Appflow на Capgo: живые обновления, сборки и публикация в стор. CX Codex +1 653установок capacitor-app-upgrade-v6-to-v7 Ведёт приложение на Capacitor с версии 6 на 7: сначала автоматическая миграция, потом ручной чек-лист по iOS, Android и плагинам. CX Codex +1 643установок capacitor-app-upgrade-v4-to-v5 Скилл ведёт приложение на Capacitor 4 к версии 5: запускает npx cap migrate, добивает пропущенное вручную и проверяет сборку. CX Codex +1 639установок capacitor-plugin-upgrade-v4-to-v5 Ведёт плагин Capacitor с версии 4 на 5: запускает официальный мигратор, потом добивает Gradle, Java 17 и правки в коде. CX Codex +1 634установок capacitor-plugin-upgrade-v5-to-v6 Ведёт плагин Capacitor с версии 5 на 6: запускает официальный мигратор, потом добивает ручной чек-лист по Gradle, Kotlin и TypeScript. CX Codex +1 633установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой