Version-Ziel
Eine Einrichtungsvorlage mit den Installationsanweisungen und der vollständigen Markdown-Guideline für diesen Plugin kopieren.
Diese Anleitung erklärt, wie Sie automatisch dem Benutzer die neueste kompatible Bundle liefern können, basierend auf ihrer nativen App-Version, ähnlich wie bei Ionic AppFlow’s Ansatz. Dies stellt eine vereinfachte Update-Verwaltung und schnellere Rollouts sicher, während gleichzeitig Kompatibilitätsprobleme verhindert werden.
Übersicht
Abschnitt mit dem Titel „Übersicht“Capgo’s Versionsziel-System ermöglicht Ihnen:
- Automatisch kompatible Updates an Benutzer liefern basierend auf ihrer native App-Version
- Verhindern, dass veraltete Änderungen an inkompatible App-Versionen gelangen
- Mehrfach-App-Versionen ohne komplexes Logik simultan ohne Verwirrung verwalten
- Updates an bestimmten Benutzergruppen warum Versionsziel-System wichtig ist (insbesondere für AppFlow-Nutzer)
Überschrift: warum Versionsziel-System wichtig ist (insbesondere für AppFlow-Nutzer)
Wenn Sie sich mit dem Versionsziel-System vertraut gemacht habenWenn Sie sich mit dem Versionsziel-System vertraut gemacht haben Ionic AppFlowSie wissen, wie wichtig es ist, sicherzustellen, dass Benutzer nur kompatible Updates erhalten. AppFlow matchte automatisch Live-Update-Bundles mit native App-Versionen ab, um inkompatible JavaScript von älteren native code zu verhindern.
Capgo bietet die gleichen Sicherheitsgarantien, mit zusätzlichen Funktionen:
- Feinere Kontrolle über die Versionsabstimmung
- Mehrere Strategien (Kanäle, semver, native Einschränkungen)
- Bessere Sichtbarkeit in die Versionsverteilung
- API und CLI steuern neben Dashboard-Management
Diese Vorgehensweise ist insbesondere dann nützlich, wenn:
- Sie haben Benutzer auf verschiedenen Hauptversionen Ihrer App (z.B. v1.x, v2.x, v3.x)
- Sie müssen die rückwärtskompatible Kompatibilität aufrechterhalten, während Sie Bruchteile ändern
- Sie möchten verhindern, dass neue Pakete ältere native code beschädigen
- Sie migrieren die Benutzer allmählich von einer Version zu einer 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 einen mehrschichtigen Ansatz, um Benutzer mit kompatiblen Updates zu verbinden:
- Native Version Constraints: Verhindern Sie, dass Bundles an inkompatible native Versionen geliefert werden
- Channel-Based Routing: Leiten Sie verschiedene App-Versionen an verschiedene Update-Kanäle weiter
- Semantic Versioning Controls: Blockieren Sie automatisch Updates über Major/Major/Minor-Grenzen
- Geräte-Ebene Überschreibungen: Ziel spezifische Geräte oder Benutzergruppen
Versionenabgleich-Fluss
Abschnitt mit dem Titel “Versionenabgleich-Fluss”graph TD A[User Opens App] --> B{Check Device Override} B -->|Override Set| C[Use Override Channel] B -->|No Override| D{Check local plugin channel} D -->|setChannel value| E[Use local setChannel channel] D -->|No local channel| F{Check defaultChannel in App} F -->|Has defaultChannel| G[Use App's defaultChannel] F -->|No defaultChannel| H[Use Cloud Default Channel] C --> I{Check Version Constraints} E --> I G --> I H --> I I -->|Compatible| J[Deliver Update] I -->|Incompatible| K[Skip Update]Strategie 1: Channel-basierte Versionsrouting
Abschnitt mit dem Titel “Strategie 1: Channel-basierte Versionsrouting”Dies ist die empfohlene Vorgehensweise zur Verwaltung von Bruchänderungen und großen Versionsupdates. Es ähnelt dem Liefermodell von AppFlow.
Beispiel-Szenario
Abschnitt mit dem Titel “Beispiel-Szenario”- App v1.x (100.000 Benutzer) →
productionKanal - App v2.x (50.000 Benutzer mit Bruchlinienänderungen) →
v2Kanal - App v3.x (10.000 Beta-Benutzer) →
v3Kanal
Implementierung
Abschnitt mit dem Titel “Implementierung”Schritt 1: Konfigurieren Sie Kanäle für jede Hauptversion
Abschnitt mit dem Titel „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: 'atBackground', 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: 'atBackground', 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: 'atBackground', defaultChannel: 'v3', // Routes v3 users automatically } }};Schritt 2: Erstellen Sie Kanäle
Abschnitt mit dem Titel „Schritt 2: Erstellen Sie Kanäle“# 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- Null code-Änderungen - Die Kanalroutings erfolgen automatisch
- Klare Trennung - Jede Version hat ihren eigenen Update-Pipeline
- Flexibles Zielsetzen - Push-Updates an bestimmte Versionengruppen senden
- Sichere Rollouts - Änderungen, die die Kompatibilität gefährden, erreichen keine inkompatiblen Versionen
Strategie 2: Kontrolle über semantische Versionen
Abschnitt: "Strategie 2: Kontrolle über semantische Versionen"Nutzen Sie Capgos eingebaute semantische Versionskontrolle um Updates über Versionsgrenzen zu verhindern.
Automatische Updates über Hauptversionen deaktivieren
Abschnitt: "Automatische Updates ü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 App-Version 1.2.3 werden Updates bis zu 1.9.9
- Benutzer werden NICHT die Version 2.0.0 automatisch
- Verhindert, dass sich verändernde Änderungen auf ältere native code auswirken
- Der Vergleich verwendet die native Basis, die als
version_build
Feinste Kontrollmöglichkeiten
Abschnitt mit dem Titel “Feinste Kontrollmöglichkeiten”# Block target bundles outside the native major.minor line (1.2.x won't get 1.3.0)npx @capgo/cli channel set stable --disable-auto-update minor
# Block target bundles outside the exact native MAJOR.MINOR.PATCH core (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 noneStrategie 3: Native Version Constraints
Abschnitt mit dem Titel “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.
Verwendung von nativeVersion Delay Condition
Abschnitt mit dem Titel “Verwendung von nativeVersion Delay Condition”Wenn Sie ein Bundle hochladen, können Sie eine Mindestanforderung an die native Version angeben:
# This bundle requires native version 2.0.0 or highernpx @capgo/cli bundle upload \ --channel production \ --native-version "2.0.0"Verwendungsfälle
Abschnitt mit dem Titel “Verwendungsfälle”-
Neuer Native-Plugin erforderlich
Terminalfenster # Bundle needs Camera plugin added in v2.0.0npx @capgo/cli bundle upload --native-version "2.0.0" -
Abbruch von Native API Änderungen
Terminalfenster # 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: Verhindern von automatischen Downgrades
Abschnitt mit dem Titel “Strategie 4: Verhindern von automatischen Downgrades”Verhindern Sie, dass Benutzer Pakete erhalten, die älter sind als ihre aktuelle native Version.
Aktivieren Sie in den Kanal-Einstellungen
Abschnitt mit dem Titel “Aktivieren Sie in den Kanal-Einstellungen”In der Capgo-Oberfläche:
- Gehe zu Kanäle → Deinen Kanal auswählen
- Aktivieren “Automatische Downgrade unter nativ deaktivieren”
- Änderungen speichern
Oder via CLI:
npx @capgo/cli channel set production --disable-downgradeBeispiel
Beispiel- Gerät des Benutzers: Nativversion 1.2.5
- Kanalbundle: Version 1.2.3
- Ergebnis: Aktualisierung wird blockiert (würde zu einer Downgrade führen)
Dies ist nützlich, wenn:
- Benutzer haben eine neuere Version manuell aus dem App-Store installiert
- Sie sicherstellen möchten, dass Benutzer immer die neuesten Sicherheitspatches erhalten
- Sie Regression-Bugs verhindern möchten
Strategie 5: Geräteebene Zielsetzung
Abschnitt mit dem Titel „Strategie 5: Geräteebene Zielsetzung“Überschreiben der Kanalzuweisung für bestimmte Geräte oder Benutzergruppen
Zwingen einer bestimmten Version für die Testung
Abschnitt mit dem Titel „Zwingen einer bestimmten 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
Übersichtsseite GeräteüberschreibungIn der Capgo-Übersichtsseite:
- Gehe zu Geräte → Gerät finden
- Klicken Kanal setzen oder Version setzen
- Überschreiben mit spezifischem Kanal oder Paketversion
- Das Gerät erhält Updates von der überschriebenen Quelle
Vollständiger AppFlow-Style Workflow
Abschnitt mit dem Titel „Vollständiger AppFlow-Style Workflow”Hier ist ein vollständiges Beispiel, das alle Strategien kombiniert:
1. Initial Setup (App v1.0.0)
Abschnitt mit dem Titel „1. Initial Setup (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: 'atBackground', defaultChannel: 'production', } }};2. Release Breaking Change (App v2.0.0)
Abschnitt mit dem Titel “2. Release Breaking Change (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: 'atBackground', defaultChannel: 'v2', // New users get v2 channel } }};3. Push Updates zu Beiden Versionen
Abschnitt mit dem Titel “3. Push Updates zu Beiden Versionen”# 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. Überwachen Sie die Versionenverteilung
Abschnitt mit dem Titel “4. Überwachen Sie die Versionenverteilung”Verwenden Sie das Capgo-Dashboard, um zu überwachen:
- Wie viele Benutzer sind auf v1 vs v2 unterwegs
- Verbreitungsraten 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 fällt:
# 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)Kanalvorrang
Abschnitt mit dem Titel „Kanalvorrang“Wenn mehrere Kanalkonfigurationen existieren, verwendet Capgo folgende Vorrangfolge:
- Geräteüberschreibung (Dashboard oder API) - Höchster Vorrang und sichtbar in der Geräteüberschreibung-UI
- Lokale Plugin-Kanal via
setChannel()- Auf dem Gerät gespeichert und nicht im Geräte-Überschreibungs-UI angezeigt - Standardkanal in capacitor.config.ts
- Standardkanal (Cloud-Einstellung) - Niedrigste Priorität
Gute Praktiken
Abschnitt mit dem Titel “Gute Praktiken”1. Stellen Sie immer defaultChannel für große Versionen fest
Abschnitt mit dem Titel “1. Stellen Sie immer defaultChannel für große Versionen 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 Versionsnummern
Abschnitt mit dem Titel “2. Verwenden Sie semantische Versionsnummern”# ✅ Good1.0.0 → 1.0.1 → 1.1.0 → 2.0.0
# ❌ Bad1.0 → 1.1 → 2 → 2.53. Getrennte Branchen aufrechterhalten
Abschnitt mit dem Titel „3. Getrennte Branchen aufrechterhalten“# ✅ Good: Separate branches per major versionmain (v3.x)v2-maintenance (v2.x)v1-maintenance (v1.x)
# ❌ Bad: Single branch for all versions4. Testen Sie vor der Veröffentlichung
Abschnitt mit dem Titel „4. Testen Sie vor der Veröffentlichung“# Test on beta channel firstnpx @capgo/cli bundle upload --channel beta
# Monitor for issues, then promote to productionnpx @capgo/cli bundle upload --channel production5. Überwachen Sie die Versionsverteilung
Regelmäßig überprüfen Sie Ihren Dashboard:Stellen sich die Benutzer auf neueren nativen Versionen um?
- Zur Zwischenablage kopieren
- 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 Capgo’s Version-Zielvergleich funktioniert:
| Funktion | Ionic AppFlow | Capgo |
|---|---|---|
| Version-basierte Routing | Automatisches 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 Flag in CLI |
| Kanalverwaltung | Web-UI + CLI | Web UI + CLI + API |
| Geräte-Überschreibungen | Eingeschränkte Geräte-Einstellungen | Vollständige Kontrolle über der Dashboard/API |
| Verhinderung von automatischen Downgrades | Ja | Ja über --disable-downgrade |
| Unterhaltung mehrerer Versionen | Manuelle Verwaltung von Branchen/Kanälen | Automatisiert mit Vorzug von Kanälen |
| Selbst-Hosting | Nein | Ja (vollständige Kontrolle) |
| Version-Analytik | Grundlegend | Detaillierte pro-Version-Metriken |
Fehlersuche
Abschnitt 'Fehlersuche'Benutzer erhalten keine Updates
Abschnitt mit dem Titel „Benutzer erhalten keine Updates”Überprüfen Sie Folgendes:
-
Kanalzuweisung: Überprüfen Sie, ob das Gerät auf dem richtigen Kanal ist
const channel = await CapacitorUpdater.getChannel()console.log('Current channel:', channel) -
Versionenbeschränkungen: Überprüfen Sie, ob das Bundle native Versionen anfordert
- Dashboard → Bundles → Überprüfen Sie die Spalte „Native Version”
-
Semver-Einstellungen: Überprüfen Sie die Einstellung des Kanals
disable-auto-updateTerminal-Fenster__CAPGO_KEEP_0__ npx @capgo/cli channel list -
Geräteumstellung: Überprüfen Sie, ob das Gerät eine manuelle Umstellung hat
- Zur Dashboard-Seite → Geräte → Gerät suchen → Kanal-Version überprüfen
Bundle wurde an falsche Version geliefert
Abschnitt mit Titel „Bundle wurde an falsche Version geliefert“- Standardkanal überprüfen: Stellen Sie sicher, dass der richtige Kanal in
capacitor.config.ts - Bundle hochladen überprüfen: Bestätigen Sie, dass das Bundle an den richtigen Kanal hochgeladen wurde
- Natives Version überprüfen: Bestätigen Sie, dass die richtige Version
--native-versionFlag wurde korrekt verwendet
Änderungen, die alte Versionen betreffen
Abschnitt mit dem Titel „Änderungen, die alte Versionen betreffen“- Eilmaßnahme: Betroffene Geräte auf sicheren Bundle umstellen
- Dashboard → Geräte → Masseauswahl → Version setzen
- Langfristige Lösung: Versionierte Kanäle erstellen und separate Branches pflegen
- Vorbeugung: Alle Updates auf repräsentativen Geräten vor der Rollout testen
Migration von Ionic AppFlow
Abschnitt mit dem Titel „Migration von Ionic AppFlow“If Sie von Ionic AppFlow migrieren, funktioniert die Versionsziele-Unterstützung in __CAPGO_KEEP_0__ sehr ähnlich, mit verbessertem Flexibilität: Konzeptabbildung, version targeting works very similarly in Capgo, with improved flexibility:
AppFlow-Konzept
__CAPGO_KEEP_0__-Äquivalent| Hinweise | Capgo Equivalent | __CAPGO_KEEP_0__-Kanal |
|---|---|---|
| Das gleiche Konzept, aber mächtiger | Capgo Channel | Same concept, more powerful |
| Native Version Lock | --native-version Flag | Mehr granulare Kontrolle |
| Kanalpriorität | Kanalvorrang (Überschreiben → Cloud → Standard) | Mehr transparenter Vorrang |
| Zielsystem für die Bereitstellung | Kanal + semver-Kontrollen | Mehrere Strategien verfügbar |
| Produktionskanal | production Kanal (oder beliebiger Name) | Flexible Namensgebung |
| Git-basierte Bereitstellung | CLI Paket-Upload aus der Branch | Selbe Workflow |
| Automatische Versionsabgleich | 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 an
- API Zugriff: Vollständige programmatische Kontrolle über Versionsziele
- Selbst-Hosting: Option, eigene Update-Server mit gleicher Versionslogik zu betreiben
Migrationsschritte
Abschnitt mit dem Titel “Migrationsschritte”- Deine AppFlow-Kanäle zu Capgo Kanälen (üblicherweise 1:1)
- Setzen
defaultChannelbeicapacitor.config.tsfür jede Hauptversion - Konfigurieren von semver-Regeln falls automatische Blockierung an Versionsgrenzen gewünscht ist
- Versionsspezifische Pakete hochladen mit
--native-versionFlagge - Versionenverteilung überwachen in Capgo-Dashboard
Erweiterte Muster
Abschnitt mit dem Titel „Erweiterte Muster“Schrittweise Umstellung nach Version
Abschnitt mit dem Titel „Schrittweise Einführung durch 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' }) }}Feature-Flags durch Version
Abschnitt mit dem Titel „Feature-Flags durch 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 über Versionen hinweg
Abschnitt mit dem Titel „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
Abschnitt mit dem Titel „Zusammenfassung“Capgo bietet mehrere Strategien für die versionsspezifische Lieferung von Updates:
- Kanalbasierte Routensteuerung: Automatische Versionsunterscheidung über
defaultChannel - Semantic Versioning: Verhindere Updates über Haupt-/Minor- und Patcheschwellen
- Native Version Constraints: Erforderliche Mindestversion für native Bundles
- Auto-Downgrade Prevention: Liefer nie ältere Bundles an neuere native Versionen
- Device Overrides: Manuelle Kontrolle für Testen und Zielsetzen
Indem Sie diese Strategien kombinieren, können Sie AppFlow-Style-Updates mit noch mehr Flexibilität und Kontrolle erreichen. Wählen Sie die geeignete Vorgehensweise, die am besten zu Ihrem Apps Versions- und Bereitstellungsworkflow passt.
Für weitere Details zu spezifischen Funktionen:
- Hinweise zu Änderungen der Versionsnummer - Detaillierte Kanalversionierungsstrategie
- Kanalverwaltung - Vollständige Kanalkonfigurationsreferenz
- Updateverhalten - Natürliche Versionenverzögerungen und -bedingungen
Fortsetzung von Zielversionen
Sektion mit dem Titel „Fortsetzung von Zielversionen“Wenn Sie "Version Zielversionen" verwenden Zielversionen um Kanalrouten und die schrittweise Einführung zu planen, verbinden Sie es mit Kanälen um die Implementierungsdetails in Kanälen zu erhalten Kanäle für die Implementierungsdetails in Kanäle, Kanäle für die Implementierungsdetails in Kanäle, Beta-Testlösung für den Produktworkflow in Beta-Testlösung, und Versionsziel-Lösung für den Produktworkflow in Versionsziel-Lösung.