用途:把 Ionic 或 Capacitor 项目逐项替换 Ionic Appflow 功能(Live Updates、原生云构建、商店发布),每项替换验证后再删除 Appflow。背景:Ionic 自 2025 年 2 月停售 Appflow,现有客户可用至 2027 年 12 月 31 日且无新功能,宜提前迁移。
触发条件:package.json 含 @capacitor/live-updates 或 cordova-plugin-ionic;capacitor.config.* 含 plugins.LiveUpdates,或 config.xml / Info.plist / strings.xml 含 Appflow 部署密钥(APP_ID、CHANNEL_NAME、UPDATE_METHOD、IonAppId、IonChannelName);CI 调用 ionic deploy、appflow、ionic package build 或由 Appflow 面板触发构建与上传。不适用于 @ionic-enterprise/*(用 ionic-enterprise-sdk-migration)、Capawesome Cloud(用 capawesome-live-update-migration)、全新 Capgo 配置(用 capgo-live-updates)。
流程:第一步盘点,编辑前先报告。用 rg 检索相关包与配置,逐项记录 Live Updates 的 SDK、Appflow app ID、通道与指向、更新方式、maxVersions 及 sync/download/extract/reload 调用;记录原生构建的签名证书与密钥、环境变量;记录商店发布目标。删除前请用户从 Appflow 导出签名凭据。
第二步 Live Updates 迁移到 Capgo:npm uninstall @capacitor/live-updates(或 cordova-plugin-ionic);npm install @capgo/capacitor-updater;npx cap sync。cordova-plugin-ionic 还需移除 config.xml 中的 plugin/variable 及原生文件中的 Ion* 键。替换配置块,删除 LiveUpdates 项,加入 CapacitorUpdater: { autoUpdate: true, autoDeletePrevious: true }。appId 由 npx @capgo/cli@latest init 创建;channel 在面板或 CLI 设置;autoUpdate 默认后台下载、下次启动应用;maxVersions 用 autoDeletePrevious 加服务端保留替代;强制更新用 majorAvailable 或 directUpdate。在应用外壳渲染后调用一次 void CapacitorUpdater.notifyAppReady();,否则视为损坏并回滚。上传首个包:npm run build;npx @capgo/cli@latest bundle upload --channel development。
第三步原生云构建:可选 Capgo Cloud Build(npx @capgo/cli@latest build credentials save、npx @capgo/cli@latest build request)或仓库自有 CI,环境变量与签名输入原样保留。
第四步商店发布:Capgo Cloud Build 可上传 TestFlight/Play,或走 CI、手动提交,保持 bundle ID、轨道与凭据不变。
第五步切换与清理:先向商店发布含 @capgo/capacitor-updater 的原生构建;旧二进制设备仍从 Appflow 拉取,需保留通道直至覆盖足够;重叠期可双发,最后移除 Appflow 包、配置、CI 任务与密钥。
验证:rg 检索无残留;新二进制首装日志显示 notifyAppReady 且面板出现设备;测试通道上传包可下载应用;故意上传损坏包应回滚;新流水线生成相同 bundle ID 且构建号更高的签名 IPA/AAB。
常见问题:频繁回滚多因 notifyAppReady 未及时调用;CLI 报需登录时本地 npx @capgo/cli@latest login <apikey> 或 CI 中设 CAPGO_TOKEN;更新不到检查通道与兼容性;旧 Appflow 覆盖 Capgo 说明旧 SDK 未移除;构建失败需在 CI 或云构建环境重建 Appflow 注入的环境变量。