capacitor-uiscene-migrator

Migrates Capacitor 8.4 iOS apps and plugins to the 8.5 UIScene lifecycle.

2|1|Updated Aug 14, 2026
One-click install
npx skills add https://github.com/gaomingzhao666/capacitor-native-navigation-bar --skill capacitor-uiscene-migrator-gaomingzhao666
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: capacitor-uiscene-migrator
Source: https://github.com/gaomingzhao666/capacitor-native-navigation-bar/tree/main/.claude/skills/capacitor-uiscene-migrator
Command: npx skills add https://github.com/gaomingzhao666/capacitor-native-navigation-bar --skill capacitor-uiscene-migrator-gaomingzhao666

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Capacitor 8.5 adopts the iOS UIScene lifecycle, and the official npx cap migrate CLI only handles projects that still match the stock templates. Projects with hand-rolled SceneDelegates, custom AppDelegate URL handlers, or partially migrated states get skipped with a warning, leaving developers to figure out surgical merges on their own. ## Core Features & Use Cases - Audit-first migration: Scans iOS sources for build-breaking APIs (tmpWindow, TmpViewController), custom application(_:open:) bodies, and AppDelegate lifecycle code that silently stops running under scenes, reporting every finding with file and line before editing. - Surgical merges for partial states: Merges UIApplicationSceneManifest into existing Info.plist files, inserts configurationForConnecting into existing AppDelegates, and adds missing SceneDelegateProxy forwarders without overwriting developer code. - Plugin repo auditing: A dedicated branch for Capacitor plugin authors that checks Swift sources for scene-lifecycle assumptions and enforces the one-plugin-version rule for supporting both 8.4 and 8.5. - Use Case: A developer upgrades to Capacitor 8.5, runs npx cap migrate, and gets a "partial state" warning because their app has a custom SceneDelegate. This skill audits the project, asks about keep-or-remove decisions, merges only the missing pieces, and verifies the build. ## Quick Start Migrate my Capacitor app to the UIScene lifecycle and audit it for anything npx cap migrate skipped.

Frequently Asked Questions about capacitor-uiscene-migrator

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I migrate a Capacitor app to the UIScene lifecycle?▼

Run npx cap migrate with @capacitor/cli 8.5 or newer for template-shaped projects. For partial or customized projects, audit the iOS sources first, then surgically merge the scene manifest, SceneDelegate forwarders, and the configurationForConnecting AppDelegate hook.

What does the CLIENT OF UIKIT REQUIRES UPDATE warning mean in a Capacitor app?▼

The warning means the app has not adopted the UIScene lifecycle, which Capacitor 8.5 supports. Scene adoption is opt-in: adding a UIApplicationSceneManifest to Info.plist plus a SceneDelegate opts the app in, while apps without the manifest keep working on the AppDelegate path.

Why did npx cap migrate skip my project with a partial state warning?▼

The CLI migrator only handles projects matching the stock templates and skips when it detects one or two of the three migration signals: the scene manifest, SceneDelegate.swift, or configurationForConnecting. Partial states require surgical merges that add only the missing pieces without overwriting existing code.

Can one Capacitor plugin version support both 8.4 and 8.5?▼

Yes, if the plugin consumes the legacy capacitorOpenURL notification names, avoids removed APIs like tmpWindow and TmpViewController, avoids 8.5-only APIs like SceneDelegateProxy, and keeps lifecycle handling on UIApplication notifications rather than AppDelegate methods.

Why does my Capacitor app show a black screen after adding a SceneDelegate?▼

The SceneDelegate neither creates a window nor lets a storyboard provide one. Add the window setup in scene(_:willConnectTo:): create a UIWindow from the window scene, set a CAPBridgeViewController as root, and call makeKeyAndVisible.

Does custom application(_:open:) code still run after adopting UIScene?▼

No. Once the scene manifest exists, iOS stops calling application(_:open:options:), application(_:continue:), and the four foreground/background AppDelegate methods. Custom logic in those methods must move to scene(_:openURLContexts:) or scene(_:continue:) in the SceneDelegate.