Skip to content
Diese Seite wurde mit KI-Unterstützung erstellt und übersetzt. Falls Ihnen Ungenauigkeiten auffallen, helfen Sie gerne bei der Verbesserung. Auf GitHub bearbeiten

Release-Verwaltung

Ein Release repräsentiert einen bestimmten hochgeladenen Build unter einer Variante. Jeder Release hat eine Versions-String, Build-Nummer, Changelog und die Binärdatei selbst. Releases werden auf der Produkt-Download-Seite in umgekehrter chronologischer Reihenfolge angezeigt.

Release-Felder

FeldTypBeschreibung
idstringAutomatisch generierte ID (z.B. rel_b1cqa)
variant_idstringID der übergeordneten Variante
versionstringVersions-String (z.B. "1.2.0")
buildintegerBuild-Nummer (z.B. 120)
changelogtextRelease-Notizen (auf Download-Seite angezeigt)
min_osstringMindest-OS-Version
channelstringDistributionskanal (z.B. "internal", "beta", "production")
size_bytesintegerDateigröße in Bytes
sha256stringSHA-256-Hash der hochgeladenen Datei
download_countintegerAnzahl der Downloads dieses Releases
file_namestringOriginaler Dateiname
file_extstringDateiendung (z.B. "ipa", "apk")
created_atdatetimeUpload-Zeitstempel

Release hochladen

Standard-Upload

Eine Build-Datei zu einer bestimmten Variante hochladen:

bash
curl -X POST http://localhost:8000/upload \
  -H "X-Auth-Token: YOUR_UPLOAD_TOKEN" \
  -F "variant_id=var_def456" \
  -F "app_file=@build/MyApp.ipa" \
  -F "version=1.2.0" \
  -F "build=120" \
  -F "channel=beta" \
  -F "changelog=Bug fixes and performance improvements"

Antwort:

json
{
  "ok": true,
  "data": {
    "app": {
      "id": "app_xxx",
      "name": "MyApp",
      "platform": "ios",
      "bundle_id": "com.example.myapp"
    },
    "release": {
      "id": "rel_b1cqa",
      "version": "1.2.0",
      "build": 120
    },
    "urls": {
      "page": "https://dist.example.com/products/myapp",
      "download": "https://dist.example.com/d/rel_b1cqa",
      "ios_manifest": "https://dist.example.com/ios/rel_b1cqa/manifest.plist",
      "ios_install": "itms-services://..."
    }
  }
}

Intelligenter Upload

Der Smart-Upload-Endpunkt erkennt Metadaten automatisch aus dem hochgeladenen Paket:

bash
curl -X POST http://localhost:8000/admin/api/smart-upload \
  -H "X-Auth-Token: YOUR_ADMIN_TOKEN" \
  -F "variant_id=var_def456" \
  -F "app_file=@build/MyApp.ipa"

Automatische Erkennung

Der intelligente Upload extrahiert folgende Informationen aus IPA- und APK-Dateien:

  • Bundle-ID / Paketname
  • Versions-String (CFBundleShortVersionString / versionName)
  • Build-Nummer (CFBundleVersion / versionCode)
  • App-Icon (extrahiert und als Produkt-Icon gespeichert)
  • Mindest-OS-Version

Automatisch erkannte Felder können durch explizite Angabe in der Upload-Anfrage überschrieben werden.

Upload-Felder

FeldErforderlichBeschreibung
variant_idJaZiel-Varianten-ID
app_fileJaBinärdatei (IPA, APK, DMG, etc.)
versionNeinVersions-String (automatisch erkannt für IPA/APK)
buildNeinBuild-Nummer (automatisch erkannt für IPA/APK)
channelNeinDistributionskanal
min_osNeinMindest-OS-Version
changelogNeinRelease-Notizen

Dateispeicher

Hochgeladene Dateien werden gespeichert unter:

uploads/{product_id}/{variant_id}/{release_id}/filename.ext

Jeder Release hat auch einen meta.json-Snapshot (nur lokaler Speicher) für Wiederherstellungszwecke.

S3-Speicher

Bei konfiguriertem S3-kompatiblen Speicher werden Dateien in den konfigurierten Bucket hochgeladen. Die Speicherpfadstruktur bleibt dieselbe. Für S3-Setup siehe Konfiguration.

Download-URLs

Jeder Release stellt mehrere URLs bereit:

URLBeschreibung
/d/:releaseIDDirekter Binär-Download (unterstützt HTTP-Range-Anfragen)
/ios/:releaseID/manifest.plistiOS OTA-Manifest (für itms-services://-Links)
/products/:slugProdukt-Download-Seite
/products/:slug?r=:releaseIDProduktseite mit hervorgehobenem bestimmten Release

Release löschen

bash
curl -X DELETE http://localhost:8000/admin/api/releases/rel_b1cqa \
  -H "X-Auth-Token: YOUR_ADMIN_TOKEN"

WARNING

Das Löschen eines Releases entfernt dauerhaft die hochgeladene Binärdatei und alle zugehörigen Metadaten.

Release-Daten exportieren

Alle Releases als CSV für Berichte exportieren:

bash
curl -o releases.csv http://localhost:8000/admin/exports/releases.csv \
  -H "X-Auth-Token: YOUR_ADMIN_TOKEN"

CI/CD-Integration

Fenfa ist für den Aufruf aus CI/CD-Pipelines konzipiert. Ein typischer GitHub-Actions-Schritt:

yaml
- name: Upload to Fenfa
  run: |
    curl -X POST ${{ secrets.FENFA_URL }}/upload \
      -H "X-Auth-Token: ${{ secrets.FENFA_UPLOAD_TOKEN }}" \
      -F "variant_id=${{ secrets.FENFA_VARIANT_ID }}" \
      -F "app_file=@build/output/MyApp.ipa" \
      -F "version=${{ github.ref_name }}" \
      -F "build=${{ github.run_number }}" \
      -F "changelog=${{ github.event.head_commit.message }}"

Nächste Schritte

Released under the Apache-2.0 License.