跳过主要内容
Capacitor

Preparing for Capacitor 9: What App and Plugin Teams Can Do Now

Capacitor 9 raises the bar on Node, Xcode, Android Gradle, and deprecated native APIs. Here is how to get ready on Capacitor 8 before you flip the version switch, including Cordova optional sync, CLI live reload, and Capgo OTA store builds.

文章来源

马丁·多纳迪

作者

瓦莱里亚

审稿人

贾登

编辑器

Preparing for Capacitor 9: What App and Plugin Teams Can Do Now

Capacitor 9已在Capacitor上发布 next dist-tag 在逐步接近广泛可用状态的过程中。您不必在 alpha 版发布的那一天就升级您的应用,但 official Capacitor 9 update guide 并 Capacitor 9 插件更新指南 已经明确说明工具链的楼层和API的移除,值得早期解决。

本文是一篇关于Capacitor 9的准备指南。 准备 checklist: work you can do on Capacitor 8 (or on a branch) so the eventual bunx cap migrate 让过渡变得不那么枯燥,而不是痛苦。准备切换时,请逐步遵循上方的Ionic指南。

工具链和平台底座(应用)

规划CI、本地机器和存储管道,围绕这些最低要求:

区域 Capacitor 9要求
Node.js 24+ (推荐使用最新的LTS版本;npm 11附带Node 24)
Xcode 27+
iOS目标 16.0+
安卓 studio 2026.1.1+
Android Gradle插件(AGP) 9.2.1
Gradle包装器 9.5.1

如果您仍在使用 Capacitor 8.4 或更早的 iOS 版本,您还需要 UIScene 生命周期 从 Capacitor 8.5 更新中获取 UIScene 生命周期工作 — Xcode 27 需要它。已经升级到 8.5 的应用程序可以跳过额外的步骤。

在 iOS 上,Swift 6 (与 Xcode 27) 拒绝 @UIApplicationMain; 当您升级时,请将其替换为 @main 在 AppDelegate.swift 如官方指南所述

在应用程序同步时间(不是插件预备步骤)

在 Capacitor 9 中,Cordova 兼容性层 仅在检测到安装的 Cordova 插件时 cap sync 为应用程序Android 在没有插件存在时会丢弃额外的 Gradle 模块;iOS 停止添加 CapacitorCordova 到 Podfile 或 Package.swift 当没有任何内容时。

这是一个 应用级别 行为改变,升级后。您仍在 Cap 8 上时,不需要提前从模板中移除 Cordova。请检查项目中是否有任何 自定义本机 code (您的或 forked 插件)导入 Cordova 符号,而没有实际的 Cordova 插件在项目中 — 这些引用将在 Cordova optional 绑定应用时失败。

Android: gradle.properties 和 AGP 9 默认值

AGP 升级助手经常写入明确的 gradle.properties 标志,以便构建保留 AGP 8 行为。Capacitor 9 应用应该 移除 那些条目而不是将它们带到前进:大多数在AGP 10之前就过时了,某些会破坏Cap 9构建(例如 android.builtInKotlin=false 禁用Kotlin支持,AGP 9捆绑的 android.sdk.defaultTargetSdkToCompileSdkIfUnset=false 阻止AGP从 targetSdkVersion).

当您迁移时,还要预期:

  • 升级 variables.gradle 最小版本(编译/目标SDK 37, minSdkVersion 26,更新的AndroidX版本 — 见官方文档)。
  • 从应用中移除显式 targetSdkVersion 以便AGP 9可以从 build.gradle 声明 compileSdkVersion.
  • 符号在应用的顶部 variables.gradle 符号在应用的顶部 app/build.gradle (Gradle 9.6 已废弃隐式查找,从根项目中)
  • 当前上下一个安全一个为安全的网络。 core-ktx to androidx.core:core 当前上下一个安全一个为安全的网络。 jcenter().

提现不允许的安全为安全的网络。 当前上下一个安全一个为安全的网络。 在 Android 部分并应用同样的清理工作在一个分支上,然后在推送 Capacitor 版本之前。

CLI: cap run --url

Capacitor 9 将 live-reload 主机/端口/HTTPS 标志合并为一个 --url 当前上下一个安全一个为安全的网络。

bunx cap run android -l --host 192.168.1.181 --port 5173

提现不允许的安全为安全的网络。

bunx cap run android --url http://192.168.1.181:5173/

更新脚本和README片段,现在让肌肉记忆不会与升级后的CLI产生冲突。

官方插件:推送和启动屏幕注意事项

在生产应用中经常出现的两个用户界面变化是:

推送通知(iOS): 已弃用的 alert presentation选项已删除。请使用 banner 和/或 list 在您的

启动屏幕(Android): 默认 launchFadeOutDuration 从 200 ms 到 0. If you relied on the fade hiding first paint glitches, set launchFadeOutDuration: 200 明确地在 capacitor.config 直到您调整启动 UI

