Version und Build-Nummer der iOS-App in Swift: Eine einfache Lösung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

So erhalten Sie die Version und Build-Nummer einer App in Swift: Vollständige Erklärung mit Code

\n\n

Haben Sie sich jemals gefragt, warum im App Store dieselbe App „MeinMessenger 3.2“ heißen kann, in den Telefoneinstellungen aber „3.2.1 (45)“? Oder warum Entwickler Sie bitten, die „Build-Nummer“ zu senden, wenn Sie einen Fehler melden? Die Antwort ist einfach: In jeder iOS-App leben zwei versteckte Zahlen – die App-Version und die Build-Nummer. Und heute lernen wir, wie man sie mit Swift ausliest. Dies ist eine der beliebtesten Fragen auf Stack Overflow (Zehntausende von Aufrufen!), und das zu Recht: Die Kenntnis dieser zwei Codezeilen kann Ihnen stundenlanges Debuggen und Nerven der Benutzer ersparen.

\n\n

In diesem Artikel kopieren wir nicht einfach eine Antwort aus dem Forum. Wir werden erklären, was Version und Build sind, wofür sie benötigt werden, wie man sie korrekt abruft und, am wichtigsten, wie man typische Fehler vermeidet. Los geht's!

\n\n

Was sind Version (version) und Build-Nummer (build number)?

\n\n

Bevor wir Code schreiben, klären wir die Begriffe. In Xcode gibt es in der Datei Info.plist (oder in den Projekteinstellungen) zwei Schlüssel:

\n\n
    \n
  • CFBundleShortVersionString – das ist das, was der Benutzer im App Store und in den App-Einstellungen sieht. Normalerweise sieht es aus wie „1.0“, „2.3.1“ usw. Dies ist die Version für den Benutzer.
  • \n
  • CFBundleVersion – das ist die interne Build-Nummer. Sie kann beliebig sein: „42“, „20240315“, „1.0.0.123“. Dies ist die Version für den Entwickler, die hilft, verschiedene Builds derselben Version zu unterscheiden.
  • \n
\n\n

Warum trennen? Stellen Sie sich vor, Sie haben Version 1.0 veröffentlicht, aber einen kritischen Fehler gefunden. Sie beheben ihn, ohne die Funktionalität zu ändern – es ist immer noch Version 1.0 für den Benutzer, aber die Build-Nummer erhöhen Sie (z. B. von 1 auf 2). So verwirren Sie den Benutzer nicht und sehen in Crashlytics, welcher Build genau abgestürzt ist.

\n\n

Der einfachste Weg: Bundle.main

\n\n

Apple bietet einen bequemen Zugriff auf diese Daten über das Objekt Bundle.main. Hier ist die klassische Lösung, die Sie auf Stack Overflow finden:

\n\n
import UIKit\n\nclass ViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // App-Version abrufen\n        let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown"\n        // Build-Nummer abrufen\n        let buildNumber = Bundle.main.infoDictionary?["CFBundleVersion"] as? String ?? "Unknown"\n        \n        print("App-Version: \\(appVersion)")\n        print("Build-Nummer: \\(buildNumber)")\n        \n        // Beispiel für die Verwendung in der UI\n        versionLabel.text = "Version \\(appVersion) (Build \\(buildNumber))"\n    }\n}\n
\n\n

Genial einfach. Aber lassen Sie uns jede Zeile durchgehen:

\n
    \n
  • Bundle.main – das ist das Hauptbundle Ihrer App (die .app-Datei).
  • \n
  • infoDictionary – ein Wörterbuch, das die Info.plist ausliest.
  • \n
  • Wir verwenden eine optionale Umwandlung mit as? String und den Operator ?? für den Fall, dass der Schlüssel fehlt (was jedoch unwahrscheinlich ist).
  • \n
\n\n

Fortgeschrittener Ansatz: Auslesen über ProcessInfo

\n\n

Wollen Sie wie ein Profi aussehen? Verwenden Sie ProcessInfo. Diese Klasse weiß mehr über das System als nur die plist. Für die App-Version bietet sie jedoch nichts Neues, kann aber das Betriebssystem anzeigen. Es gibt jedoch einen Trick: Wenn Sie das Abrufen der Daten in ein Extension verpacken, wird der Code sauberer und wiederverwendbarer.

\n\n
import Foundation\n\nextension Bundle {\n    var appVersion: String {\n        return infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown"\n    }\n    \n    var buildNumber: String {\n        return infoDictionary?["CFBundleVersion"] as? String ?? "Unknown"\n    }\n    \n    var fullVersion: String {\n        return "Version \\(appVersion) (Build                

Blogs

Buchempfehlungen