Versionziel
Ein Setup-Vorschlag mit den Installationsanweisungen und der vollständigen Markdown-Dokumentation für diesen Plugin kopieren.
Diese Anleitung erklärt, wie man automatisch dem neuesten kompatiblen Bundle an Benutzer liefert, basierend auf ihrer native App-Version, ähnlich wie bei Ionic AppFlows AnsatzDies 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:
- Kompatible Updates automatisch liefern an Benutzer basierend auf ihrer native App-Version
- Verhindern von Änderungen, die die App-Version inkompatibel machen Mehrfach-App-Versionen gleichzeitig ohne komplexes Logik verwalten
- Updates ohne Hürden bereitstellen. Automatisch kompatible Updates liefern
- an Benutzer basierend auf ihrer native App-Version für bestimmte Benutzersegmente
Warum Version-Zielgruppierung wichtig ist (insbesondere für AppFlow-Nutzer)
Abschnitt mit dem Titel „Warum Version-Zielgruppierung wichtig ist (insbesondere für AppFlow-Nutzer)“Wenn Sie mit Ionic AppFlow vertraut sind Ionic AppFlowwissen Sie, wie wichtig es ist, sicherzustellen, dass Benutzer nur kompatible Updates erhalten. AppFlow matchte automatisch Live-Update-Bundles mit nativen App-Versionen, um inkompatible JavaScript von älteren nativen code zu verhindern.
Capgo bietet die gleichen Sicherheitsgarantien, mit zusätzlichen Funktionen:
- Feinere Kontrolle über die Versionsabgleich
- Mehrfache Strategien (Kanäle, semver, native Einschränkungen)
- Bessere Sichtbarkeit in die Versionsverteilung
- API und CLI steuern neben der Dashboard-Verwaltung
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 Wartung aufrechterhalten, während Sie wichtige Änderungen umsetzen
- Sie möchten verhindern, dass neue Bundles ältere native code beschädigen
- Sie migrieren Benutzer allmählich von einer Version zur anderen
- Sie migrieren von AppFlow und möchten die gleiche Sicherheit bei der Aktualisierung aufrechterhalten Wie es funktioniert
Abschnitt mit dem Titel „Wie es funktioniert“
__CAPGO_KEEP_0__ verwendet eine mehrschichtige Vorgehensweise, um Benutzer mit kompatiblen Updates zu matchen:Capgo uses a multi-layered approach to match users with compatible updates:
- : Verhindern Sie, dass Bundles an inkompatiblen native Versionen geliefert werdenSie haben Benutzer auf verschiedenen Hauptversionen Ihrer App (z.B. v1.x, v2.x, v3.x)
- Kanalbasierte Routensteuerung: Routen unterschiedliche App-Versionen zu unterschiedlichen Update-Kanälen
- Semantische Versionskontrolle: Automatisch Updates über Major/Major/Minor-Grenzen blockieren
- Geräteebene-Überlagerungen: Ziele spezifische Geräte oder Benutzergruppen
Versionsabgleich-Fluss
Abschnitt mit dem Titel “Versionsabgleich-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: Kanalbasierte Versionsrouting
Abschnitt mit dem Titel “Strategie 1: Kanalbasierte Versionsrouting”Dies ist der empfohlener Ansatz für die Verwaltung von Änderungen, die das Produkt brechen, und wichtige Versionsupdates. Es ähnelt dem Liefermodell von AppFlow.
Beispielszenario
Abschnitt mit dem Titel „Beispielszenario“- App v1.x (100.000 Benutzer) →
productionKanal - App v2.x (50.000 Benutzer mit Änderungen, die das Produkt brechen) →
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 - Das Routing über Kanäle erfolgt automatisch
- Klare Trennung - Jede Version hat ihren eigenen Update-Pfad
- Flexible Zielgruppen - Push-Updates für bestimmte Versionsgruppen
- Sichere Rollouts - Bruchstellen ändern nie inkompatible Versionen
Strategie 2: Kontrolle über semantische Versionierung
Abschnitt mit dem Titel ‘Strategie 2: Kontrolle über semantische Versionierung’Verwenden Sie Capgo’s integrierte semantische Versionierungskontrollen um Updates über Versionsgrenzen zu verhindern.
Deaktivieren Sie die Auto-Update-Funktion über Hauptversionen
Abschnitt mit dem Titel „Deaktivieren Sie die automatische Aktualisierung über große Versionen“# Create a channel that blocks major version updatesnpx @capgo/cli channel create stable --disable-auto-update majorDiese Konfiguration bedeutet:
- Benutzer mit der Anwendungsversion 1.2.3 werden Aktualisierungen bis zu 1.9.9
- Benutzer werden NICHT Aktualisierungen der Version 2.0.0 automatisch
- Verhindert, dass sich verändernde Änderungen an älteren nativen code verbreiten
Granulares Kontrollmöglichkeiten
Abschnitt mit dem Titel „Feinabstimmungsoptionen“# 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 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 inkompatiblen Geräten zu verhindern.
Mit nativeVersion Delay Bedingung
Abschnitt mit dem Titel “Mit nativeVersion Delay Bedingung”Wenn Sie ein Bundle hochladen, können Sie eine Mindestversion für 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" -
Native API-Änderungen
Terminal-Fenster # Bundle uses new Capacitor 6 APIsnpx @capgo/cli bundle upload --native-version "3.0.0" -
Schrittweise Migration
Terminal-Fenster # 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: 'Strategie 4: Vermeidung von automatischen Downgrades'Verhindern Sie, dass Benutzer Pakete erhalten, die älter sind als ihre aktuelle native Version.
Aktivieren Sie in den Kanal-Einstellungen
Abschnitt: 'Aktivieren Sie in den Kanal-Einstellungen'In der Capgo-Oberfläche:
- Zum Kanäle → Wählen Sie Ihren Kanal
- Aktivieren “Deaktivieren Sie die automatische Downgrade unter native”
- Speichern Sie die Änderungen
Oder über CLI:
npx @capgo/cli channel set production --disable-downgrade- Geräte des Benutzers: Native Version 1.2.5
- Kanalbundle: Version 1.2.3
- Ergebnis: Aktualisierung blockiert (würde eine Downgrade darstellen)
Dies ist nützlich, wenn:
- Benutzer haben eine neuere Version manuell aus dem App-Store installiert
- Sie benötigen sicherzustellen, dass Benutzer immer die neuesten Sicherheitspatches erhalten
- Sie möchten Regression-Bugs verhindern
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 Testzwecke
Abschnitt mit dem Titel „Zwingen Sie eine bestimmte 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' }) }}Dashboard Geräteumgehung
Abschnitt mit dem Titel „Dashboard Geräteumgehung“Gehen Sie in der Capgo-Oberfläche:
- Zu Geräte → Gerät finden
- Klicken Sie Kanal festlegen oder Version festlegen
- Mit spezifischem Kanal oder Bundle-Version überschreiben
- Das Gerät erhält Updates aus der überschriebenen Quelle
Vollständiger AppFlow-Style Workflow
Hier ist ein vollständiges Beispiel, das alle Strategien kombiniert:1. Initialisierung (App v1.0.0)
Terminal-Fenster
Zur Zwischenablage kopieren# 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. Updates auf beide Versionen pushen
Abschnitt mit dem Titel „3. Updates 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 überwachen
Abschnitt mit dem Titel “4. Versionenverteilung überwachen”Verwenden Sie das Capgo-Dashboard, um zu überwachen:
- Wie viele Benutzer sind auf v1 gegenüber v2
- Zuordnungsquoten pro Version
- Fehler oder Abstürze pro Version
5. Veraltete Version deaktivieren
Abschnitt mit dem Titel “5. Veraltete Version deaktivieren”Wenn die v1-Nutzung 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)Kanalvorrang
Abschnitt mit dem Titel “Kanalvorrang”Wenn mehrere Kanal-Konfigurationen existieren, verwendet Capgo diese Vorrangfolge:
- Geräte-Überschreibung (Dashboard oder API) - Höchste Priorität und sichtbar in der Geräte-Überschreibungs-Oberfläche
- Lokaler Plugin-Kanal via
setChannel()- Auf dem Gerät nur gespeichert und nicht in der Geräte-Überschreibungs-Oberfläche angezeigt - defaultChannel in capacitor.config.ts
- Standardkanal (Cloud-Einstellung) - Niedrigste Priorität
Best Practices
Abschnitt mit dem Titel “Best Practices”1. Setzen Sie immer defaultChannel für Major Versions
Abschnitt mit dem Titel “1. Setzen Sie immer defaultChannel für Major Versions”// ✅ 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 Versionsnummer
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. Halten Sie separate Zweige aufrecht
Abschnitt mit dem Titel „3. Halten Sie separate Zweige aufrecht“# ✅ 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
Abschnitt mit dem Titel “5. Versionen verteilen”Überprüfen Sie regelmäßig Ihr Dashboard:
- Stellen Benutzer auf neueren nativen 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 Capgo’s Versionenziel vergleicht:
| Funktion | Ionic AppFlow | Capgo |
|---|---|---|
| Version-basierte Routensteuerung | Automatisch basierend auf der nativen Version | Automatisch über defaultChannel + mehrere Strategien |
| Semantische Versionsnummerierung | Grundlegende Unterstützung | Erweitert mit --disable-auto-update (Major/Minor/Patch) |
| Nativversionenbeschränkungen | Manuelle Konfiguration in AppFlow-Dashboard | Inbegriffen --native-version Flag in CLI |
| Kanalverwaltung | Web-UI + CLI | Web-UI + CLI + API |
| Geräteüberschreibungen | Eingeschränkte Geräteeinflussnahme | Vollständige Kontrolle über die Dashboard/API |
| Verhinderung von automatischen Downgrades | Ja | Ja über --disable-downgrade |
| Multi-Version-Wartung | Manuelle Branchen-/Kanalverwaltung | Automatisch mit Kanalvorzug |
| Selbstbetrieb | Nein | Ja (vollständige Kontrolle) |
| Versionen-Analyse | Grundlegend | Detaillierte pro-Version-Metriken |
Fehlersuche
Abschnitt mit dem Titel “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 → Pakete → Überprüfen Sie die Spalte “Native Version”
-
Semver-Einstellungen: Überprüfen Sie den Kanal des Geräts
disable-auto-updateEinstellungTerminalfenster npx @capgo/cli channel list -
Geräteumstellung: Überprüfen Sie, ob das Gerät eine manuelle Umstellung hat
- Zurück zum Dashboard → Geräte → Gerät suchen → Kanal/Versionsnummer überprüfen
Falsche Version des Bundles geliefert
Abschnitt mit dem Titel „Falsche Version des Bundles geliefert“- Überprüfen Sie die Standardkanal-Einstellung: Stellen Sie sicher, dass der richtige Kanal im
capacitor.config.ts - Überprüfen Sie den Bundle-Upload: Prüfe, ob das Bundle an der vorgesehenen Kanal hochgeladen wurde
- Inspektion der Native Version: Bestätigen
--native-versionDie Flag-Option wurde korrekt verwendet
Änderungen, die alte Versionen betreffen
Abschnitt mit dem Titel „Änderungen, die alte Versionen betreffen“- Eilmaßnahme: Übernehmen Sie auf betroffenen Geräten die sichere Bundle
- Dashboard → Geräte → Masseauswahl → Version setzen
- Langfristige Maßnahme: Erstellen Sie kanalverteilte Versionen und halten Sie separate Branches
- Prävention: Immer Updates auf repräsentativen Geräten vor der Rollout testen
Migration von Ionic AppFlow
Sektion 'Migration von Ionic AppFlow'Wenn Sie von AppFlow Ionic, funktioniert die Zielversionenzielung sehr ähnlich in Capgo, mit verbessertem Flexibilität:
Konzeptkarte
Sektion 'Konzeptkarte'| AppFlow-Konzept | Capgo Äquivalent | Hinweise |
|---|---|---|
| Deploy-Kanal | Capgo Kanal | Selben Konzept, mehr Macht |
| Native Version Lock | --native-version Flagge | Mehr detaillierte Kontrolle |
| Kanal Priorität | Kanal Vorrang (Übergeordnet → Cloud → Standard) | Mehr transparenter Vorrang |
| Ziel für die Bereitstellung | Kanal + semver Kontrolle | Mehrere Strategien verfügbar |
| Produktionskanal | production Kanal (oder beliebiger Name) | Flexible Namensgebung |
| Git-basierte Bereitstellung | CLI-Paket-Upload aus der Branch | Ebenso 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: Die Dashboard zeigt die Versionenverteilung und Kompatibilitätsprobleme
- API Zugriff: Vollständige programmatische Kontrolle über die Versionenziel
- Selbst-Hosting: Option, um Ihre eigene Update-Server mit gleicher Version-Logik zu betreiben
Migrationsschritte
Abschnitt mit dem Titel “Migrationsschritte”- Karten Ihre AppFlow-Kanäle zu Capgo Kanälen (üblicherweise 1:1)
- Einstellungen
defaultChannelincapacitor.config.tsfür jede Hauptversion - Konfigurieren Sie semver-Regeln wenn Sie eine automatische Blockierung an Versionsgrenzen wünschen
- Hochladen von Versionsspezifischen Bundeln mit
--native-versionFlagge - Überwachen Sie die Versionenverteilung in Capgo-Dashboard
Erweiterte Muster
Abschnitt: „Erweiterte Muster“Versionenbezogener Schrittweiser Rollout
Abschnitt: „Versionenbezogener Schrittweiser Rollout“// 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 Versionen
Abschnitt: „Funktionsschalter nach Versionen“// 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-Testen über Versionen
Abschnitt: „A/B-Testen über Versionen“// 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 die Versions-spezifische Lieferung von Updates:
- Kanalbasierte Routing: Automatische Versions-Trennung über
defaultChannel - Semantische Versionsnummer: Verhindern Sie Updates über Haupt-/Mittel-/Patch-Grenzen
- Nativversionenbeschränkungen: Erfordern Sie den Mindestnativversion für Bundles
- Verhindern von Downgrades: Liefern Sie niemals ältere Bundles an neue native Versionen
- Geräteüberschreibungen: Manuelle Kontrolle für Testen und Zielsetzen
Indem Sie diese Strategien kombinieren, können Sie eine AppFlow-ähnliche automatische Aktualisierungsbereitstellung mit noch mehr Flexibilität und Kontrolle erreichen. Wählen Sie die Ansatz, der am besten zu Ihrem Apps Versions- und Bereitstellungsworkflow passt.
Für weitere Details zu bestimmten Funktionen:
- Änderungen im Hinblick auf die Kompatibilität - Detaillierte Strategie zur Versionsverwaltung des Kanals
- Kanalverwaltung - Vollständige Referenz zur Kanalkonfiguration
- Updateverhalten - Native Versionen verzögern und Bedingungen
Fortsetzen Sie mit der Versionszielverfolgung
Sektion mit dem Titel “Fortsetzen Sie mit der Versionszielverfolgung”Wenn Sie " Versionszielverfolgung um Kanalrouting und rollierende Veröffentlichung zu planen und zu verbinden mit Kanäle für die Implementierungsdetails in Kanäle, 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 Versionziel-Lösung für den Produktworkflow in Versionziel-Lösung.