扫描插件部分在 9.0更新指南 为 AndroidX 和 Google Play 服务版本升级

与您使用的官方插件相关联

如果您发布 Capacitor 插件,它们将在 Capacitor 8 中被消费。 而不破坏 Cap 8 如果您发布 code 插件 已废弃的API移除并

想要 Cap 9-ready __CAPGO_KEEP_0__,专注于

  • 替换 @NativePlugin 为 @CapacitorPlugin 并将遗留的权限/活动结果API迁移到 @PermissionCallback / @ActivityCallback 模式(参见 插件9.0指南 表格)。
  • 移除 PluginCall.hasOption, Plugin.getConfigValue,旧 CapConfig 构造函数和获取器, PluginCall.save() / isSaved(),以及其他Java移除的列表在“code”中的“Breaking changes”。
  • 在iOS上,停止使用 CAPBridge 兼容性类和已弃用的 CAPBridgeProtocol helpers; 使用 ApplicationDelegateProxy, typed PluginCall 从迁移表中获取访问器和桥接属性。
  • Run bunx @capacitor/plugin-migration-v8-to-v9@latest 在Capacitor 9发布之前,保持Cap 8的依赖项,仅保留API的编辑项,直到您发布Cap 9的主要版本。

不要从您的插件中移除 Cordova SPM产品 Package.swift 在您仍然支持Cap 8时不要移除Capacitor。 Cap 8项目期望在您的插件是SPM-基于时使用该依赖项;提前移除它会破坏仍然在8上运行的消费者。将 可选的Cordova / 移除条件的 Cordova 产品 作为 Capacitor 9-only 发布 Cap 9 的线路(或明确文档为 Cap 9+ 的 semver 主版本),在您停止支持 Cap 8 时 — 如 plugin 指南所述,而不是 Cap 8 线路的预备工作。

同样的经验法则适用于升级 capacitor-swift-pm 到 9.0.0-alpha.x 在 Package.swift: 属于您的 Cap 9 主版本,而不是 Cap-8 兼容的发布。

Capgo 实时更新和原生 Cap 9 商店构建

Capgo 提供 web 包 实时更新;原生 shell 仍然来自 App Store 和 Google Play。 当您将应用程序迁移到 Capacitor 9 时:

  1. 发布 至少有一份商店构建 基于 Capacitor 9 编译了 140 个原生项目(iOS 和 Android)。该二进制文件确定了原生基线 Capgo 通道的目标。
  2. 只有当用户手中有该构建后,您才能依赖测试过 Cap 9 WebView 和插件行为的 OTA 包。
  3. 将生产通道置于策略中,并将匹配的 Cap 9 包上传到每个通道中。 metadata 为此有意的原生基线上传, --auto-min-update-version忽略 (原生包应该改变)。保持 --fail-on-incompatible 并 --fail-on-incompatible and --auto-min-update-version 原生 + OTA 通道工作流 保持通道和 SemVer 规则一致,以便您永远不会推送一个假设 Cap 9 API 的包到仍在运行旧式原生 shell 的设备上。.
  4. 如果您使用

策略 Capgo 构建 或您的CI,刷新代理 之前 Cap 9 商店发布之前,管道应与用户安装的匹配: macOS 运行器需要 Node 24+ 和 Xcode 27+; Linux 运行器需要 Node 24+ 和与 AGP 9.2.1 / Gradle 9.5.1 (Xcode仅限macOS).

建议的操作顺序

  1. 升级安装的工具 在CI主机和开发机器上升级到 (Node, Xcode, Android Studio, JDK) 的更高版本。 不要 在Cap 8应用的AGP依赖项、Gradle包装器或其他Android项目文件中 bunx cap migrate 升级到Cap 9值,
  2. 直到 在应用程序code和插件(尤其是自定义) AppDelegate 那些项目更改属于迁移步骤。
  3. 修复应用 __CAPGO_KEEP_0__ 和插件中的过时原生API(特别是自定义 URL处理和Android桥接使用)。gradle.properties清理Android Gradle --url 文件和脚本(包括 ProGuard 默认值,
  4. 审计 Cordova 在应用级别使用 Cordova,直到 Cap 9-only 发布版本发布之前,不要更改插件 SPM Cordova 产品。
  5. 当 Cap 9 GA (或您接受 next) 时,运行 bun add -d @capacitor/cli@next (或 @latest ),然后 bunx cap migrate在发布之后, ,并遵循.
  6. 升级到 9.0 到商店,接着恢复或扩展匹配频道的Capgo OTA升级。

到商店,然后恢复或扩展 Capacitor OTA 滚动更新到匹配的频道。

Capacitor应用的实时更新

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Page/area: Capgo marketing website. Role: Supporting description paragraph or meta description. Seen in: component GetStarted.astro. Preserve Capgo product/brand and developer terms exactly. Message key `instant_updates_for_capacitor_apps_description` (Instant Updates For Capacitor Apps Description).

Capgo 为您提供了创建真正专业的移动应用所需的最佳见解。