Unterschied zwischen Xcode-Version (CFBundleShortVersionString) und Build (CFBundleVersion)

94

App-Zielübersicht

In Xcode 4 sehe ich dies für meine Zielzusammenfassung:

Die Eingabe "Version" entspricht CFBundleShortVersionStringin der Datei info.plist und die Eingabe "Build" entspricht CFBundleVersion.

Was ist der Unterschied zwischen diesen beiden? Ich sehe viele Leute im Internet, die für beide den gleichen Wert legen wollen, und mein Verdacht ist, dass dies auf Abwärtskompatibilität zurückzuführen ist.

Ich habe zwei Fragen:

1) Wenn ich von vorne anfangen würde, was wäre die beste Vorgehensweise für die Versionierung Ihrer App?

2) In allen früheren Versionen meiner App habe ich nur verwendet CFBundleVersion. Um den Upgrade-Prozess nicht zu verfälschen, sollte ich weiterhin auf CFBundleVersiondie gleiche Weise wie bisher inkrementieren oder ist es möglich, auf den "richtigen Weg" zu wechseln, sofern einer vorhanden ist?

Philip Walton
quelle
3
Dies ist ein Duplikat von stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4, aber vielleicht ist diese Version besser angegeben (und hat einen Screenshot).
Daniel Dickison
Müssen Sie etwas tun, um das Feld "Erstellen" in Ihrer Zusammenfassung anzuzeigen? Ich sehe nur eine Version, aber kein Build-Feld.
Kenny Wyland

Antworten:

68

Das Apple-Dokument "Information Property List Key Reference" besagt, dass es sich CFBundleShortVersionStringum eine Release-Version handelt, während es sich CFBundleVersionum einen Build handelt, der veröffentlicht wurde oder nicht. Auch CFBundleShortVersionStringkann lokalisiert werden, obwohl ich weiß nicht , warum Sie wollen würde, da sie sagen , dass es sein soll „eine Zeichenfolge aus drei Punkten getrennte ganze Zahlen“. Für einen Release-Build wäre es sinnvoll, die beiden Zahlen gleich zu machen. Für einen Entwicklungs-Build können Sie etwas anderes an den CFBundleVersionPunkt anheften , vielleicht einen weiteren Punkt und eine ganze Zahl.

JWWalker
quelle
Aber wenn ich zur Zeit habe 1.3.1 als meine Verwendung CFBundleVersionund nichts als meine CFBundleShortVersionString, und ich möchte wechseln mit CFBundleVersioninternen darzustellen baut, dann ich brauche mindestens Anfang mit einer ganzen Zahl höher als 1.3.1, nicht wahr? Oder fragt dieser Schalter nur nach Ärger?
Philip Walton
Die Version ( CFBundleShortVersionString) ist das einzige, was für die Übermittlung an Apple von Bedeutung ist. Das Build ( CFBundleVersion) kann nach Belieben in der Entwicklung verwendet oder in Ihrer App angezeigt werden. Verwenden Sie Oktal (Basis-8) und iterieren Sie in umgekehrter Reihenfolge um 12, wenn Sie möchten.
nekno
16
nekno: Eigentlich ist die CFBundleVersion für Apple wichtig. Überprüfen Sie diese Fehlermeldung, die Apple beim Senden einer App gibt: "Die von Ihnen hochgeladene Binärdatei war ungültig. Der Schlüssel CFBundleVersion in der Datei Info.plist muss eine höhere Version als die zuvor hochgeladene Version enthalten."
Malhal
10
Einige Länder verwenden andere Ziffern als das moderne Arabisch in der westlichen Welt, wie z. B. Ostarabisch (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) oder Hebräisch (א, ב, ג, ד, ה, ו, ז, ח, ט) - und diese beiden sind auch von rechts nach links geschrieben. Es gibt noch viele andere Zahlensysteme (siehe en.wikipedia.org/wiki/Category:Numerals ). Ich vermute also, dass Apple dies unter "lokalisierbarer" Versionsnummer versteht.
Ruslan Ulanov
Die drei Ziffern mit Interpunktion sind übrigens nicht erforderlich. Ich habe stattdessen einen Datums- / 201606070620Uhrzeitwert verwendet, z. B. für beide Werte in einer iOS 7-8-9-App.
Basil Bourque
3

Auf die Frage von JWWalker, warum Sie CFBundleShortVersionString lokalisieren möchten, wäre dies das Dezimaltrennzeichen. In Gebietsschemas, in denen das Dezimaltrennzeichen tatsächlich ein Komma ist, wäre die Version "1.5" beispielsweise "1.5".

Arjun
quelle
30
IMO müssen Sie keine Versionsnummern lokalisieren. Ich lebe in einer Region, in der das Dezimaltrennzeichen ein Komma ist (Deutschland), und ich bin es gewohnt, Versionsnummern durch einen Punkt zu trennen. Tatsächlich kann ich mich nicht erinnern, dass ich jemals eine Versionsnummer mit einem Komma gesehen habe.
Christian Specht
2
Ich lebe auch in einer Region, in der Komma als Dezimaltrennzeichen verwendet wird, obwohl 1,3,1 ein ziemlich seltsamer Wert ist, scheint 1.3.1 viel besser zu sein.
Lucien
1
Ich denke, es bedeutet, dass Sie verschiedene Versionen der App für verschiedene Regionen haben können. 1.2.1> en.lproj 1.2.2> fr.lproj Obwohl die gesamte Liste kopiert wird, wenn Sie die Datei lokalisieren, werden beide Versionsnummern kopiert, damit beide "lokalisiert werden können"
brian.clear
1

Schnelle Lösung:

Fügen Sie einfach die CFBundleShortVersionStringzur Plist-Datei hinzu und bearbeiten Sie Ihre Version.

  1. Enthülle deine InfoPlist.strings
  2. Markieren Sie es und fügen Sie den folgenden Code ein (vorausgesetzt, er befindet sich im Quellcodemodus).

{"CFBundleShortVersionString" = "1.1";}

  1. Ändern Sie die 1.1 in einen neuen Build.
  2. Build & Submit ohne weitere Fehler!

Geben Sie hier die Bildbeschreibung ein

Louie
quelle
1

Informationen zum Hochladen von Binärdateien finden Sie in der Apple-Dokumentation.

Nummerierung von Versionen und Builds: iTunes Connect extrahiert die Vorabversionsnummer und die Build-Nummer aus der Binärdatei. Die Versionsnummer vor der Veröffentlichung ist die Xcode-Versionsnummer oder der Schlüssel "Bundle-Versionszeichenfolge, kurz" in der Info.plist. Die Build-Nummer ist die Xcode-Build-Nummer oder der Schlüssel "Bundle-Version" in der Info.plist. Die Versionsnummer der Vorabversion und die Build-Nummer werden auf der Registerkarte Vorabversion angezeigt, wie unter Anzeigen von Builds beschrieben.

Hochladen einer Binärdatei für eine App

GilesDMiddleton
quelle