Zielversion
Kopieren Sie einen Einrichtungsprompt mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin.
Diese Anleitung erklärt, wie man automatisch den neuesten kompatiblen Bundle an Benutzer liefert, basierend auf ihrer nativen Appversion, ähnlich wie Ionic AppFlows Ansatz. Dies sichert eine vereinfachte Updateverwaltung und schnellere Rollouts, während gleichzeitig Kompatibilitätsprobleme verhindert werden.
Übersicht
Abschnitt mit dem Titel „Übersicht“Capgo’s Versionsziel-System ermöglicht Ihnen:
- Kompatible Updates automatisch bereitzustellen für Benutzer auf der Grundlage ihrer native App-Version
- Vermeidung von Änderungen, die die App unbrauchbar machen von inkompatiblen App-Versionen
- Verwaltung mehrerer App-Versionen gleichzeitig ohne komplexes Logik
- Störungsfreie Bereitstellung von Updates für bestimmte Benutzersegmente
Warum Versionen Zielgruppe haben (Besonders für AppFlow-Nutzer)
Überschrift: “Warum Versionen Zielgruppe haben (Besonders für AppFlow-Nutzer)”Wenn Sie mit “Ionic AppFlow” vertraut sind, wissen Sie, wie wichtig es ist, sicherzustellen, dass Benutzer nur kompatible Updates erhalten. AppFlow hat automatisch Live-Update-Bundles an native App-Versionen angepasst, um inkompatible JavaScript-Code nicht an ältere native __CAPGO_KEEP_0__ zu liefern.code bietet die gleichen Sicherheitsgarantien
Capgo provides the same safety guaranteesMehr detaillierte Kontrolle über die Versionsabstimmung
- Mehrere Strategien (Kanäle, semver, native Einschränkungen)
- Bessere Sichtbarkeit in die Versionsverteilung
- __CAPGO_KEEP_0__ und __CAPGO_KEEP_1__ werden zusammen mit der Dashboard-Verwaltung gesteuert
- API and CLI control alongside dashboard management
Wenn Sie ältere native __CAPGO_KEEP_0__ haben
- Sie haben Benutzer auf verschiedenen Hauptversionen Ihrer App (z.B. v1.x, v2.x, v3.x).
- Sie müssen die Rückwärtskompatibilität aufrechterhalten, während Sie die Auswirkungen aufbrechende Änderungen umsetzen.
- Sie möchten verhindern, dass neuere Bundles ältere native code brechen.
- Sie migrieren die Benutzer allmählich von einer Version zur anderen
- Sie migrieren von AppFlow und möchten die gleiche Sicherheit bei Updates aufrechterhalten
Wie es funktioniert
Abschnitt mit dem Titel „Wie es funktioniert“Capgo verwendet eine mehrschichtige Ansatz, um Benutzer mit kompatiblen Updates zu verbinden:
- Nativversionseinschränkungen: Verhindere, dass Bundles an inkompatible native Versionen geliefert werden
- Kanalbasierte Routing: Routen Sie verschiedene App-Versionen zu verschiedenen Update-Kanälen
- Semantic Versioning Kontrolle: Aktualisierungen automatisch über die Grenzen von Major/Minor/Patch blockieren
- Geräteebene-Überschreibungen: Ziel spezifische Geräte oder Benutzergruppen
Versionen-Übereinstimmungs-Fluss
Abschnitt mit dem Titel “Versionen-Übereinstimmungs-Fluss”graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check defaultChannel in App} D -->|Has defaultChannel| E[Use App's defaultChannel] D -->|No defaultChannel| F[Use Cloud Default Channel] C --> G{Check Version Constraints} E --> G F --> G G -->|Compatible| H[Deliver Update] G -->|Incompatible| I[Skip Update]Strategie 1: Channel-basierte Versionen-Route
Abschnitt mit dem Titel “Strategie 1: Channel-basierte Versionen-Route”Dies ist die empfohlene Vorgehensweise für das Management von Änderungen und großen Versionsupdates. Es ähnelt dem AppFlow-Delivery-Modell.
Beispiel-Szenario
Abschnitt mit dem Titel "Beispiel-Szenario"- App v1.x (100.000 Nutzer) →
productionKanal - App v2.x (50.000 Nutzer mit Änderungen, die zum Absturz führen) →
v2Kanal - App v3.x (10.000 Beta-Nutzer) →
v3Kanal
Implementierung
Abschnitt: ImplementierungSchritt 1: Konfigurieren Sie Kanäle für jede Hauptversion
Abschnitt: Schritt 1: Konfigurieren Sie Kanäle für jede Hauptversion// capacitor.config.ts for version 1.x buildsimport { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'production', // or omit for default } }};
export default config;// capacitor.config.ts for version 2.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v2', // Routes v2 users automatically } }};// capacitor.config.ts for version 3.x buildsconst config: CapacitorConfig = { appId: 'com.example.app', appName: 'Example App', plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v3', // Routes v3 users automatically } }};Schritt 2: Erstellen von Kanälen
Abschnitt: Schritt 2: Erstellen von Kanälen# Create channels for each major versionnpx @capgo/cli channel create productionnpx @capgo/cli channel create v2npx @capgo/cli channel create v3
# Enable self-assignment so apps can switch channelsnpx @capgo/cli channel set production --self-assignnpx @capgo/cli channel set v2 --self-assignnpx @capgo/cli channel set v3 --self-assignSchritt 3: Hochladen von Versionsspezifischen Paketen
Abschnitt mit dem Titel „Schritt 3: Hochladen von Versionsspezifischen Paketen“# For v1.x users (from v1-maintenance branch)git checkout v1-maintenancenpm run buildnpx @capgo/cli bundle upload --channel production
# For v2.x users (from v2-maintenance or main branch)git checkout mainnpm run buildnpx @capgo/cli bundle upload --channel v2
# For v3.x users (from beta/v3 branch)git checkout betanpm run buildnpx @capgo/cli bundle upload --channel v3- Keine code-Änderungen - Das Routing erfolgt automatisch
- Scharfe Trennung - Jede Version hat seinen eigenen Update-Pipeline
- Flexible Zielgruppen - Aktualisierungen auf spezifische Versionsgruppen pushen
- Sichere Rollouts - Bruchteile werden niemals in inkompatible Versionen geliefert
Strategie 2: Semantische Versionskontrolle
Abschnitt mit dem Titel “Strategie 2: Semantische Versionskontrolle”Verwenden Sie die semantische Versionskontrolle von Capgo , um Aktualisierungen über Versionsgrenzen hinweg zu verhindern
Auto-Update über Hauptversionen deaktivieren
Abschnitt mit dem Titel “Auto-Update über Hauptversionen deaktivieren”# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorDiese Konfiguration bedeutet:
- Benutzer auf der Anwendungsversion 1.2.3 werden Updates bis zu 1.9.9
- Benutzer werden NICHT Version 2.0.0 automatisch
- Verhindert, dass sich ältere native code durch Bruchänderungen beeinträchtigen
Granulares Kontrollmöglichkeiten
Abschnitt mit dem Titel „Granulares Kontrollmöglichkeiten“# Block minor version updates (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block patch updates (1.2.3 won't get 1.2.4)npx @capgo/cli channel set stable --disable-auto-update patch
# Allow all updatesnpx @capgo/cli channel set stable --disable-auto-update noneAbschnitt: Strategie 3: Native Version Constraints
Legen Sie die Mindestanforderungen an die native Version für Bundles fest, um die Lieferung an inkompatible Geräte zu verhindern.Mit nativeVersion Delay Condition
Abschnitt: Mit nativeVersion Delay Condition
Wenn Sie ein Bundle hochladen, können Sie eine Mindestanforderung an die native Version festlegen:Terminalfenster
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Anwendungsfälle
Abschnitt mit dem Titel “Anwendungsfälle”-
Neuer Native-Plugin erforderlich
Terminal-Fenster # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Native API-Änderungen
Terminal-Fenster # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Schrittweise Migration
Terminalfenster # Test bundle only on latest native versionnpx @capgo/cli bundle upload \--channel beta \--native-version "2.5.0"
Strategie 4: Vermeidung von automatischen Downgrades
Abschnitt mit dem Titel „Strategie 4: Vermeidung von automatischen Downgrades“Verhindere, dass Benutzer Pakete erhalten, die älter sind als ihre aktuelle native Version.
Aktivieren Sie in den Kanal-Einstellungen
In der __CAPGO_KEEP_0__-Oberfläche:In the Capgo dashboard:
- Kanäle → Wählen Sie Ihren Kanal aus Aktivieren
- In der __CAPGO_KEEP_0__-Oberfläche: → Kanäle → Wählen Sie Ihren Kanal aus “Automatisches Herunterstufen unter Native deaktivieren”
- Änderungen speichern
Oder über CLI:
npx @capgo/cli channel set production --disable-downgradeBeispiel
Beispiel- Gerät des Benutzers: Native-Version 1.2.5
- Kanalbundle: Version 1.2.3
- ErfolgUpdate wird blockiert (würde zu einer Herunterstufung führen)
Dies ist nützlich, wenn:
- Benutzer haben eine neuere Version manuell aus dem App Store installiert
- Sie müssen sicherstellen, dass die Benutzer immer die neuesten Sicherheitspatches haben
- Sie möchten Regressionsfehler verhindern
Strategie 5: Geräteebene-Zielgruppierung
Überschrift “Strategie 5: Geräteebene-Zielgruppierung”Überschreiben Sie die Kanalzuweisung für bestimmte Geräte oder Benutzergruppen
Zwingen Sie eine spezifische Version für die Testung
Überschrift “Zwingen Sie eine spezifische Version für die Testung”import { CapacitorUpdater } from '@capgo/capacitor-updater'
// Force beta testers to use v3 channelasync function assignBetaTesters() { const deviceId = await CapacitorUpdater.getDeviceId()
// Check if user is beta tester if (isBetaTester(userId)) { await CapacitorUpdater.setChannel({ channel: 'v3' }) }}Übersicht Geräteüberschreibung
Überschrift “Übersicht Geräteüberschreibung”In der Capgo-Übersicht:
- Zu Geräte → Gerät finden
- Klicken Kanal setzen oder Version setzen
- Überschreiben mit spezifischem Kanal oder Bundle-Version
- Das Gerät erhält Updates von der überschriebenen Quelle
Vollständiger AppFlow-Workflow
Abschnitt mit dem Titel „Vollständiger AppFlow-Workflow“Hier ist ein vollständiges Beispiel, das alle Strategien kombiniert:
1. Initialisierung (App v1.0.0)
Abschnitt mit dem Titel „1. Initialisierung (App v1.0.0)“# Create production channel with semver controlsnpx @capgo/cli channel create production \ --disable-auto-update major \ --disable-downgradeconst config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'production', } }};2. Freigabe von Änderungen (App v2.0.0)
Abschnitt mit dem Titel „2. Freigabe von Änderungen (App v2.0.0)“# Create v2 channel for new versionnpx @capgo/cli channel create v2 \ --disable-auto-update major \ --disable-downgrade \ --self-assign
# Create git branch for v1 maintenancegit checkout -b v1-maintenancegit push origin v1-maintenance// capacitor.config.ts for v2.0.0const config: CapacitorConfig = { plugins: { CapacitorUpdater: { autoUpdate: true, defaultChannel: 'v2', // New users get v2 channel } }};3. Aktualisierungen auf beide Versionen pushen
Abschnitt mit dem Titel „3. Aktualisierungen auf beide Versionen pushen“# Update v1.x users (bug fix)git checkout v1-maintenance# Make changesnpx @capgo/cli bundle upload \ --channel production \ --native-version "1.0.0"
# Update v2.x users (new feature)git checkout main# Make changesnpx @capgo/cli bundle upload \ --channel v2 \ --native-version "2.0.0"4. Versionen verteilen
Abschnitt mit dem Titel „4. Versionen verteilen“Verwende das Capgo-Dashboard, um zu überwachen:
- Wie viele Benutzer sind auf v1 vs v2
- Zuordnungsquoten pro Version
- Fehler oder Abstürze pro Version
5. Veraltetes Version deaktivieren
Abschnitt mit dem Titel “5. Veraltetes Version deaktivieren”Wenn die Verwendung von v1 unter der Schwellenwert liegt:
# Stop uploading to production channel# Optional: Delete v1 maintenance branchgit branch -d v1-maintenance
# Move all remaining users to default# (They'll need to update via app store)Kanal-Vorrang
Abschnitt mit dem Titel “Kanal-Vorrang”Wenn mehrere Kanal-Konfigurationen existieren, verwendet Capgo folgende Vorrangfolge:
- Geräte-Übernahme (Dashboard oder API) - Höchster Priorität
- Cloud-Übernahme via
setChannel()rufen - Standardkanal in capacitor.config.ts
- Standardkanal (Cloud-Einstellung) - Niedrigste Priorität
Gute Praktiken
Abschnitt mit dem Titel „Best Practices”1. Stellen Sie immer defaultChannel für Hauptversionen fest
Abschnitt mit dem Titel „1. Stellen Sie immer defaultChannel für Hauptversionen fest”// ✅ Good: Each major version has explicit channel// v1.x → production// v2.x → v2// v3.x → v3
// ❌ Bad: Relying on dynamic channel switching// All versions → production, switch manually2. Verwenden Sie semantische Versionsierung
Abschnitt mit dem Titel „2. Verwenden Sie semantische Versionsierung”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Halten Sie separate Branches
Abschnitt mit dem Titel „3. Halten Sie separate Branches”# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Vor dem Rollout testen
Abschnitt mit dem Titel „4. Vor dem Rollout testen“# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Versionen verfolgen
Abschnitt mit dem Titel „5. Versionen verfolgen“Überprüfen Sie regelmäßig Ihre Dashboard:
- Stellen sich die Benutzer auf neue native Versionen um?
- Bekommen alte Versionen noch viel Traffic?
- Sollten Sie alte Kanäle deaktivieren?
Vergleich mit Ionic AppFlow
Abschnitt mit dem Titel „Vergleich mit Ionic AppFlow“Für Teams, die von Ionic AppFlowhier ist, wie die Version für Capgo vergleicht:
| Funktion | Ionic AppFlow | Capgo |
|---|---|---|
| Version-basierte Routing | Automatische basierend auf nativer Version | Automatische via defaultChannel + mehrere Strategien |
| Semantische Versionsnummer | Grundlegende Unterstützung | Erweitert mit --disable-auto-update (Major/Minor/Patch) |
| Native Versionenbeschränkungen | Manuelle Konfiguration in AppFlow-Dashboard | Eingebaut --native-version Flagge in CLI |
| Kanalverwaltung | Web-UI + CLI | Web-UI + CLI + API |
| Geräteüberschreibungen | Eingeschränkte Geräteebene-Kontrolle | Vollständige Kontrolle über Dashboard/API |
| Automatisches Downgradeprevention | Ja | Ja über --disable-downgrade |
| Multi-Version-Wartung | Manuelle Branchen- und Kanalverwaltung | Automatisiert mit Vorrang des Kanals |
| Selbsthosting | Nein | Ja (vollständige Kontrolle) |
| Versionen-Analyse | Grundlegend | Detaillierte pro-Version-Metriken |
Abschnitt 'Fehlersuche'
Benutzer erhalten keine UpdatesAbschnitt 'Benutzer erhalten keine Updates'
Überprüfen Sie Folgendes:Kanalzuweisung
-
: Überprüfen Sie, ob das Gerät auf der richtigen Kanal ist: Überprüfen Sie, ob das Gerät auf der richtigen Kanal ist
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Versionseinschränkungen: Überprüfe, ob das Bundle native Versionseinschränkungen hat
- Zur Dashboard → Bundles → Überprüfe die Spalte „Native Version“
-
Semver-Einstellungen: Überprüfe die Einstellungen des Kanals
disable-auto-updateTerminalfensterZur Zwischenablage kopieren npx @capgo/cli channel list -
: Überprüfe, ob das Gerät eine manuelle Überschreibung hatZur Dashboard → Geräte → Suche nach Gerät → Überprüfe Kanal/Versoin
- setting
Fehlerhaftes Bundle wurde zur falschen Version geliefert
Abschnitt: Fehlerhaftes Bundle wurde zur falschen Version geliefert- Überprüfen Sie die Standardkanal: Stellen Sie sicher, dass der richtige Kanal
capacitor.config.ts - Überprüfen Sie das Bundle-Upload: Bestätigen Sie, dass das Bundle zum beabsichtigten Kanal hochgeladen wurde
- Überprüfen Sie die Native Version: Bestätigen Sie, dass die Flagge richtig verwendet wurde
--native-versionÄnderungen, die alte Versionen betreffen
Abschnitt: Änderungen, die alte Versionen betreffen
Eilmaßnahmen- Abschnitt: Eilmaßnahmen: Geräte überschreiben, um das Bundle zu sichern
- Zentrale Oberfläche → Geräte → Mehrere Geräte auswählen → Version setzen
- Langfristige Lösung: Erstelle kanalisierte Versionen und halte separate Branchen
- Prävention: Teste Updates immer auf repräsentativen Geräten vor der Rollout
Migration von Ionic AppFlow
Abschnitt mit dem Titel “Migration von Ionic AppFlow”Wenn Sie von Ionic AppFlow migrieren Ionic AppFlow, Versionen zielen in Capgo, ähnlich wie zuvor, aber mit mehr Flexibilität:
Konzeptkarte
Konzeptabbildung| AppFlow-Konzept | Capgo Äquivalent | Hinweise |
|---|---|---|
| Veröffentlichungs-Kanal | Capgo Kanal | Das gleiche Konzept, aber mächtiger |
| Native Versionssperre | --native-version Flagge | Mehr detailierte Kontrolle |
| Kanalpriorität | Kanalvorrang (Übergeordnet → Cloud → Standard) | Mehr transparente Vorrangigkeit |
| Ziel für die Bereitstellung | Kanal + semver steuert | Mehrere Strategien verfügbar |
| Produktionskanal | production Kanal (oder beliebiger Name) | Flexible Namensgebung |
| Git-basierte Bereitstellung | CLI Paket hochladen von Branch | Selbe Workflow |
| Automatische Versionsübereinstimmung | defaultChannel + Versionsbeschränkungen | Verbessert mit mehreren Strategien |
Schlüsselunterschiede für AppFlow-Nutzer
Abschnitt mit dem Titel „Schlüsselunterschiede für AppFlow-Nutzer“- Mehr Kontrolle: Capgo bietet Ihnen mehrere Strategien (Kanäle, semver, native Version), die kombiniert werden können
- Bessere Sichtbarkeit: Das Dashboard zeigt die Versionsverteilung und Kompatibilitätsprobleme
- API-Zugriff: Vollständige programmatische Kontrolle über die Versionszielsetzung
- Selbst-Hosting: Option, Ihren eigenen Update-Server mit gleicher Versionslogik zu betreiben
Migrationschritte
Schritt-für-Schritt-Migration- Karten Sie Ihre AppFlow-Kanäle zu Capgo-Kanälen (üblicherweise 1:1)
- Setzen Sie
defaultChannelincapacitor.config.tsfür jede Hauptversion - Konfigurieren Sie semver-Regeln wenn Sie eine automatische Blockierung an Versionsgrenzen wünschen
- Hochladen von Versionsspezifischen Paketen mit
--native-versionFlagge - Überwachen Sie die Versionsverteilung in Capgo Dashboard
Fortgeschrittene Muster
Abschnitt mit dem Titel „Fortgeschrittene Muster“Schrittweise Umstellung nach Version
Abschnitt mit dem Titel „Schrittweise Umstellung nach Version“// Gradually migrate v1 users to v2async function migrateUsers() { const deviceId = await CapacitorUpdater.getDeviceId() const rolloutPercentage = 10 // Start with 10%
// Hash device ID to get deterministic percentage const hash = hashCode(deviceId) % 100
if (hash < rolloutPercentage) { // User is in rollout group - migrate to v2 await CapacitorUpdater.setChannel({ channel: 'v2' }) }}Funktionsschalter nach Version
Abschnitt mit dem Titel „Funktionsschalter nach Version“// Enable features based on native versionasync function checkFeatureAvailability() { const info = await CapacitorUpdater.getDeviceId() const nativeVersion = info.nativeVersion
if (compareVersions(nativeVersion, '2.0.0') >= 0) { // Enable features requiring v2.0.0+ enableNewCameraFeature() }}A/B-Testung zwischen Versionen
A/B-Testung über Versionen hinweg// Run A/B tests within same native versionasync function assignABTest() { const nativeVersion = await getNativeVersion()
if (nativeVersion.startsWith('2.')) { // Only A/B test on v2 users const variant = Math.random() < 0.5 ? 'v2-test-a' : 'v2-test-b' await CapacitorUpdater.setChannel({ channel: variant }) }}Zusammenfassung
ZusammenfassungCapgo bietet mehrere Strategien für versionsspezifische Update-Übermittlung:
- Kanalbasierte RoutingAutomatische Versionsabtrennung via __CAPGO_KEEP_0__
defaultChannel - Semantic Versioning: Verhindere Updates über Major/Minor/Patch-Grenzen
- Nativversionseinschränkungen: Mindestnativeversion für Bundles anfordern
- Auto-Downgrade-Verhinderung: Nie ältere Bundles an neuere native Versionen liefern
- Geräteüberschreibungen: Manuelle Kontrolle für Testen und Zielsetzen
Durch die Combination dieser Strategien können Sie AppFlow-Style-aktualisierungen mit noch mehr Flexibilität und Kontrolle erreichen. Wählen Sie die Vorgehensweise, die am besten zu der Versions- und Bereitstellungsworkflow Ihres Apps passt.
Weitere Informationen zu bestimmten Funktionen:
- Breaking Changes Guide - Detaillierte Kanalversionierungstrategie
- Kanalverwaltung - Vollständige Kanal-Konfigurationsreferenz
- Updateverhalten - Verzögertes native Version und Bedingungen