Ich habe eine App, die ich mit Xcode 3 entwickelt und kürzlich mit der Bearbeitung mit Xcode 4 begonnen habe. In der Zielzusammenfassung habe ich das Zielformular für iOS-Anwendungen mit den Feldern: Kennung, Version, Build, Geräte und Bereitstellungsziel. Das Versionsfeld ist leer und das Erstellungsfeld ist 3.4.0 (entspricht der Version der App, als ich noch mit Xcode 3 bearbeitet habe).
Meine Fragen sind:
Was ist der Unterschied zwischen den Versions- und Buildfeldern?
Warum war das Versionsfeld nach dem Upgrade auf Xcode 4 leer?
Antworten:
Apple hat die Felder irgendwie neu angeordnet / umfunktioniert.
Wenn Sie in Zukunft auf der Registerkarte "Info" nach Ihrem Anwendungsziel suchen, sollten Sie als Version (z. B. 3.4.0) die Zeichenfolge "Bundle-Versionen, kurz" und als Build (z. B. 500 oder 1A500 "die Option" Bundle-Version "verwenden ). Wenn Sie beide nicht sehen, können Sie sie hinzufügen. Diese werden den richtigen Textfeldern für Version und Build auf der Registerkarte Zusammenfassung zugeordnet. Sie sind die gleichen Werte.
Wenn Sie auf der Registerkarte "Info" mit der rechten Maustaste klicken und " Rohschlüssel / Werte anzeigen" auswählen , werden die tatsächlichen Namen
CFBundleShortVersionString
(Version) undCFBundleVersion
(Build) angezeigt.Die Version wird normalerweise so verwendet, wie Sie sie anscheinend mit Xcode 3 verwendet haben. Ich bin mir nicht sicher, auf welcher Ebene Sie nach dem Unterschied zwischen Version und Build fragen, daher werde ich sie philosophisch beantworten.
Es gibt alle Arten von Schemata, aber ein beliebtes ist:
{MajorVersion}. {MinorVersion}. {Revision}
Anschließend wird der Build separat verwendet, um die Gesamtzahl der Builds für eine Version oder für die gesamte Produktlebensdauer anzugeben.
Viele Entwickler beginnen die Build-Nummer bei 0, und jedes Mal, wenn sie erstellen, erhöhen sie die Nummer um eins und erhöhen sich für immer. In meinen Projekten habe ich ein Skript, das die Build-Nummer bei jedem Build automatisch erhöht. Siehe Anweisungen dazu unten.
Andere Entwickler, einschließlich Apple, haben eine Build-Nummer, die aus einer Hauptversion + einer Nebenversion + einer Anzahl von Builds für die Version besteht. Dies sind die tatsächlichen Softwareversionsnummern im Gegensatz zu den für das Marketing verwendeten Werten.
Wenn Sie zu Xcode- Menü> Über Xcode gehen , werden die Versions- und Build-Nummern angezeigt. Wenn Sie auf die Schaltfläche Weitere Informationen ... klicken, werden verschiedene Versionen angezeigt. Da die Mehr Info ... Taste 5 in Xcode entfernt wurde, ist diese Information auch von der verfügbaren Software> Entwickler Abschnitt der Systeminformationen App, erhältlich durch Öffnen Apple - Menü> Über diesen Mac > System Report ... .
Zum Beispiel Xcode 4.2 (4C139). Marketing-Version 4.2 ist Build-Hauptversion 4, Build-Nebenversion C und Build-Nummer 139. Die nächste Version (vermutlich 4.3) wird wahrscheinlich Build-Version 4D sein, und die Build-Nummer beginnt bei 0 und erhöht sich von dort aus.
Die Versions- / Build-Nummern des iPhone Simulators sind genauso wie iPhones, Macs usw.
Update : Auf Anfrage können Sie die folgenden Schritte ausführen, um ein Skript zu erstellen, das jedes Mal ausgeführt wird, wenn Sie Ihre App in Xcode erstellen, um die Build-Nummer zu lesen, zu erhöhen und in die App-
{App}-Info.plist
Datei zurückzuschreiben. Es gibt optionale zusätzliche Schritte, wenn Sie Ihre Versions- / Build-Nummern in IhreSettings.bundle/Root*.plist
Datei (en) schreiben möchten .Dies wird aus dem How-to-Artikel hier erweitert .
In Xcode 4.2 - 5.0:
/bin/bash
.Kopieren Sie Folgendes und fügen Sie es in den Skriptbereich für ganzzahlige Build-Nummern ein:
Wie @Bdebeez hervorhob, ist auch das Apple Generic Versioning Tool (
agvtool
) verfügbar. Wenn Sie es lieber verwenden möchten, müssen Sie zunächst einige Dinge ändern:Beachten Sie, dass Sie mit der
agvtool
Methode möglicherweise weiterhin regelmäßig fehlerhafte / abgebrochene Builds ohne Fehler erhalten. Aus diesem Grund empfehle ich die Verwendungagvtool
mit diesem Skript nicht.In Ihrer Phase " Skript ausführen" können Sie jedoch das folgende Skript verwenden:
Das
next-version
Argument erhöht die Build-Nummer (bump
ist auch ein Alias für dasselbe) und wird mit der neuen Build-Nummer-all
aktualisiertInfo.plist
.Wenn Sie über ein Einstellungspaket verfügen, in dem Sie die Version und den Build anzeigen, können Sie am Ende des Skripts Folgendes hinzufügen, um die Version und den Build zu aktualisieren. Hinweis: Ändern Sie die
PreferenceSpecifiers
Werte entsprechend Ihren Einstellungen.PreferenceSpecifiers:2
bedeutet, dass Sie sich das Element in Index 2 unter demPreferenceSpecifiers
Array in Ihrer Plist-Datei ansehen. Für einen 0-basierten Index ist dies die dritte Voreinstellung im Array.Wenn Sie das verwenden,
agvtool
anstatt esInfo.plist
direkt zu lesen , können Sie Ihrem Skript stattdessen Folgendes hinzufügen:Wenn Sie eine universelle App für iPad und iPhone haben, können Sie auch die Einstellungen für die iPhone-Datei festlegen:
quelle
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") dec=$((0x$buildNumber)) buildNumber=$(($dec + 1)) hex=$(printf "%X" $buildNumber) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $hex" "$INFOPLIST_FILE"
(Lassen Sie dies hier nur als Referenz.) Dies zeigt die Version und den Build für die Felder "version" und "build" an, die Sie in einem Xcode-Ziel sehen:
In Swift
quelle
alloc
/init
die Zeichenfolge, die die Zeichenfolge beibehält, aber Sie geben sie nicht frei. Für ein Objekt, das Sie von einer Methode zurückgeben, sollten Sie im Allgemeinen eine Convenience-Methode verwenden, damit die Zeichenfolge automatisch automatisch freigegeben oder aufgerufen wirdautorelease
. Entweder:return [NSString stringWithFormat:@"%@ build %@", version, build];
ODERreturn [[[NSString alloc] initWithFormat:@"%@ build %@", version, build] autorelease];
Die Build-Nummer ist eine interne Nummer, die den aktuellen Status der App angibt. Es unterscheidet sich von der Versionsnummer darin, dass es normalerweise nicht dem Benutzer zugewandt ist und keine Unterschiede / Funktionen / Upgrades anzeigt, wie dies normalerweise bei einer Versionsnummer der Fall wäre.
Stellen Sie sich das so vor:
CFBundleVersion
): Die Nummer des Builds. Normalerweise beginnt man dies bei 1 und erhöht sich mit jedem Build der App um 1. Es ermöglicht schnell Vergleiche, welcher Build aktueller ist, und zeigt den Fortschritt des Fortschritts der Codebasis an. Diese können bei der Arbeit mit der Qualitätssicherung von überwältigender Bedeutung sein und sicherstellen, dass Fehler gegen die richtigen Builds protokolliert werden.CFBundleShortVersionString
): Die benutzerbezogene Nummer, mit der Sie diese Version Ihrer App kennzeichnen. Normalerweise folgt dies einem Major.minor-Versionsschema (z. B. MyAwesomeApp 1.2), um den Benutzern mitzuteilen, welche Releases kleinere Wartungsupdates und welche neuen Funktionen sind.Um dies in Ihren Projekten effektiv zu nutzen, bietet Apple ein großartiges Tool namens
agvtool
. Ich empfehle dringend, dies zu verwenden, da es VIEL einfacher ist, als Änderungen an der Liste vorzunehmen. Sie können auf einfache Weise sowohl die Build-Nummer als auch die Marketing-Version festlegen. Dies ist besonders nützlich bei der Skripterstellung (z. B. um die Build-Nummer bei jedem Build einfach zu aktualisieren oder sogar die aktuelle Build-Nummer abzufragen). Es kann sogar exotischere Dinge wie das Markieren Ihrer SVN für Sie tun, wenn Sie die Build-Nummer aktualisieren.Um es zu benutzen:
agvtool new-version 1
(Setzen Sie die Build-Nummer auf 1)agvtool new-marketing-version 1.0
(Setzen Sie die Marketing-Version auf 1.0)Auf der Manpage von finden Sie
agvtool
eine Menge guter Informationenquelle
agvtool
Easy iPhone Application Versioning mit agvtoolDas Skript zum automatischen Inkrementieren der Build-Nummer in der obigen Antwort hat bei mir nicht funktioniert, wenn die Build-Nummer ein Gleitkommawert ist. Deshalb habe ich es ein wenig geändert:
quelle
Die Marketing- Versionsnummer ist für die Kunden als Versionsnummer bezeichnet . Es beginnt mit 1.0 und reicht für größere Updates auf 2.0 , 3.0 , für kleinere Updates auf 1.1 , 1.2 und für Fehlerkorrekturen auf 1.0.1 , 1.0.2 . Diese Nummer orientiert sich an Releases und neuen Funktionen.
Die Build-Nummer ist meistens die interne Anzahl der Builds , die bis dahin erstellt wurden. Einige verwenden jedoch andere Nummern wie die Zweigstellennummer des Repositorys. Diese Nummer sollte eindeutig sein , um die verschiedenen nahezu gleichen Builds zu unterscheiden.
Wie Sie sehen, ist die Build-Nummer nicht erforderlich und es liegt an Ihnen, welche Build-Nummer Sie verwenden möchten. Wenn Sie also Ihre
Xcode
Version auf eine Hauptversion aktualisieren , ist das Build- Feld leer. Das Versionsfeld darf nicht leer sein!.So erhalten Sie die Build- Nummer als
NSString
Variable:So erhalten Sie die Versionsnummer als
NSString
Variable:Wenn Sie beide in einem wollen
NSString
:Dies wird mit Xcode Version 4.6.3 (4H1503) getestet . Die Build-Nummer wird häufig in Klammern angegeben. Die Build-Nummer ist hexadezimal oder dezimal.
In Xcode können Sie die Build-Nummer automatisch als Dezimalzahl erhöhen, indem Sie
Run script
in den Projekteinstellungen Folgendes in die Build-Phase einfügenVerwenden Sie dieses Skript für die hexadezimale Build-Nummer
quelle
Vielen Dank an @nekno und @ ale84 für die tollen Antworten.
Ich habe jedoch das Skript von @ ale84 so geändert, dass die Build-Nummern für Gleitkommazahlen nur geringfügig erhöht werden.
Der Wert von incl kann entsprechend Ihren Anforderungen an das Floating-Format geändert werden. Zum Beispiel: Wenn inkl = .01, wäre das Ausgabeformat ... 1.19, 1.20, 1.21 ...
quelle
Eine andere Möglichkeit besteht darin, die Versionsnummer wie folgt festzulegen
appDelegate
didFinishLaunchingWithOptions
:quelle